shell 脚本编程学习(五) 输入输出重定向和环境变量
来源:互联网 发布:淘宝小商品拍摄技巧 编辑:程序博客网 时间:2024/06/15 15:27
输入输出重定向
输入输出重定向在 shell 中经常使用,例如把一个命令的输出保存到文件或者通过管道将命令组合起来使用等,shell 脚本允许我们用 shell 实现更复杂的逻辑,所以有必要熟练掌握输入输出重定向机制。
我们知道在 linux 系统中“一切皆是文件”,而每次打开一个 shell 的时候,linux 都会打开 3 个文件供程序使用:
- STDIN(标准输入)——通常是终端键盘
- STDOUT(标准输出)——通常是终端显示器
- STDERR(标准错误输出)——通常也是终端显示器
默认情况下程序从键盘获得输入再把结果和错误打印到屏幕上,但这不是程序工作的唯一方式,我们可以使用重定向操作符指定其它的输入和输出文件让程序使用。
# > 操作符将 STDOUT 重定向到一个文件ls > out.txt # >> 操作符将 STDOUT 添加到一个文件的末尾ls >> out.txt # < 操作符将 STDIN 重定向到一个文件grep '\.txt' < in.txt # | 管道操作符,从一个程序或进程获得输出,然后作为输入发送给另一个程序或进程ls | wc -l # << delimiter 把当前的输入流和 STDIN 关联起来直到到达指定的分隔符(delimiter)# php 中也有这样的语法,当需要指定大量多行的文本输入时很有用cat <<ENDhello world!line2line3END
由于 linux “一切皆是文件”的设计,通过重定向输入输出文件,我们可以让我们的程序从普通文件、管道文件、网络套接字、硬件设备等任何地方获得输入,也可以将程序结果输出到任何地方,这样就大大提高了程序的灵活性。最后还要注意输出重定向操作符的几个修饰标记,实践中经常会用到。
# 将输出发送给空设备,这么做可以实现舍弃程序输出的效果。# 计划任务中那些需要反复执行又不想输出其结果的操作可以这样重定向。sh script.sh > /dev/null # 将 STDERR 重定向到一个文件。# 前面一直在说 STDIN 和 STDOUT 的重定向,其实想重定向 STDERR 只要在 > 操作符前加个 2 修饰就行了。sh script.sh 2> error.txt # 在 > 操作符前加 & 修饰表示把 STDIN 和 STDOUT 都重定向到一个文件。sh script.sh &> /dev/null # 这是另一种写法,即将 STDIN 重定向到一个文件,再将 STDERR 重定向到 STDIN,和上面的写法效果相同。sh script.sh > /dev/null 2>&1 # 也可以将 STDIN 和 STDOUT 重定向到不同的文件。sh script.sh >out.txt 2>error.txt
环境变量
在 shell 中直接设置的变量是只在当前 shell 中有效的。有时候我们会想让一些变量在子 shell 中也能使用的,例如想要传递变量给 shell 脚本的时候,这时应该使用 export 命令将变量导出,这种在子 shell 中也有效的变量也叫做环境变量。
# 导出 name 变量,以后在子 shell 中读取 name 变量也会得到数据 123name=123export name=123# 设置并导出 PATH 环境变量让让它多包含一个目录export PATH=$path:/home/my/shell
环境变量的原理很简单,可以理解为当前 shell 会记录下用 export 导出的变量,当从当前 shell 开启子 shell 时(例如运行一段 shell 脚本)会为子 shell 预先设置好导出的变量。由此我们也知道 shell 导出的变量只对它的子 shell 有效 。
# export 测试1 导出变量对子 shell 有效# test1.shecho $name1# main shellname1=jackexport name1sh test1.sh # 输出 jack# export 测试2 导出变量对父 shell 无效# test2.shname2=jackexport name2# main shellsh test2.shecho $name2 # 输出为空,即 name2 变量没有被设置
另外想查看当前 shell 中已经设置的变量,使用 set 命令。想删除一个变量可以用 unset 命令。
# 列出当前 shell 中所有已经设置的变量set # 从当前 shell 中删除 name 变量unset name
- shell 脚本编程学习(五) 输入输出重定向和环境变量
- shell脚本学习11——输入输出重定向
- 笔记:Linux Shell (五):标准输入输出重定向
- Shell教程(五):替代、引用机制、输入输出重定向
- Shell 学习23 - Shell 输入输出重定向
- 【Shell脚本学习24】Shell输入输出重定向:Shell Here Document,/dev/null文件
- Shell学习之:输入输出重定向
- shell输入输出重定向
- Shell输入输出重定向
- Shell输入输出重定向
- 脚本输入输出重定向
- 高级shell脚本编程之重定向、环境变量、shell函数、echo命令用法
- [shell]shell输入输出重定向
- linux shell 脚本学习笔记--$ 和重定向>
- shell脚本的学习4-函数和重定向
- (15)shell 输入输出重定向
- linux shell脚本案例八:输入输出重定向
- Shell脚本编程(一):输出重定向
- LeetCode【122】Best Time to Buy and Sell Stock II
- C# 静态成员 静态方法 静态类
- Oozie介绍
- 数据类型
- Redis的持久化机制RDB与AOF
- shell 脚本编程学习(五) 输入输出重定向和环境变量
- JS中-==-与-===
- ArcGIS BLOB—大二进制类型
- 准备好智能照明2.0了吗?---凯利讯半导体
- 跨域的那些事儿
- 高性能Web架构
- js正则表达式写法
- BackgroundWorker线程控件用法
- androidstudio 卡顿编译慢的解决方法总结