下面我有一个我编写的 shell 脚本,当我尝试执行它时,我的终端出现错误,描述了“expecting fi”关键字。我已经在 done 关键字之前写下了它,但仍然没有设法克服错误。谁能告诉我如何解决这个错误以及我在哪里犯了错误?
VAL1=0
VAL2=0
while [ "$VAL1" -eq 0 ] && [ "$VAL2" -eq 0 ]
do read -p "Enter values for both numbers" VAL1 VAL2
if [ "$VAL1" -eq 99 ] || [ "$VAL1" -eq 99 ]
then break
else read -p "Enter value number two" VAL2
if [ "$VAL2" -eq 0 ]
then echo "Cannot divide by zero"
else echo $(( VAL1 / VAL2 ))
fi
done
“期待
fi
”意味着您的脚本缺少此关键字。在您的情况下,您有两个if
s,但只有一个fi
,而第一个未关闭。更正为:为了调试 shell 脚本,最好在线或通过命令( ) 使用shellcheck:
shellcheck
sudo apt install shellcheck
正如甜点已经指出的那样,有两个
if
s 但只有一个fi
会立即告诉您条件语句中的某处不匹配。我建议的一件事是,在编码时,使用缩进来帮助确定是否缺少任何结构会有所帮助。将您的内容保持
if-then-else-fi
在同一列中是一种可用于跟踪这些事情的技巧。相同的case-esac
或do-done
关于那件事。使用您的示例代码,如果我们以这种方式缩进,则很明显缺少某些内容: