共计 1048 个字符,预计需要花费 3 分钟才能阅读完成。
1、命令执行状态返回值
相信大家学习到这里肯定是对命令的使用有一定的了解,不知道大家发现没有我们执行命令有时候会成功,有时候会失败,在我们制作自动化脚本中,如果过程中间有一个命令执行失败了就会导致任务停止,这个时候我们就会通过判断命令是否执行成功的方式来起到一个承上启下的作用,这种思想在实际工作中使用很多。
大家应该还记得我们之前分享过几个位置参数,比如 $1,$2.. 以此往后,他们分别表示执行脚本的第一个参数,第二个参数.. 以此往后。他们有共同的特点就是都是一个 $ 字符加上一个数字来表示,而命令执行状态返回值同样也使用到了 $ 这个字符本身。
命令执行状态值有两种结果,一种为 0,表示命令执行成功,还有一种为 1~255 之间的任意一个数值,这都是表示命令执行是失败的。
获取命令执行状态返回值我们使用 $? 来获取,我们可以使用 echo 回显命令来获取,比如:
bash [root@master1 ~]#echo $?
注意:这里需要强调的是使用 $? 是用来判断上一条命令的执行状态值的,因此在你执行完命令之后你需要立马使用 echo $? 来获取状态值,中间不能再执行任何其他的命令,比如我们执行一个命令来看看:
bash [root@master1 ~]#ls -l 总用量 4 -rw——-. 1 root root 1261 6 月 13 2019 anaconda-ks.cfg [root@master1 ~]#echo $? 0
当我查看当前目录的详细文件信息时,他就打印给我们了,命令执行本身是没有错误的,因此我们查看 $? 的值可以看到是 0。我们再来看一个例子
bash [root@master1 ~]#lss -l bash: lss: 未找到命令… 相似命令是:‘ls’ [root@master1 ~]#echo $? 127
当我不小心执行了 lss 命令时,shell 返回一个错误给我们,此时我立即查看命令状态返回值,发现是 127,这就表示这条命令是失败的,我们也可以看到报错原因是因为系统中没有这个命令导致报错。
2、使用案例:
比如下面这个例子:
bash [root@master1 ~]#lss -l &> /dev/null [root@master1 ~]#if [$? -eq 0];then echo “ 正确 ”;else echo “ 出错啦 ”;fi 出错啦
shell 脚本中经常使用到诸如把命令执行结果写入 /dev/null,中,这种是把正确信息和错误提示信息统统写给 Linux 的无敌洞,不给我们提示任何消息,此时就需要使用 $? 来判断命令状态返回值是否为 0 这样的方式,从而执行下一条命令。