shell编程:io输出重定向

IO重定向

  a. 输入输出的数据流分为三种:1标准输入,2标准输出,3标准错误输出

        1、 输入的数据流: <– 标准输入(stdin),键盘

                代码为0,使用<或<<

        2、输出的数据流:–> 标准输出(stdout).显示器

                代码为1,使用>或>>

        3、 错误的输出流: –>标准错误输出(stderr),显示器

                代码为2,使用2>或2>>

  b. fd: file descriptor,文件描述符

      i. 标准输入:0

      ii. 标准输出:1

      iii. 错误输出:2

  c. IO重定向

      i. 输出重定向:>  命令的输出结果由显示器转到某个文件中,也就是说所有结果都保存在重定向的文件中了

          1. 特性:覆盖输出,将原来文件中的内容覆盖掉,

      ii. 输出重定向:>>

          1. 特性:追加输出,在原来的基础上增加

[root@localhost ~]#echo "hello" > test
[root@localhost ~]#cat test
hello
[root@localhost ~]#echo "how are you" > test #原来的内容会丢失
[root@localhost ~]#cat test
how are you
[root@localhost ~]#echo "how old are you" >> test #追加到后面
[root@localhost ~]#cat test
how are you
how old are you
vi. 错误输出流重定向:2>,2>> 特性和上面相同,不通用,命令的输出的错误结果信息由显示器转到某个文件中,也就是说所有结果都保存在重定向的文件中了

示例说明:如果命令执行成功,执行命令echo $?的结果为0,表示成功,如果结果非0,表示失败,如果andy用户已经存在了,再创建相同的用户名会报错,结果为非0,“>”重定向只能将正常的输出流重定向,这里重定向到/dev/null,但是执行的错的信息就不能成功重定向到/dev/null里面,要使用“2>”才可以将错误信息重定向。

[root@localhost ~]#id andy
uid=496(andy) gid=491(andy) groups=491(andy)
[root@localhost ~]#useradd andy
useradd: user 'andy' already exists
[root@localhost ~]#useradd andy > /dev/null #错误信息不能重定向
useradd: user 'andy' already exists
[root@localhost ~]#echo $?
9
[root@localhost ~]#useradd andy 2> /dev/null #错误信息可以正常重定向
[root@localhost ~]#echo $?
9
[root@localhost ~]#useradd bob > /dev/null #执行命令成功的状态值为0
[root@localhost ~]#echo $?
0
vii. 合并正常输出流和错误输出流:

          1. &>, &>>,覆盖和追加,不管对错都可以执行,比下面的简洁,推荐

          2. 合并追加

              a. COMMAND > /path/to/somefile 2>&1

              b. COMMAND >> /path/to/somefile 2>&1

示例:不管输出信息正确错误与否,都可以重定向,只关心执行状态结果

[root@localhost ~]#useradd andy &> /dev/null
[root@localhost ~]#echo $?
9
[root@localhost ~]#useradd alex &> /dev/null
[root@localhost ~]#echo $?
0
另外一个示例,test文件存在,test2文件不存在,不管cat的结果是否正确,都重定向到log文件中,作为日志记录,只关心执行命令的状态值

[root@localhost ~]#cat test
hello
[root@localhost ~]#cat test > log 2>&1
[root@localhost ~]#echo $?
0
[root@localhost ~]#cat log
hello
[root@localhost ~]#cat test2 > log 2>&1
[root@localhost ~]#echo $?
1
[root@localhost ~]#cat log
cat: test2: No such file or directory

------下面的一样,重定向
[root@localhost ~]#cat test &> log
[root@localhost ~]#cat log
hello
[root@localhost ~]#cat test2 &> log
[root@localhost ~]#cat log
cat: test2: No such file or directory
-------追加
[root@localhost ~]#cat test &>> log
[root@localhost ~]#cat test2 &>> log
[root@localhost ~]#cat log
hello
cat: test2: No such file or directory

转载于:https://blog.51cto.com/kinda5/2137154

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值