空读取shell脚本

时间:2011-12-23 19:13:48

标签: shell

我不知道为什么会发生这种情况,但我有以下内容:

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

最后一个循环在读取时永远不会停止! 只是显示 信息 信息 信息 消息

有谁知道如何解决这个问题?!

3 个答案:

答案 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