目录
一、退出码
1.Bash命令,脚本和脚本中的函数都会返回退出状态码
1.1 成功,返回0
1.2 不成功,返回非零值。通常都被解释,翻译成一个错误码
2.在bash脚本中
2.1执行exit nnn。将退出码nnn传递给shell,nnn必须是0-255的十进制
2.2 执行exit,由于exit之前最后执行的命令来决定
2.3 没有exit,由最后执行的命令来决定
3.$? 保存了最后所执行的命令、脚本的突出
注:这些是脚本中本身有的含义在写脚本中不要使用一下数字
退出码 | 含义 |
1 | 通用错误 |
2 | Shell内建命令使用错误(Bash文档上有说明) |
126 | 命令调用不能执行 |
128 | “command not found” |
128+n | Exit的参数错误 |
130 | 用Control -C 来结束脚本 |
255*- | 超出范围的退出状态 |
#!/bin/bash
#退出状态码
echo hello
echo $? #0
lll
echo $? #非零的值,比如:127
echo
true #tur是bash的一个内置命令
echo "exit status of \"true\" = $?" #0
! true
echo "exit status of \"true\" = $?"
exit 113 # 非零退出码,通常表示错误
思考?他们的退出状态码
Ls | bas_command
Echo $?
! ls | bad_command
Echo $?
二、管道状态
root@server1 ~]# echo $?
0
[root@server1 ~]# ^C
[root@server1 ~]# true | true
[root@server1 ~]# echo $?
0
[root@server1 ~]# true | false
[root@server1 ~]# echo $?
1
[root@server1 ~]# false | true
[root@server1 ~]# echo $?
0[root@server1 ~]# echo $?
0
[root@server1 ~]# ! true | true
[root@server1 ~]# echo $?
1
[root@server1 ~]# ! true | false
[root@server1 ~]# echo $?
0
[root@server1 ~]# ! false | true
[root@server1 ~]# echo $?
1
大部分看管道退出代码看最后一个命令的状态
Bash的set -o pipefail 这个是从管道最后面到前来看,判断是否全部允许成功,如果没有全部运行成功那么,退出代码是不是0(默认是关的)
例:
[root@server1 ~]# ls dd | echo $?
0
ls: 无法访问dd: 没有那个文件或目录
[root@server1 ~]# ls dd | pwd ; echo $?
/root
ls: 无法访问dd: 没有那个文件或目录
0
[root@server1 ~]# set -o pipefail
[root@server1 ~]# ls dd | pwd ; echo $?
/root
ls: 无法访问dd: 没有那个文件或目录
2