Bash脚本if判断及elif语法错误排查与解决求助
嘿,这个语法错误其实是shell脚本里很常见的格式问题,我帮你拆解一下问题出在哪,以及怎么修复:
问题根源
shell对if/elif/while这类控制语句的格式有严格要求:条件表达式和后面的then/do之间必须用分号;或者换行来分隔。你写的代码里把它们连在了一起,shell没法正确解析,所以抛出了语法错误。另外如果用双括号[[ ]]的话,括号和表达式之间还得留空格(错误提示里的[[$# -gt 31]]就犯了这个错)。
修正后的脚本片段
if [ $# -eq 0 ]; then # help information echo "" usage2 exit 0 elif [ $# -gt 31 ]; then errMsg "--- TOO MANY ARGUMENTS WERE PROVIDED ---" else while [ $# -gt 0 ]; do # get parameter values case "$1" in -h|-help) # help information echo "" usage2 exit 0 ;; # 别忘了补上case的闭合标记esac和循环的done哦 esac shift # 处理完一个参数后要shift,否则while会无限循环 done fi
额外优化建议
如果你想让脚本更健壮,可以用双括号[[ ]]替代单括号[ ]——它支持更灵活的表达式,而且不需要像单括号那样给变量加引号(当然加了也没问题)。改成这样:
if [[ $# -eq 0 ]]; then # ... 内容不变 elif [[ $# -gt 31 ]]; then # ... 内容不变 while [[ $# -gt 0 ]]; do # ... 内容不变
内容的提问来源于stack exchange,提问作者Youssri Abo Elseod
相关产品推荐
相关产品推荐

