shell输入输出重定向
默认状态下,shell将命令的输入流设定为键盘,输出流设定为显示器,错误流也定义为显示器。但是在有些情况下,我们可以改变这些流的设定。改变流的设定常用的符号有 >, », <三个符号。
重定向符<表示将标准输入从键盘重新定义到另外的流。例如:prog < infile, 即prog命令将从文件infile中读取参数。 执行一个shell程序也可以使用这种方式。例如 sh < user1.sh 就表示要执行user1.sh这个shell程序。
其中,>是输出覆盖,»是追加
重定向符<, >,»也能够混合使用,例如: prog < infile > outfile 表示prog命令从infile中获取命令参数,然后将执行结果输出到文件outfile中。
shell管道线处理
| 管道线可以实现将一个程序或命令的输出作为另外一个程序或命令的输入,管道线作为两个命令之间的分隔符。管道线的符号是 “ | ” 。 |
例如有这样一组命令:
$ ls –l > tempfile
$ wc –l tempfile
$ rm tempfile
管道线处理:
$ ls -l | wc -l
| 除此之外,还有“;”、“&”、“&&”、“ | ”可替代管道线“ | ”作为命令列表的分隔符. |
其中:
- “;”:表示多个命令顺序执行
- “&” : 命令行尾输入,表示将命令的执行过程放到后台处理。
“&&”:代替原有的符号“ ”,表示当左边的命令为“真”值时,执行右边的命令。 “ ”: 代替原有的符号“ ”,表示当左边的命令为“假”值时,执行右边的命令。
例如:
(a) pwd ;who ; ls –l
(b)cc prgm.c &
(c)write zhang <letter || mail zhang <letter
(d)mail zhang <letter && rm letter
习题:
- 获得磁盘空闲空间块数
涉及的命令:
(a) df
(b) head -n :将输出信息从头截取n行
(c) tail –n : 将输出信息从尾截取n行
(d) tr:将标准输入拷贝到标准输出(输入输出可以重定向),同时根据选项进行其他操作:
-d "C" 将输入的所有C删除
-s "C" 将输入中所有的两个相连CC改为单个C
-s “[ ]” 将输入中所有的两个相连空格改为单个空格
(e) cut
$ df |head -2 |tail -1 |tr -s "[ ]“ | cut -d" “ -f4
4113180
- 列出当前目录下占用磁盘空间最大的20个文件信息,并将这些信息存入到tempfile文件中。
涉及的命令:
(a)du 显示文件或目录所占的磁盘空间
-s 只显示设定文件目录的空间总量
-a 可以接收多个文件,并一一显示所占的磁盘空间
(b)sort :文件排序
-n 以数值大小作为排序依据
-r 以相反方向排序
-b 排序时,忽略每行前面的空格和制表符
$ du -a |sort -nrb | head -20 >tempfile