开发BASH应用菜单时遭遇`syntax error near unexpected token 'fi'`错误求助
问题分析与修复
你的错误根源是函数调用语法错误:在if分支里你写的a()和b()是函数定义的语法,而调用函数只需要直接写函数名即可,不需要加括号。
除此之外,还有两个可以优化的点:
[ $input == "1" ]中的==是Bash扩展写法,POSIX标准的test命令用=;如果要保留==,建议改用Bash的扩展测试[[ $input == "1" ]],它更安全(比如变量为空时不会报错)read input加上-r选项,避免输入中的反斜杠被自动转义
修正后的完整代码
chmod u+x main.sh menu() { clear echo 1. Option A echo 2. Option B read -r input if [[ $input == "1" ]]; then a fi if [[ $input == "2" ]]; then b fi } a(){ # 这里写你的代码 echo "执行选项A的逻辑" } b(){ # 这里写你的代码 echo "执行选项B的逻辑" } menu
关键修正点
- 将
a()改为a,b()改为b,这才是正确的函数调用方式 - 用
[[ ... ]]替代[ ... ],提升脚本的健壮性 - 给
read添加-r选项,符合最佳实践
内容的提问来源于stack exchange,提问作者Rat
相关产品推荐
相关产品推荐

