我注意到一些奇怪的东西(至少对我来说这很奇怪)。我正在写一个脚本,我需要0或1作为退出代码。到现在为止还挺好。我有一个简单的if-else与echo $?在每个条件之上,但当我做回声$?作为一个变量来调用它总是显示0作为退出代码。
#!/bin/bash
exit=`echo $?`
DIRECTORY="/some/dir"
if [[ $(stat -c "%a" "$DIRECTORY") == "777" ]]
then
echo $?
#echo "The exit code is: $exit"
else
echo $?
#echo "The exit code is: $exit"
fi
#EOF
如果只使用" echo $?"一切都很好。我收到0或1.但在评论部分我总是收到0。
答案 0 :(得分:4)
$?
构造包含最后一个命令的状态代码 - 完全最后一个命令。
[[
是一个命令(bash测试)。因此,您正在测试测试结果。
要修复它,请先保存结果。例如:
result=$(stat -c "%a" "$DIRECTORY")
status=$?
... do stuff with status and result
答案 1 :(得分:3)
您可以在代码顶部设置exit
的值。整个脚本中保持不变。这就是为什么你总是得到相同的价值。
相反:
#!/bin/bash
dir='/some/dir'
if [[ "$(stat -c "%a" "$dir")" == "777" ]]; then
status=0
printf 'Permissions are 777 (status=%d)\n' "$status"
else
status=1
printf 'Permissions are not 777 (status=%d)\n' "$status"
fi
或
#!/bin/sh
dir='/some/dir'
case "$(stat -c "%a" "$dir")" in
777) echo 'Permissions are 777'; status=0 ;;
*) echo 'Permissions are not 777'; status=1 ;;
esac
请注意,此处无需调查$?
。如果测试成功,您知道它将为0,否则为非零。