
文件返回值
当我们执行一个命令的时候,命令无论执行成功或者失败,都会给我们返回一个执行后的退出状态
这个状态使用命令"echo $?"查看
如果执行成功,返回值为0
执行了cd命令和ls命令,成功,返回值为0

如果执行失败,返回值不为0
进入一个不存在的目录,报错,返回值为1
输入一个不存在的命令,报错,返回值为127

从上面两图中可以看到,无论执行的命令成功或者失败,大多都是有提示的
对于没有提示的命令,我们就可以通过"echo $?"来看是否成功执行
文件描述符
常用的文件描述符有0,1,2是标准输入,标准输出和错误输出
文件描述符0,是标准输入,默认是键盘输入,也可以是用文件或者其他命令来进行输入
文件描述符1,是标准输出,默认是屏幕,也可以输出到文件
文件描述符2,是标准错误,就是程序执行报错的输出,默认是屏幕,也可以输出到文件

文件输出重定向
需要认识几个符号
">"覆盖重定向
">>"追加重定向
我们先创建一个文件夹"mkdir /root/17test"
进入新建的文件夹"cd /root/17test"
然后试试上面两个重定向符号
先实验追加重定向
"echo 123 >> 17.txt"执行多次,后cat一下这个文件

我执行了3次之后,发现这个文件也是三行,说明输出都重定向到这个文件里面了
如果是用">"覆盖重定向呢

结果显而易见,只有最后一条的值
如果我们重定向的时候报错了会啥样,我们来试试

错误打印到了屏幕上,重定向的文件也被清空了
这里我们加上文件描述符再试一次

错误重定向到了文件里面,没有打印出来
我们新建一个脚本文件,"vim 17.sh",输入两行内容

我们执行一下,"sh 17.sh"

这样一行是标准输出,一行是标准错误,我们将这两条分别重定向到不同的文件
"sh 17.sh >info.txt 2>error.txt"

上面的命令将">"改为">>"就可以追加文件内容,而不是只保留一条了
如果我们想让标准输出和标准错误合并到一个文件,应该怎么处理呢
"sh 17.sh >all.txt 2>&1"

同理,标准输出和标准错误的重定向可以反过来写
"sh 17.sh 2>all.txt 1>&2",效果是一样的

文件输入重定向
command << delimiter
从标准输入中读入,直至遇到delimiter分界符

图中123就是我指定的分界符
我们可以用此方法结合文件输出重定向,创建一个有内容的文本
"echo << fjf >>fjf.txt"
