学过C语言都知道,我们用exit来返回一个状态,Bash也是一样,这样父进程会判断子进程是否可用。 一个良好的习惯就是在脚本结束时都返回状态。成功返回0,非0值一般对应一个错误码。
当一个脚本以不带参数 exit 来结束时,脚本的退出状态就由脚本中最后执行命令来决定.
$?读取最后执行命令的退出码.函数返回后,$?给出函数最后执行的那条命令的退出码.这种给
函数返回值的方法是 Bash 的方法.
让我们看个简单的例子:
由于'ls -l'会正确执行,输出状态为0,'lskdf'命令不存在,返回状态为127, 最后由于!逻辑操作,将会反转test命令的结果,这回影响推出状态,所以在执行完脚本后$?的值为1.
一个脚本的状态码可以自定义,写到注释里面,但一些特定的退出码都有预定的含义,避免冲突。
退出码(exit status,或exit code)的约定:
0表示成功(Zero - Success)
非0表示失败(Non-Zero - Failure)
2表示用法不当(Incorrect Usage)
127表示命令没有找到(Command Not Found)
126表示不是可执行的(Not an executable)
>=128 信号产生
也可以通过man exit查看exit的约定。
当一个脚本以不带参数 exit 来结束时,脚本的退出状态就由脚本中最后执行命令来决定.
$?读取最后执行命令的退出码.函数返回后,$?给出函数最后执行的那条命令的退出码.这种给
函数返回值的方法是 Bash 的方法.
让我们看个简单的例子:
#!/bin/bash
ls -l
echo $?
lskdf
echo $?
! true
[yuyzhu@vm10010 experiment]$sh testExit.sh
total 8
-rwxr-xr-x 1 yuyzhu yuyzhu 8 Oct 12 2011 input
-rwxr-xr-x 1 yuyzhu yuyzhu 9 Oct 12 2011 input1
-rwxr-xr-x 1 yuyzhu yuyzhu 63 Feb 25 23:57 shellUntil
-rwxr-xr-x 1 yuyzhu yuyzhu 64 Aug 23 2013 SReturn
-rwxr-xr-x 1 yuyzhu yuyzhu 44 Aug 29 2011 testEnvSettings
-rw-rw-r-- 1 yuyzhu yuyzhu 49 Mar 2 20:55 testExit.sh
-rwxr-xr-x 1 yuyzhu yuyzhu 389 Oct 9 2011 testpackateutils
-rwxr-xr-x 1 yuyzhu yuyzhu 96 Oct 12 2011 testPatter
0
testExit.sh: line 5: lskdf: command not found
127
[yuyzhu@vm10010 experiment]$echo $?
1
由于'ls -l'会正确执行,输出状态为0,'lskdf'命令不存在,返回状态为127, 最后由于!逻辑操作,将会反转test命令的结果,这回影响推出状态,所以在执行完脚本后$?的值为1.
一个脚本的状态码可以自定义,写到注释里面,但一些特定的退出码都有预定的含义,避免冲突。
退出码(exit status,或exit code)的约定:
0表示成功(Zero - Success)
非0表示失败(Non-Zero - Failure)
2表示用法不当(Incorrect Usage)
127表示命令没有找到(Command Not Found)
126表示不是可执行的(Not an executable)
>=128 信号产生
也可以通过man exit查看exit的约定。