尝试在 bash 脚本中实现自语法检查,test.sh
以便在执行脚本之前运行语法检查。
error_exit()
{
echo -e "$1" 1>&2
exit 1
}
bash -n "$(basename $BASH_SOURCE)"
RESULT=$?
if [ $RESULT == 0 ]; then
echo "[OK] Test pass"
else
error_exit "Something is not right :( \n check the sytntax"
fi
starting-script
Run Code Online (Sandbox Code Playgroud)
bash -n
,bash -x
如果有一些严重的语法错误但小错误如:
echo "somthing" && sleep5&&
./test.sh: line 14: sleep5: command not found
Run Code Online (Sandbox Code Playgroud)
被忽略...
有什么方法可以处理完整的语法检查,并且可以在某种“沙箱模式”/“模拟模式”下运行脚本以捕获所有可能的错误,并返回错误(如果有)?
编辑 在脚本必须将脚本的某些部分复制到远程服务器的情况下,例如在数百个从属(受监控服务器)上安装 nagios 的脚本等。不幸的是,文本复制并不总是顺利进行,错误可能是由自动将脚本复制为文本时发生错误,如果检测到任何错误,请务必检查并结束脚本。
您可能会查看ShellCheck项目,该项目对 shell 脚本语法进行了更彻底的验证;包括最佳实践和潜在的陷阱。
但是,即使 ShellCheck 也不会将您问题中的示例报告为不正确,因为没有语法错误。
您正在调用一个外部命令sleep5
,这是一个语法上有效的操作。
在调用之前使用变量并检查命令是否存在,如果不存在则正常失败。