检查返回值的shell方法的错误代码

时间:2014-08-27 03:29:17

标签: linux bash shell unix

我有一个示例shell方法:

  1. 经过一些处理后返回一个值。
  2. 如果发生任何错误,请退出退出代码。
  3. 示例脚本如下:

    a.sh

    #!/bin/bash
    test(){ # test method
     if [ $1 == 2 ]; then # the condition for checking
      exit 500 # exit with exit code
     else
      echo $1 # do some business logic here and return the value
     fi
    }
    

    我在检查错误代码时遇到问题。要使用此 test 方法,我有另一个示例脚本。

    b.sh

    #!/bin/bash
    source a.sh
    val=`test $1` # call the test method
    if [ $? == 500 ]; then # check the value
     echo "here is an error" # error occurs
    else
     echo $val # no error, do something with returned value
    fi
    

    以下是输出:

    输入: ./ b.sh 10

    输出 10

    预期输出: 10

    输入: ./ b.sh 2

    输出:

    预期输出:这是一个错误

    我认为 b.sh 存在问题,因为if [ $? == 500 ]; then始终是 false 。有没有办法让这个条件 true 或者什么来获取错误代码?

1 个答案:

答案 0 :(得分:3)

这样做的惯用方法是:

if val=$(test "$1"); then
  echo "$val"
else
  echo "An error occurred."
fi

if语句测试其后面的命令(或管道)的状态,并执行状态指示成功的then分支。您需要显式检查$?的值的唯一情况是实用程序的罕见情况,它返回不同的故障状态值(并记录它们的含义)。

许多人似乎认为[ ... ]和其他此类事情是if命令语法的一部分。他们不是;它们只是名称为标点符号的命令(或内置函数)。你可以使用任何命令,甚至可以连续使用几个命令;在后一种情况下,检查的状态将是最后一个命令的状态。