shell学习笔记之九(重定向)
重定向
概念:
将默认的输入输出改成其他的输入输出
文件标识符
linux使用0-9指明特定进程相关的数据流,系统在启动一个进程的时候会为该进程打开三个文件:标准输入(stdin),标准输出(stdout),标准错误输出,分别使用文件标识符0,1,2来标识,如果要为进程打开其他的输入输出,则需要从整数3开始标识。默认情况下,标准输入为键盘,标准输出和错误输出为显示器
I/O重定向
1、标准输出覆盖重定向(>)
ls -l > test.txt
注意:如果指定的文件不存在,则命令会先创建文件
上述命令相当于:ls -l 1>test.txt
ls -l /usr/noExist 2> ls_noExist_err.txt
错误重定向输出
如果命令的输出既有标准输出,又有错误标准输出,则可以分别指定不同标识符的内容
COMMAND 1> stdout.txt 2> stderr.txt
2、标准输出追加重定向(>>)
和>的用法一致,只是这个是追加,不会清空原文件
3、标识输出重定向(>&)
标准输出重定向的作用是将一个标识的输出重定向到另一个标识的输入。
例:将标准输出和标准错误输出同时重定向到一个文件
COMMAND > test.txt 2>&1
如果不关心错误输出
COMMAND > test.txt 2> /dev/null #/dev/null是一个特殊设备,像一个黑洞
4、标准输入重定向 <
5、管道(|)
6、exec
exec是shell的内建命令,
7、Here Document
用于在命令中按行输入文本,格式为<<delimiter,其中delimiter是一个用于标注的分割符,该分割符后所有的输入都被当作是输入的文本,直到出现下一个分隔符。
这个的功能的出现主要是因为Ctrl+D输入完成的信号在交互环境下是可以的,但是在脚本中却无法使用。
例:
#cat here.txt
line1
line2
line3
line4
#现在想要在here.txt的第三行插入一个新行
#!/bin/bash
ed here.txt <<END
3
d
i
this is new line3
.
wq
END
#cat here.txt
line1
line2
this is new line3
line4
也就是说,我们把要在终端输入的命令全部写道一个文件里,这个文件相当于模拟我们的键盘输入
#对一串输入字符排序
#!/bin/bash
sort <<END
sdt
t
dsaj
dsg
fdg
we
gh
avf
END
这样就可以在任何时候任何时间对这些字符串进行排序了。
空格:
1、test 测试比较时,操作符两侧要有空格
2、if [] ,if 和 [] 之间要有空格
3、[ expression ] expression两侧要有空格
4、算数运算和赋值没有空格
5、while与之后的expression有空格 如:while expression
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。