shell中的输入与输出

版权声明:转载需注明出处,若有不足,欢迎指正。 https://blog.csdn.net/qq_28992301/article/details/53672608

shell中的输入与输出

shell中,有着三个标准文件描述符。0代表标准输入,1代表标准输出,2代表标准错误

1.管道

管道的功能是:将一条命令的返回值,作为另一条命令的参数

  • 其实不用管道,用中间变量也能实现该功能,但是太臃肿,还是管道好。下面的语句先执行command1,得到结果作为参数执行command2,得到结果作为参数执行command3
command1 | command2 | command3

2.标准输出

  • echo可以直接打印字符串,一般情况不需要用单/双引号包围。但当字符串中出现单/双引号时,为了避免歧义,必须使用另外一种引号包围
echo abc123 #一般情况下直接打印
echo "let's go" #字符串里单引号,则用双引号包裹
echo 'he says "shell is easy"' #字符串里双引号,则用单引号包裹
  • 默认的,echo在打印字符串的后面,会自动加上换行符。若想取消这个特性,可以加参数echo -n

3.标准输入

  • shell脚本的输入一般分为读参数和读文件内容,读参数很简单,直接用参数变量即可,单纯读文件也很简单,但是要逐行读取内容就比较复杂。常用的方法为先cat文件内的所有内容,然后通过管道传给含有read命令的while语句,这样每一次循环就能读取一行内容
#实现一行一行读取文件内容
count=1
cat test | while read line #line是一个变量,用于存储一行数据
do
    count=$[ $count + 1 ]
    ....
done

4.重定向

  • 我们可以重定向输出,即将指令的返回值导出到指定的某个文件,方法是使用>(覆盖写) 或>>(追加写)
pwd > /home/root/path.txt       #把pwd指令的返回值覆盖写入文件
echo $i >> /home/root/log.txt   #把某个变量值追加写入文件
  • 此外,错误信息的重定向也很常见,STDERR(标准错误输出)的描述符为2,我们只需如下操作,即可将错误信息重定向至任何地方,下面这句的目的是将错误信息丢弃。此外还需注意2和>直接不能有任何的空格
ls -al badfile 2>/dev/null
  • 输入也可被重定向,即将文件中的内容导入至命令(作为命令的参数),方法是使用<<<。说实话输入重定向用的很少,主要是命令可以直接以文件名作为参数,何必重定向呢。。。。

  • 对于重定向,shell还提供一种功能,可以将输出同时导出到多个地方。如下,tee命令相当于在管道一段子的一个T型接头,一个目的地是标准输出,另一个目的地是output.txt

pwd | tee output.txt #默认情况是覆盖写入,若想使用接续写入功能,加上 -a 即可
  • 上面介绍的都是临时重定向,很多适合我们需要的是,将某个脚本中所有输出/输出永久重定向。我们可以使用exec命令实现
exec 1>output.txt   #将当前脚本中的标准输出,重定向到output.txt
exec 2>error.txt    #将当前脚本中的错误输出,重定向到error.txt
exec 0>input.txt    #当前脚本中的标准输入,都从input.txt中获得

猜你喜欢

转载自blog.csdn.net/qq_28992301/article/details/53672608