前言
退出状态码,表示程序结束后的状态,成功 or 失败,按照标准,退出状态码0表示成功,非0表示失败,退出状态码在shell编程中会大量使用,一定得学习的透透的哦
0 成功
非0 失败
if只认退出状态码
bash中的if,只要命令的退出状态码为0,即会执行if中的代码块,这与大多数语言的标准完全不同,会让所有人懵逼,有退出状态码的命令都能放在if语句的后面,包括函数……
1、test
2、true
3、false
4、函数
5、任意命令(程序)
等等,都会返回退出状态码给到if,注意true与false在shell中也是个命令(bash中的内置命令)
if true; then
echo hello world
fi
true命令的退出状态码固定为0,所以if中的语句永远可以执行
while也只认退出状态码
whilie同样也只识别退出状态码,只要有退出状态码的命令,即可作为while的条件,只有退出状态码为0时才会执行,非0不会继续循环
1、任意命令
2、函数
for也认退出状态码
for语句中的条件,也认退出状态码,同理它也在找0
1、任意命令
2、函数
return返回指定的退出状态码
函数中定义的return,返回的是退出状态码,可以指定一个数字,比如 return 10,表示返回的退出状态码为10
function baby() {
return 10
}
只写return,不写值
首先会终止函数继续向下执行其他语句,接着函数会返回最后一条命令的退出状态码作为整个函数的退出状态码
function hello(){
echo hello world
return # 返回的是最后一条commands的退出状态码
}
&&、|| 退出状态码
1、&&
当第一个命令的退出状态码为0,后续的命令才会执行
2、||
当第一个命令的退出状态码为非0,后续的命令才会执行
有管道|操作,只看最后一个命令的退出状态码
if ls -l | grep "adc"; then
echo hello world
fi
此时的有管道符号|,此时由于grep命令是最后一个命令,它的退出状态码将作为if的条件!
bash脚本程序结束,返回退出状态码
1、使用exit命令显式返回
exit命令,不仅会终止程序的执行,还会返回一个退出状态码
echo hello world
exit 100
2、最后一条命令作为整个脚本的退出状态码
echo hello world
如果脚本程序中没有指定退出状态码,则最后一个命令的退出状态码,会作为整个bash脚本的退出状态码
$?获取上一个命令的退出状态码
echo hello world
last_exit_code=$?
echo ${last_exit_code}
由于上一个命令是echo,$?获取则是echo的退出状态码
echo hello world | grep hello
last_exit_code=$?
echo ${last_exit_code}
此时由于含有管道符,$?获取的管道符后的grep命令的退出状态码
退出状态码最大为255
GPT牛逼:在大多数Unix和Linux系统中,shell编程的退出状态码最大是255。这是因为退出状态码是一个8位的无符号整数,范围从0到255。如果退出状态码超出了这个范围,它将被截断为8位,只保留最低的8位。因此,如果你尝试设置一个大于255的退出状态码,它将被截断为一个介于0和255之间的值。
总结
1、退出状态码非常重要,只有理解了退出状态码,才能编写出合理的shell程序
2、0代表成功、非0代表失败,这是大佬规定的标准
3、GPT厉害…………