Shell脚本语法错误求助:意外出现"(",期望"fi"
解决Shell脚本中的Syntax error: "(" unexpected问题
你遇到的这个错误不是嵌套if-else语句导致的,而是脚本里的两个语法/环境问题引发的,咱们一步步拆解修复:
1. 数组定义的语法错误
报错指向的第22行其实只是个提示,真正的问题在它下面的数组定义行:
options=("HTTP" "LDAP" "FTP";)
这里末尾多了个多余的分号;,Shell会把这个分号当成语法的一部分,从而误解数组的定义格式,直接触发Syntax error: "(" unexpected的错误。
修复方法:去掉数组末尾的分号,正确的写法是:
options=("HTTP" "LDAP" "FTP")
2. Shell解释器的兼容性问题
如果你的脚本最顶部没有指定正确的shebang行,系统会默认用sh来执行它(很多Linux系统里sh是dash的软链接)。而dash不支持select语句和数组这类Bash特有的语法,这也会导致类似的语法错误。
修复方法:在脚本的第一行加上Bash的shebang声明:
#!/bin/bash
额外的小问题修复
还有两个细节可以优化:
- 帮助文本里的LDAP行漏了闭合括号:
原代码:
改成:echo "LDAP - query the certificate from an AD (port 636" >&2echo "LDAP - query the certificate from an AD (port 636)" >&2 - 你的
select循环没有退出逻辑,用户选完选项后会一直停在循环里,需要在每个case分支里加上break来退出循环,同时给QUERY变量赋值:select opt in "${options[@]}" do case $opt in "HTTP") QUERY="foo" break ;; "LDAP") QUERY="bar" break ;; "FTP") QUERY="baz" break ;; *) echo "Invalid option, please choose again" ;; esac done
内容的提问来源于stack exchange,提问作者user1192748
相关产品推荐
相关产品推荐

