Shell 进程返回状态测试在ubuntu上返回意外结果

Shell 进程返回状态测试在ubuntu上返回意外结果,shell,ubuntu,return,Shell,Ubuntu,Return,下面是我在ubuntu机器上执行的一段shell脚本代码: myProcess ret="$?" if [ "${ret}" == "0" ] then echo good else echo bad "${ret}" fi 因此,逻辑非常简单:如果myProcess返回非零退出状态,则为坏,否则为好。我通过将这段代码隔离到单独的脚本中并从命令行运行来测试它。当myProcess返回0时,我得到了预期的good 但是,当我在生产环境中运行它时,会得到错误的0。因此,即使返回代码似

下面是我在ubuntu机器上执行的一段shell脚本代码:

myProcess
ret="$?"
if [  "${ret}" == "0" ]
then
   echo good
else
   echo bad "${ret}"
fi
因此,逻辑非常简单:如果
myProcess
返回非零退出状态,则为坏,否则为好。我通过将这段代码隔离到单独的脚本中并从命令行运行来测试它。当
myProcess
返回0时,我得到了预期的
good


但是,当我在生产环境中运行它时,会得到
错误的0
。因此,即使返回代码似乎为0,但
if
测试似乎返回
false
。这里发生了什么?

有一种更简单的方法(无需处理
$?
并创建变量的副本):

如果
myProcess
编码正确,应该可以正常工作。如果没有,请将准确的输出/错误粘贴到原始帖子中


这种简短的方式被称为布尔逻辑。问题似乎在于使用了太多的引号,可能与
=
结合使用。以下修改后的代码似乎工作正常:

myProcess
ret=$?
if [  ${ret} -eq 0 ]
then
    echo good
else
    echo bad "${ret}"
fi

但是我上面的代码有什么问题?我需要捕获返回代码,因为在“坏”的情况下,我需要将其作为参数之一传递给一个进程,该进程会为这种情况生成一个特殊警报。您的“shebang”行是什么<代码>#/bin/bash或#/bin/sh`?(现在看不出这有什么关系,但由于您没有显示整个脚本,使用bash执行与原始Bourne Shell之间可能存在不兼容。)祝您好运。@Shelleter:这是
#/bin/sh
。另外,如果有必要,在生产环境中,这个脚本将作为cron作业执行。我认为BourneShell不支持
==
。。根据您的操作系统,是您的
#/bin/sh
真的是Bash或Bourne。首先尝试一下
=
,如果这不能解决问题,那么就用
“X${ret}X”=X0X“
echo bad X${ret}X
调试
ret
的实际值。祝你好运。
myProcess
ret=$?
if [  ${ret} -eq 0 ]
then
    echo good
else
    echo bad "${ret}"
fi