Linux 退出状态码

Linux 退出状态码

Linux shell 中运行的每一个命令都使用 退出状态码 来告诉shell命令已运行完毕。退出状态码值 0~255。
Linux 提供了一个专门的变量 $? 来保存上一个执行命令的退出状态码。

zzz@ubuntu:~/my_learning$ echo $?
0
zzz@ubuntu:~/my_learning$ pwd
/home/zzz/my_learning
zzz@ubuntu:~/my_learning$ echo $?
0
zzz@ubuntu:~/my_learning$ pwds

Command 'pwds' not found, did you mean:

  command 'pwdx' from deb procps (2:3.3.16-1ubuntu2.3)
  command 'pwd' from deb coreutils (8.30-3ubuntu2)
  command 'pads' from deb pads (1.2-12)
  command 'pods' from deb pmtools (2.2.0-1)

Try: sudo apt install <deb name>

zzz@ubuntu:~/my_learning$ echo $?
127
zzz@ubuntu:~/my_learning$ 

可以看到,当命令正确执行完毕后,退出状态码是0。如果命令结束时有错误,退出状态码是正值。
一些常见的状态码含义

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

指定退出状态码
默认情况下,shell脚本会以脚本的最后一个命令的退出状态码退出。但是,可以使用 exit 命令来指定退出状态码。

zzz@ubuntu:~/my_learning$ vim test.sh
zzz@ubuntu:~/my_learning$ cat test.sh 
#!/bin/bash

a=1
zzz@ubuntu:~/my_learning$ . test.sh 
zzz@ubuntu:~/my_learning$ echo $?
0
zzz@ubuntu:~/my_learning$ vim test.sh
zzz@ubuntu:~/my_learning$ cat test.sh 
#!/bin/bash

a=1
exit 10
zzz@ubuntu:~/my_learning$ bash test.sh 
zzz@ubuntu:~/my_learning$ echo $?
10
zzz@ubuntu:~/my_learning$ 
zzz@ubuntu:~/my_learning$ vim test.sh 
zzz@ubuntu:~/my_learning$ cat test.sh 
#!/bin/bash

a=1
exit 300
zzz@ubuntu:~/my_learning$ chmod u+x test.sh 
zzz@ubuntu:~/my_learning$ ./test.sh 
zzz@ubuntu:~/my_learning$ echo $?
44
zzz@ubuntu:~/my_learning$

可以看到,当指定的退出状态码的值超过255的范围时,会被缩减到0~255之间。最终的结果将是指定的值除以256后得到的余数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值