Shell编程基础(第4篇:退出状态码)

前言

    退出状态码,表示程序结束后的状态,成功 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厉害…………

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值