我有一个示例shell方法:
示例脚本如下:
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 或者什么来获取错误代码?
答案 0 :(得分:3)
这样做的惯用方法是:
if val=$(test "$1"); then
echo "$val"
else
echo "An error occurred."
fi
if
语句测试其后面的命令(或管道)的状态,并执行状态指示成功的then
分支。您需要显式检查$?
的值的唯一情况是实用程序的罕见情况,它返回不同的故障状态值(并记录它们的含义)。
许多人似乎认为[ ... ]
和其他此类事情是if
命令语法的一部分。他们不是;它们只是名称为标点符号的命令(或内置函数)。你可以使用任何命令,甚至可以连续使用几个命令;在后一种情况下,检查的状态将是最后一个命令的状态。