一、退出状态码
1.退出
exit 被用来结束一个脚本,它也返回一个值,并且这个值会传递给脚本的父进程,父进程会使用这个值做下一步的处理。
2.退出状态码
每个命令都会返回一个退出状态码(有时候也被称为返回状态)。
成功的命令返回 0,不成功的命令返回非零值,非零值通常都被解释成一个错误码。行为良好的 UNIX 命令、程序和工具都会返回 0 作为退出码来表示成功,虽然偶尔也会有例外。
同样的,脚本中的函数和脚本本身也会返回退出状态码。在脚本或者是脚本函数中执行的最后的命令会决定退出状态码。在脚本中,exit nnn
命令将会 nnn
退出码传递给 shell(nnn 必须是十进制数,范围必须是0-255)。
当脚本以不带参数的 exit 命令来结束时,脚本的退出状态码就由脚本中最后执行的命令来决定(就是 exit 之前的命令)。
3.一个例子
$ vim test.sh
输入代码:
#!/bin/bash
echo hello
echo $? # 退出状态为0, 因为命令执行成功.
lskdf # 无效命令.
echo $? # 非零的退出状态, 因为命令执行失败.
echo
exit 113 # 返回113退出状态给shell.
# 为了验证这个结果, 可以在脚本结束的地方使用"echo $?".
# 一般的, 'exit 0' 表示成功,
#+ 而一个非零的退出码表示一个错误, 或者是反常的条件
$?
指代的是上一条指令的执行结果。
不带参数的 exit
命令与 exit $?
的效果是一样的,甚至脚本的结尾不写 exit
也与前两者的效果相同。
运行代码:
$ bash test.sh
二、反转一个条件的用法
1.例子
!
逻辑“非”操作符,将会反转命令或条件测试的结果,并且这会影响退出状态码。
$ vim test.sh
输入代码:
#!/bin/bash
true # "true" 是内建命令.
echo "exit status of \"true\" = $?" # 0
! true
echo "exit status of \"! true\" = $?" # 1
# 注意: "!" 和指令间需要一个空格
# 如果一个命令以'!'开头, 那么会启用Bash的历史机制.
true
!true
# 这次就没有错误了, 也没有反转结果.
# 它只是重复了之前的命令(true),这种语法在个别版本的bash中并不支持
运行代码:
$ bash test.sh
特定的退出状态码具有保留含义,所以用户不应该在脚本中指定它。