我正在使用简单的 nginx 配置检查来测试 bash 脚本错误代码:
验证者
#!/bin/bash
# Error codes
ERROR_INVALID_NGINX_CONFIG=2
function validate() {
if [ $1 -eq 0 ]; then
echo OK
else
echo Invalid config
exit $2
fi
}
sudo nginx -t
validate $? $ERROR_INVALID_NGINX_CONFIG
然后我让调用者脚本调用该脚本来检查是否有错误:
呼叫者
#!/bin/bash
./verifier
if [ $? -eq 0 ]; then
echo ok!
else
echo Error code: $?
fi
然后,当我执行./caller
并且出现 nginx 配置错误时,它总是打印错误代码 1 而不是 2:
nginx: configuration file /etc/nginx/nginx.conf test failed
Invalid config
Error code: 1
我肯定遗漏了一些简单的东西,有人能看到吗?
答案1
$?
始终是最后一个命令的退出代码。在您的示例中,这可能是签入if
。
您需要将变量设置为退出代码并使用该变量:
#!/bin/bash
./verifier
RESULT=$?
if [ $RESULT -eq 0 ]; then
echo ok!
else
echo Error code: $RESULT
fi