2011-12-23 157 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