bash数据流重定向与管道

bash (Bourne-Again SHell) 是当前众多Linux系统的默认shell,拥有强大的功能,便于人们操纵使用Linux系统。

bash中使用的一些特殊符号有:

符 号 内 容
#批注符号,这个最常被使用在script当中,视为说明。其后的数据均不执行
\转义符号,将特殊字符或通配符还原成一般字符
|管道 (pipe),分隔两个管道命令的界定
;连续命令执行分隔符,连续性命令的界定
$适用变量前导符,即是变量之前需要加的变量替代值
&作业控制 (job control),将命令转到后台工作
>与>>数据流重定向,输出向导,分别是“替换”与“累加”
<与<<数据流重定向,输入向导,分别是“键盘输入”与“结束输入”
' '单引号,不具有变量置换的功能
" "双引号,具有变量置换的功能
` `可以先执行的命令,也可使用$()
( )子shell的起始与结束
{ }命令块的组合
1. 输出重定向

举例说明:

#屏幕本应该显示的标准输出(stdout)内容重定向转存到test.txt文件中
#如果test.txt文件已存在,则覆盖
$ ls -al ~ > ~/test.txt

#屏幕本应该显示的标准输出内容重定向转存到test.txt文件中 (数据累加而不覆盖)
$ ls -al ~ >> ~/test.txt

#将标准输出内容重定向到test.txt中,标准错误输出则重定向到test2.txt中,均为累加方式而非覆盖
$ ls -al /test/ >> ~/test.txt 2>> ~/test2.txt

#将标准输出内容与标准错误输出内容均重定向至test.txt中,累加方式
$ find /home/ -name "test.txt" &>> ~/test.txt                   #正确写法
$ find /home/ -name "test.txt" >> ~/test.txt 2>>&1              #正确写法
$ find /home/ -name "test.txt" >> ~/test.txt 2>> ~/test.txt     #错误写法

#将标准错误输出内容丢弃,只在屏幕上显示标准输出内容
$ find /home/ -name "test.txt" 2> /dev/null

2. 输入重定向

<的作用:用文本文件内容或设备来源代替键盘输入

<<的作用:结束输入 (不常用)

举例说明:

#创建一个文本文件test3.txt,内容为 /home/lsy/,以 end 为结束输入
$ cat > test3.txt << "end"
> /home/lsy/
> end         在此处按下回车
$             查看当前目录下,存在test3.txt文件

#下面这条命令的执行效果同 ls -al /home/lsy/
$ ls -al < test3.txt

3. 管道

管道|用于连接两个命令,即以“|”左边命令的标准输出,作为右边命令的标准输入,如下所示:

command1 | command2 | command3
stdout1  => stdin2
            stdout2 => stdin3

管道命令只会处理标准输出,而对于标准错误输出则会忽略。而且,管道右边的命令,必需能够接收标准输入,如less、more、grep、cut等命令,而ls、cp、mv等命令不能接收标准输入,因而不能放在管道右边。

举个例子:

rpm -qa --last | less     #用less来查看显示结果

4. 双向重定向

命令tee可以截获标准输出 (不能截获标准错误输出),传给一个文件或设备,同时保留作为标准输出继续交给下一步处理。用法如下:

tee [-a] file/device
-a : 以累加的方式,将数据流加入file中

#将 ls -al 的执行结果以累加方式保存至test.txt中,并显示在屏幕上
$ ls -al | tee -a test.txt

#将 ls -al 的执行结果以累加方式保存至test.txt中,并显示在屏幕上(用less命令查看)
$ ls -al | tee -a test.txt | less

#将 ls -al 的执行结果分别保存至test.txt、test2.txt中,均以累加方式写入
$ ls -al | tee -a test.txt >> test2.txt


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值