bash脚本本身是否返回代码?

时间:2011-12-19 03:40:12

标签: linux bash return-value

我知道在执行命令后返回代码将包含在$?中,但是$?在执行脚本后意味着什么?该脚本中最后一个命令的返回码?

我可以判断一个脚本是否已经从头到尾被执行并且没有被某些意外的系统停止或其他事件中断?

如果我有一个类似下面的脚本,

Command A;
if [ $? -eq 0]
then
echo "OK" >> log
else
echo "failed" >> log
fi

并且系统在A运行时暂停,我会在该日志文件中找到什么? “好”,“失败”或什么都没有?

3 个答案:

答案 0 :(得分:6)

  1. 是,或exit之后传递的值,例如exit 31

  2. 并非在其他脚本中采取措施使其明确。

答案 1 :(得分:4)

$?读取最后执行的命令的退出状态。函数返回后,$?给出函数中执行的最后一个命令的退出状态。这是Bash为函数提供“返回值”的方式。

Example

#!/bin/bash

echo hello
echo $?    # Exit status 0 returned because command executed successfully.

lskdf      # Unrecognized command.
echo $?    # Non-zero exit status returned because command failed to execute.

echo

exit 113   # Will return 113 to shell.
       # To verify this, type "echo $?" after script terminates.

#  By convention, an 'exit 0' indicates success,
#+ while a non-zero exit value means an error or anomalous condition

答案 2 :(得分:0)

脚本的返回码确实是最后执行的命令的返回码,有些命令允许你在任何时候完成执行并随意设置返回码;那些是exit用于脚本而return用于函数,但在这两种情况下如果省略参数,它们只会使用上一个命令的返回码。