构建shell基础脚本——退出脚本

shell中运行的每个命令都使用退出状态码来告诉shell自己已经运行完毕。退出状态码是一个0~255的整数值,在命令结束运行时由其传给shell。你可以获取这个值并在脚本中使用。

查看退出状态码

Linux提供了专门的变量$?来保存最后一个已执行命令的退出状态码。对于需要进行检查的命令,必须在其运行完毕后立刻查看或使用$?变量。这是因为该变量的值会随时变成由shell所执行的最后一个命令的退出状态码:

$ date
Fri Jan 12 16:01:30 EDT 2024
$ echo $?
0

按照惯例,对于成功结束的命令,其退出状态码是0。对于因错误而结束的命令,其退出状态码是一个正整数: 

$ asdfg
-bash: asdfg: command not found
$ echo $?
127

 无效命令会返回退出状态码127。Linux错误退出状态码没有什么标准可循。但有一些可用的指南,如表所示。

Linux退出状态码
状态码描述
0命令成功结束
1一般性未知错误
2不适合的shell命令
126命令无法执行
127没找到命令
128无效的退出参数
128+x与Linux信号x相关的严重错误
130通过Ctrl+C终止的命令
255正常范围之外的退出状态码

exit命令

在默认情况下,shell脚本会以脚本中的最后一个命令的退出状态码退出:

$ ./test
The result is 2
$ echo $?
0

你可以改变这种默认行为,返回自己的退出状态码。exit命令允许在脚本结束时指定一个退出状态码:

$ cat test6 
#!/bin/bash
# testing the exit status
var1=10
var2=30
var3=$[ $var1 + $var2 ]
echo The answer is $var3
exit 5

 当你检查脚本的退出状态码时,就会看到传给exit命令的参数值:

$ chmod u+x test6
$ ./test6
The answer is 40
$ echo $?
5

也可以使用变量作为exit命令的参数:

$ cat test7
#!/bin/bash
# testing the exit status
var1=10
var2=30
var3=$[ $var1 + $var2 ] 
exit $var3

 运行这个脚本时,会产生如下退出状态码:

$ chmod u+x test7
$ ./test7
$ echo $?
40

使用这个功能要小心,因为退出状态码最大只能是255。来看下面这个例子:

$ cat test7b
#!/bin/bash
# testing the exit status
var1=10
var2=30
var3=$[ $var1 * $var2 ] 
echo The value is $var3
exit $var3

 现在运行它会得到如下输出:

$ ./test7b
The value is 300
$ echo $?
44

退出状态码被缩减到了0~255的区间。shell通过模运算得到这个结果。一个值的模就是被除后的余数。最终的结果是指定的数值除以256后得到的余数。在这个例子中,指定的值是300(返回值),余数是44,因此这个余数就成了最后的退出状态码。 

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值