2011-12-23 107 views
0

我不知道为什么会这样,但是我有以下剪断:在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 

发生什么事是最后一个循环永远不会停止在阅读! 只显示 消息 消息 消息 消息

没有人知道如何解决这个问题?

+0

“EXIT”不存在 – 2011-12-23 19:20:16

回答

2

我敢肯定你的意思是exit而不是EXIT。在你的代码中,这是连续打印“信息”的唯一方式。

另一个问题是,你没有检查EOF

0

发生什么是最后一个循环永远不会停止在阅读!

你的第二环期待read获得从控制台输入,但越早重定向标准输入到文件与exec<$filename,不这样做。

而是使用:

while read line 
do 
... 
done < "$filename" 

而且,正如其他人指出你想exit代替EXIT

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 

OR

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