shell脚本可以将多个命令或者工具组合起来生成输出,一个命令的输出可以作为另一个命令的输入,依次类似,命令组合的输出会被存储在一个变量中
输入一般通过stdin或者参数传递给命令,输出会以stdout或者stderr的方式,当多个命令并存的时候,会一边输入一边输出
连接这些命令的方式,需要一个Linux的过滤器, | 称之为 管道,pipe,连接了每一个过滤器,管道操作符是 |
cmd1 | cmd2 | cmd3
这样,cmd1的输出会传递给cmd2,cmd2的输出传递给cmd3,最后显示出来
下面的语句就是先进行获取输出,将其转为输出,然后传给cat -n加上行号,然后输出定向给out.txt
ls | cat -n > out.txt
甚至可以以子shell的方式去获取到数据
cmd_output=$(ls|cat -n)
echo $cmd_output
然后可以将$()换为反引号
cmd_output=`COMMANDS`
还有一件事,子shell是一个单独的进程,定义起来可以通过()操作符
当命令在子shell中执行的时候,不会对当前的shell有任何的影响,所有的改变都只限制在子shell之中,例如,当使用cd命令改变子shell当前目录时候,不会反映到主shell的环境之中
pwd;
(cd /bin ll)
pwd;
如果在一个子shell之中,将命令的输出读入一个变量之中,可以将其放入双引号之中,不然其中的空格和换行符将会被忽略哦
a=$(cat text.txt)
echo $a
会丢失换行符
a=”$(cat text.txt)”
echo $a