傻瓜学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的约定。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值