重定向--Linux bash

重定向

I/O 重定向的符号

符号含义
>标准输出覆盖重定向
>>标准输出追加重定向
> &标识输出重定向
<标准输入重定向
|管道:从一个命令中读取输出作为另外一个命令的输入

Linux进程默认情况下会有三个缺省打开的文件描述符:标准输入(stdin)、标准输出(stdout)、标准错误(stderror)。它们三个所对应的整数为0、1、2,对应的物理设备为键盘、显示器、显示器

标准输出覆盖重定向
majun@instance-zqtg07w6:~$ ls
add_minus.sh         check_num.sh  export.sh  helloworld.sh  printFILE.sh  score01.sh   shift_02.sh
calllib01.sh         co.txt        file_A     lib01.sh       read.sh       score03.sh   shift_04.sh
check_file_exist.sh  countLine.sh  file_B     os_type.sh     return.sh     shell        txt
check_file.sh        digui01.sh    f.sh       power.sh       sayhello.sh   shift_01.sh  vbscan
majun@instance-zqtg07w6:~$ ls > lstxt.txt
majun@instance-zqtg07w6:~$ cat lstxt.txt
add_minus.sh
calllib01.sh
check_file_exist.sh
check_file.sh
check_num.sh
co.txt
countLine.sh
digui01.sh
export.sh
......
majun@instance-zqtg07w6:~$ ls /etc/pass11
ls: cannot access '/etc/pass11': No such file or directory
majun@instance-zqtg07w6:~$ ls /etc/pass11 2> lstxt02.txt
majun@instance-zqtg07w6:~$ cat lstxt02.txt
ls: cannot access '/etc/pass11': No such file or directory
majun@instance-zqtg07w6:~$

标准输出追加重定向
majun@instance-zqtg07w6:~$ echo wenwenwen > wen.txt
majun@instance-zqtg07w6:~$ cat wen.txt
wenwenwen
majun@instance-zqtg07w6:~$ pwd >> wen.txt
majun@instance-zqtg07w6:~$ cat wen.txt
wenwenwen
/home/majun
majun@instance-zqtg07w6:~$
标识输出重定向

对于& 1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。
对于2 ,表示标准错误,stderr。
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null

可以把/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.

偶尔也可以把 & 在命令的最后加上,表示让程序后台执行。

majun@instance-zqtg07w6:~$ ls ttttt
ls: cannot access 'ttttt': No such file or directory
majun@instance-zqtg07w6:~$ ls ttt 2>1
majun@instance-zqtg07w6:~$ ls
1                    check_num.sh  file_A         lstxt02.txt   read.sh      shell        vbscan
majun@instance-zqtg07w6:~$ cat 1
ls: cannot access 'ttt': No such file or directory
majun@instance-zqtg07w6:~$ ls ttt 2>&1
ls: cannot access 'ttt': No such file or directory
majun@instance-zqtg07w6:~$ ls tt > err.txt 2>&1
majun@instance-zqtg07w6:~$ ls
1                    check_num.sh  export.sh      lib01.sh     printFILE.sh 
add_minus.sh         co.txt        file_A         lstxt02.txt  
check_file.sh        err.txt       helloworld.sh  power.sh     
majun@instance-zqtg07w6:~$ cat err.txt
ls: cannot access 'tt': No such file or directory
majun@instance-zqtg07w6:~$
标准输入重定向
majun@instance-zqtg07w6:~$ cat < add_minus.sh
#!/bin/bash
Add_01=10
Add_02=10
let "Add_03=(++Add_01)"
let "Add_04=(Add_02++)"
echo "add01:$Add_01"
echo "add02:$Add_02"
echo "add03:$Add_03"
echo "add04:$Add_04"
majun@instance-zqtg07w6:~$

majun@instance-zqtg07w6:~$ sort < add_minus.sh
Add_01=10
Add_02=10
#!/bin/bash
echo "add01:$Add_01"
echo "add02:$Add_02"
echo "add03:$Add_03"
echo "add04:$Add_04"
let "Add_03=(++Add_01)"
let "Add_04=(Add_02++)"
majun@instance-zqtg07w6:~$

exec

将文件内容作为标准输入
majun@instance-zqtg07w6:~$ vim command.txt
majun@instance-zqtg07w6:~$ cat command.txt
echo "aaa"
echo "bbbb"
majun@instance-zqtg07w6:~$ exec < command.txt
majun@instance-zqtg07w6:~$ echo "aaa"
aaa
majun@instance-zqtg07w6:~$ echo "bbbb"
bbbb
majun@instance-zqtg07w6:~$ exit
root@instance-zqtg07w6:~#
将文件作为标准输出
majun@instance-zqtg07w6:/root$ cd
majun@instance-zqtg07w6:~$ exec > out01.txt#将标准输出定向到文件
majun@instance-zqtg07w6:~$ pwd
majun@instance-zqtg07w6:~$ whoami
majun@instance-zqtg07w6:~$ cat out01.txt
cat: out01.txt: input file is output file
majun@instance-zqtg07w6:~$ exec > /dev/tty #重新将标准输出定向到显示器
majun@instance-zqtg07w6:~$ cat out01.txt#之前执行命令输出的文件
/home/majun
majun
majun@instance-zqtg07w6:~$

here document

Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下

cmd << delimiter
  Here Document Content
delimiter

其作用是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数;

majun@instance-zqtg07w6:~$ sort << END
> AAA
> ZZZ
> DDD
> NNN
> END
AAA
DDD
NNN
ZZZ
majun@instance-zqtg07w6:~$ cat > here.txt <<END
> AAA
> VVV
> DDD
> VVVVV
> END
majun@instance-zqtg07w6:~$ cat here.txt
AAA
VVV
DDD
VVVVV
majun@instance-zqtg07w6:~$

所有的练习脚本都在:
https://github.com/SaltNego/Learn_linux_bash

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值