因此,我正在尝试编写一个脚本,该脚本根据最后一个退出代码的含义给出不同的响应/回显提示。这个imo应该可以正常工作,因为此脚本会在每分钟使用crontab运行时运行,因此不会影响最后一个退出代码。但是,无论退出值是多少,我都不会收到提示。
我尝试使用echo来简单地显示RESULT(exit-code)的值,该值曾经起作用,但现在似乎在使用crontab时不显示。我确保脚本使用'else'语句和'logger -s'运行,但是该脚本会发送一条日志,说明实际退出代码是否等于0,并且仅在值是0时才发送该日志。实际上等于0。我尝试了不同的运算符,等等。但是似乎无法实际发送“ echo”提示。
#!/bin/bash
RESULT=$(echo "$?")
if [ $RESULT -gt 0 ]
then
echo "Value is greater than 0"
else [ $RESULT -eq 0 ]
echo "Value is equal to 0"
fi
这让我发疯,因为我觉得这不应该那么困难,但显然是哈哈。预期的结果是,当最后输入的命令的退出代码为“ 0”时,它应该给出一个回显promt,而当退出代码大于“ 0”时(该命令失败),它应该给出一个不同的值,但是相反,除非我将其发送到日志,否则什么也不会发生,在这种情况下,它几乎总是在那里结束。
答案 0 :(得分:1)
问题是$(... )
是一个子外壳。 echo
之前没有以前的状态。
所以只需使用
RESULT=$?
...
答案 1 :(得分:1)
这里至少存在三个问题:
$?
获取由该特定shell 运行的最后一条命令的退出状态;由于这是脚本的开头,因此没有最后一个命令,因此默认为“ 0”。
cron作业的输出不会发送到终端,基本上会被忽略。
else [ $RESULT -eq 0 ]
没有任何用处,因为else
关键字没有条件。 (从技术上讲,它确实作为常规命令执行测试,但结果被忽略。)
还有一些奖励建议:
请勿使用$(echo ...)
或echo $(...)
,而$( )
和echo
大多会互相抵消。
使用小写或混合大小写的变量名(例如,result
而不是RESULT
)。一堆具有特殊含义的全大写字母名称,如果您不小心将其中一个大写字母用于其他用途,可能会引起问题。小写和大小写混合的名称避免了这种风险。
答案 2 :(得分:0)
您正在尝试使用RESULT
将命令的最后状态分配给$?
,该状态将返回1或0。但是在分配之前甚至设置{{ 1}},因此您的if语句将永远无法达到预期的结果。