我不知道为什么会发生这种情况,但我有以下内容:
exec<$filename
while read line
do
...
done
为了逐行读取文件
之后我有
while true
do
echo "message"
read WISH2
case $WISH2 in
y|Y|yes|Yes) dosomething; break ;;
n|N|no|No) EXIT ;;
*) echo "Not valid option";
esac
done
最后一个循环在读取时永远不会停止! 只是显示 信息 信息 信息 消息
有谁知道如何解决这个问题?!
答案 0 :(得分:2)
我很确定你的意思是exit
而不是EXIT
。在你的代码中,它是唯一可以连续打印“消息”的方式。
另一个问题是您没有检查EOF
。
答案 1 :(得分:0)
会发生什么事情,最后一个循环永远不会停止在读取!
您的第二个循环期望read
从控制台获取输入,但是之前您使用exec<$filename
将STDIN重定向到您的文件,请不要这样做。
改为使用:
while read line
do
...
done < "$filename"
此外,正如其他人所说,您需要exit
而不是EXIT
答案 2 :(得分:0)
代码段1中的潜在问题:
exec<$filename # This is redirecting to STDIN. Quotes missing.
while read line
do
…
done
潜在解决方案:
exec 4<"$filename" # Redirected to 4 {1-3 and 9+ are used by Shell}
while read line
do
…
done <&4
或强>
while read line
do
…
done < "$filename"
代码段2的潜在问题:
while true
do
echo "message"
read WISH2
case $WISH2 in # missing quotes
y|Y|yes|Yes) dosomething; break ;; #Space between do
n|N|no|No) EXIT ;; # exit should be in lower case
*) echo "Not valid option"; # missing a semi-colon
esac
done
代码段2的潜在解决方案:
while :
do
echo "message"
read WISH2
case "$WISH2" in
y|Y|yes|Yes) do something; break ;;
n|N|no|No) exit ;;
*) echo "Not valid option";;
esac
done