迄今为止所有的示例脚本中,我们都是突然停下来的。运行完最后一条命令时,脚本就结束
    了。其实还有另外一种更优雅的方法可以为脚本划上一个句号。
    shell中运行的每个命令都使用退出状态码(exit status)告诉shell它已经运行完毕。退出状态
    码是一个0~255的整数值,在命令结束运行时由命令传给shell。可以捕获这个值并在脚本中使用。
    11.8.1 查看退出状态码
    Linux提供了一个专门的变量$?来保存上个已执行命令的退出状态码。对于需要进行检查的
    命令,必须在其运行完毕后立刻查看或使用$?变量。它的值会变成由shell所执行的最后一条命令
    的退出状态码。
    $ date
    Sat Jan 15 10:01:30 EDT 2014
    $ echo $?
    0
    $
    按照惯例,一个成功结束的命令的退出状态码是0。如果一个命令结束时有错误,退出状态
    码就是一个正数值。
    $ asdfg
    -bash: asdfg: command not found
    $ echo $?
    127
    $
    无效命令会返回一个退出状态码127。Linux错误退出状态码没有什么标准可循,但有一些可
    用的参考,如表11-2所示。
    image.png
    退出状态码126表明用户没有执行命令的正确权限。
    $ ./myprog.c
    -bash: ./myprog.c: Permission denied
    $ echo $?
    126
    $
    另一个会碰到的常见错误是给某个命令提供了无效参数。
    $ date %t
    date: invalid date ‘%t’
    $ echo $?
    1
    $
    这会产生一般性的退出状态码1,表明在命令中发生了未知错误。
    11.8.2 exit 命令
    默认情况下,shell脚本会以脚本中的最后一个命令的退出状态码退出。
    $ ./test6
    The result is 2
    $ echo $?
    0
    $
    你可以改变这种默认行为,返回自己的退出状态码。exit命令允许你在脚本结束时指定一
    个退出状态码。
    $ cat test13
    #!/bin/bash
    # testing the exit status
    var1=10
    var2=30
    var3=$[$var1 + $var2]
    echo The answer is $var3
    exit 5
    $
    当查看脚本的退出码时,你会得到作为参数传给exit命令的值。
    $ chmod u+x test13
    $ ./test13
    The answer is 40
    $ echo $?
    5
    $
    也可以在exit命令的参数中使用变量。
    $ cat test14
    #!/bin/bash
    # testing the exit status
    var1=10
    var2=30
    var3=$[$var1 + $var2]
    exit $var3
    $
    当你运行这个命令时,它会产生如下退出状态。
    $ chmod u+x test14
    $ ./test14
    $ echo $?
    40
    $
    你要注意这个功能,因为退出状态码最大只能是255。看下面例子中会怎样。
    $ cat test14b
    #!/bin/bash
    # testing the exit status
    var1=10
    var2=30
    var3=$[$var1 * $var2]
    echo The value is $var3
    exit $var3
    $
    现在运行它的话,会得到如下输出。
    $ ./test14b
    The value is 300
    $ echo $?
    44
    $
    退出状态码被缩减到了0~255的区间。shell通过模运算得到这个结果。一个值的模就是被除
    后的余数。最终的结果是指定的数值除以256后得到的余数。在这个例子中,指定的值是300(返
    回值),余数是44,因此这个余数就成了最后的状态退出码。
    在第12章中,你会了解到如何用if-then语句来检查某个命令返回的错误状态,以便知道命
    令是否成功。