You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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" >&2
    
    改成:
    echo "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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:33:42