Bash脚本报错syntax error: unexpected end of file,求排查解决
脚本错误分析与修正
你的脚本存在多处Bash语法问题,正是这些问题引发了syntax error: unexpected end of file及其他潜在错误,以下是具体问题和修正方案:
1. 首个if语句语法错误且缺失闭合fi
原代码:
if ( $EXPR == "EXIT" ) then exit 0
Bash中if的正确语法为if [ 条件 ]; then或if [[ 条件 ]]; then,且每个if必须用fi闭合。此处不仅语法错误,还未添加闭合fi,直接导致脚本无法正常结束。
修正为:
if [[ "$EXPR" == "EXIT" ]]; then exit 0 fi
2. 环境变量赋值错误
原代码:
$IFS=' '
变量赋值时无需加$,修正为:
IFS=' '
3. 变量赋值存在多余空格
Bash中变量赋值不能有空格,原代码:
result = 0
修正为:
result=0
后续所有result = ...的写法都要去掉空格。
4. 条件判断的语法规范问题
[/]与内部表达式之间必须留空格,比如[$arr[1] == '+']要改为[ "${arr[1]}" == '+' ]- 数组元素引用必须写成
${arr[1]},而非$arr[1] - 在
[ ]中逻辑与需用-a,若想用&&,建议改用[[ ]](更灵活的扩展条件判断语法)
原条件判断代码:
if [ $arr[1] != '+' && $arr[1] != '-' && $arr[1] != '*' && $arr[1] != '/' ]
修正为:
if [[ "${arr[1]}" != '+' && "${arr[1]}" != '-' && "${arr[1]}" != '*' && "${arr[1]}" != '/' ]]
5. 算术运算的正确写法
Bash中直接写result= $arr[0] + $arr[2]无法完成计算,必须用$((...))包裹算术表达式,例如加法:
result=$(( ${arr[0]} + ${arr[2]} ))
减法、乘法、除法均需遵循此规则。
6. 除数为0的判断逻辑缺失终止步骤
原代码中判断除数为0后仅打印错误,但仍会执行除法运算,引发额外错误,需添加终止逻辑:
if [[ "${arr[2]}" == '0' ]]; then echo "MATH ERROR" exit 1 fi
修正后的完整脚本
#!/bin/bash echo "Enter the input in the form of 'number' 'operation' 'number' " read EXPR if [[ "$EXPR" == "EXIT" ]]; then exit 0 fi IFS=' ' read -ra arr <<< "$EXPR" result=0 if [[ "${arr[1]}" != '+' && "${arr[1]}" != '-' && "${arr[1]}" != '*' && "${arr[1]}" != '/' ]]; then echo "syntax error" exit 1 fi if [[ "${arr[1]}" == '+' ]]; then result=$(( ${arr[0]} + ${arr[2]} )) fi if [[ "${arr[1]}" == '-' ]]; then result=$(( ${arr[0]} - ${arr[2]} )) fi if [[ "${arr[1]}" == '*' ]]; then result=$(( ${arr[0]} * ${arr[2]} )) fi if [[ "${arr[1]}" == '/' ]]; then if [[ "${arr[2]}" == '0' ]]; then echo "MATH ERROR" exit 1 fi result=$(( ${arr[0]} / ${arr[2]} )) fi echo "$result"
内容的提问来源于stack exchange,提问作者Tuấn Nguyễn Anh
相关产品推荐
相关产品推荐

