当前脚本的输入,都是通过读取键盘,输出是直接显示到屏幕上。而输入输出重定向,能够把输入输出扩展到其他位置,比如从文件中读取或者输出到文件中。
输入重定向
输入重定向是把文件中的内容输入作为内容,输入给对应的指令。例如输入:
cat < test1.sh
输出:
#!/bin/bash
#This is first shell script to print hello world
echo "hello world"
这就是把test1.sh的内容输入给cat这个指令,cat指令会把对应的输入打印到屏幕上,再举一个例子,输入:
wc < test1.sh
输出:
3 13 80
这三个数字分别代表test1.sh这个文件的行数,单词个数和字节个数。
输出重定向
输出重定向可以把结果写到文件中而非打印到屏幕上,例如输入:
date +%y%m%d > tmp.txt
当tmp.txt不存在的时候,会去自动创建这个文本并写入,查看tmp.txt中内容
cat tmp.txt
结果为:
191201
注意:这里重定向会覆盖原来的内容。如果想要不覆盖,而是在后面追加的话使用符号 >>,例如输入:
ls >> tmp.txt
输出tmp.txt内容
191201
count_exe.sh
isPhone.sh
管道
通过重定向可以把输入输出重定向到文件中,如果是两个指令之间呢,两个指令之间如果要传输数据的话怎么办呢?当然用重定向间接地以类似于缓冲区的形式传递也是可以的,不过通过管道更加方便。
比如通过管道把ls输出的结果输入到sort排序这个命令中,输入:
ls | sort
输出:
count_exe.sh
isPhone.sh
这里的 |就是管道。
注意,管道左右两侧的指令并不是说左侧先执行,然后把结果输入到缓冲区,然后右侧的指令再从缓冲区里面去读取,管道并不存在缓冲区,左侧指令一有结果右侧指令立即就有输入。