`
zhuyuyuseu
  • 浏览: 8757 次
  • 性别: Icon_minigender_1
  • 来自: 南通
社区版块
存档分类
最新评论

傻瓜学Bash - 退出和退出状态

阅读更多
  学过C语言都知道,我们用exit来返回一个状态,Bash也是一样,这样父进程会判断子进程是否可用。 一个良好的习惯就是在脚本结束时都返回状态。成功返回0,非0值一般对应一个错误码。
  当一个脚本以不带参数 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的约定。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics