标准输入输出举例:
在这里,cat命令等待标准输入,然后用户输入hello,然后在屏幕上输出hello
标准错误输出:
重定向
-
所谓重定向,就是不使用系统的标准输入端口、标准输出端口或标准错误端口,而进行重新的指定,所以重定向分为输出重定向、输入重定向和错误重定向。通常情况下重定向到一个文件中
-
在Shell中,要实现重定向主要依靠重定向符实现,即Shell是检查命令行中有无重定向符来决定是否需要实施重定向
重定向符
1、输入重定向
重定向符 | 说明 |
---|---|
< | 输入重定向 |
2、输出重定向
重定向符 | 说明 |
---|---|
> | 覆盖式的输出重定向 |
>> | 追加式的输出重定向 |
举例:
可以看出,一开始文件内容为"Hello World",使用覆盖式输出重定向后内容被覆盖了,因此变为“I am 18”,使用追加式输出重定向后,“I am a student”是追加到原来的内容后面。
空设备(/dev/null):
- 空设备是个黑洞,发往它的任何内容都将不复存在
- 经常用于屏蔽命令的输出或错误输出,尤其用于shell脚本
例如:
- 屏蔽命令的输出和错误输出
$ myprogram &> /dev/null
$ myprogram >/dev/null 2>&1 - 清空文件内容
3、错误输出重定向
重定向符 | 说明 |
---|---|
2> | 覆盖式的错误输出重定向 |
2>> | 追加式的错误输出重定向 |
管道
管道的引入
- UNIX 系统的一个基本哲学是:一连串的小命令能够解决大问题。其中每个小命令都能够很好地完成一项单一的工作。现在需要有一些东西能够将这些简单的命令连接起来,这样管道就应运而生
- 许多Linux命令具有过滤特性,即一条命令通过标准输入端口接受一个文件中的数据,命令执行后产生的结果数据又通过标准输出端口送给后一条命令,作为该命令的输入数据。后一条命令也是通过标准输入端口而接受输入数据。
- 管道(使用符号“|”表示)用来连接命令
- 命令1 | 命令2
- 将命令1的STDOUT发送给命令2的STDIN
- STDERR不能通过管道转发
- 用来组合多种工具的功能
- 命令1 | 命令2 | 命令3 |……
- cat mytext | tr ‘a-z’ 'A-Z‘ | wc
- 管道线中的每一条命令都作为一个单独的进程运行,每一条命令的输出作为下一条命令的输入。
- 由于管道线中的命令总是从左到右顺序执行的,因此管道线是单向的
- 命令1 | 命令2 | 命令3 |……
举例:
myFile文件内容如下:
(1)cat myFile | head 3
在这里,先是查看myFile的文件内容,然后将其显示的内容作为head -3的输入,因此最终输出的结果为myFile的前三行
(2)cat myFile | grep “^this.*line”
该命令先是查看myFile的内容,然后查找this开头,line结尾的行。
T型管道
-
格式
命令1|tee 文件名|命令2 -
功能
将命令1的STDOUT保存在文件名中,然后管道输入给命令2 -
用于
1、保存不同阶段的输出
2、复杂管道的故障排除
3、同时查看和记录输出
命令替换
-
使用命令的输出,常用于:
1、在文本中嵌入命令的执行结果
2、命令参数是另一个命令执行的结果 -
使用方法:
1、$(command) 或 `command`(注意这里不是单引号)
2、cmd1 $(cmd2) 或 cmd1 `cmd2` -
例子:
1、打印当前时间
2、显示当前目录下所有文件
命令组合: