运行Shell脚本时遭遇fi意外错误,请求协助排查
Shell脚本「fi意外错误」排查与解决
错误原因
- 第一个
if语句语法不完整:Shell中if的标准语法要求if [ 条件 ]; then的结构,你的代码里第一个if仅写了if [ -s data_stnd_viol_addr.log ];,没有紧跟then,导致Shell无法正确解析后续嵌套的if结构,最终出现fi不匹配的语法错误。 - 潜在风险:变量引用未加双引号(如
${update_instance}),当变量为空或包含空格时会触发语法问题;==并非POSIX标准Shell的合法比较运算符,部分环境下可能报错。
解决方法
修正后的完整脚本代码:
if [ -s data_stnd_viol_addr.log ]; then if [ "${update_instance}" = "BPROD" ]; then echo | mailx -s "***** Data Standard Violation - Address *****" -S"from=banner" -a"data_stnd_viol_addr.log" "${BPROD_LIST}" elif [ "${update_instance}" = "B8QA" ]; then echo | mailx -s "***** Data Standard Violation - Address ***** QA" -S"from=banner" -a"data_stnd_viol_addr.log" "${QADIST_LIST}" else echo | mailx -s "***** Data Standard Violation - Address ***** DEV" -S"from=banner" -a"data_stnd_viol_addr.log" "${QADIST_LIST}" fi fi
关键修正点
- 给第一个
if语句补上then,符合Shellif的语法规范; - 所有变量引用添加双引号,避免空值或含空格的变量引发语法错误;
- 将
==替换为POSIX标准的=,确保脚本在各类Shell环境下兼容; - 移除了语句末尾不必要的分号,简化代码结构。
内容的提问来源于stack exchange,提问作者Naveed
相关产品推荐
相关产品推荐

