Unix shell脚本运行出现Unexpected end of file错误如何解决?
报错根因定位
你遇到的Unexpected end of file错误核心原因是 until循环没有配套的闭合标识符done,你只检查了if语句的fi匹配,遗漏了循环结构的闭合要求:until搭配do开启循环体,必须在整个循环逻辑结束后加done收尾,你的脚本在esac之后就结束了,缺少对应的done。
其他需修正的语法问题
除了循环缺done外,脚本还存在多处语法错误会导致后续运行异常:
read用法错误:接收用户输入时变量名不需要加$符号,$仅用于变量取值场景。比如read "$mOption"要改为read mOption,所有read $变量名的写法都要去掉$- if判断语法错误:
- 方括号和内部内容必须用空格分隔,
["$ATTACH"要改为[ "$ATTACH",末尾"y"]要改为"y" ] - 多条件匹配的逻辑或写法错误,原写法
"$ATTACH" = "Y"|"y"完全不成立,正确写法为[ "$ATTACH" = "Y" ] || [ "$ATTACH" = "y" ]
- 方括号和内部内容必须用空格分隔,
- 变量赋值不允许有空格:
userIn = q要改为userIn=q,等号左右不能有空格 - 转义字符写反:
echo -e "/n"里的换行符是\n不是/n - 变量对应错误:你读取用户选项用的是
read mOption,但case判断的却是"$answer",两个变量完全不匹配,逻辑完全走不通,要统一为同一个变量 - 功能匹配错误:E选项描述是「当前登录用户」,但你调用了
pwd(显示当前工作目录),要显示登录用户应该改为whoami - 退出逻辑不匹配:你菜单里的退出选项是Q,但
case里只有j|J分支处理退出逻辑,q|Q没有匹配分支,要把退出逻辑挪到q|Q分支下
内容的提问来源于stack exchange,提问作者Johnny Rinaldo
相关产品推荐
相关产品推荐

