在shell脚本空读取
问题描述:
我不知道为什么会这样,但是我有以下剪断:在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
发生什么事是最后一个循环永远不会停止在阅读! 只显示 消息 消息 消息 消息
没有人知道如何解决这个问题?
答
我敢肯定你的意思是exit
而不是EXIT
。在你的代码中,这是连续打印“信息”的唯一方式。
另一个问题是,你没有检查EOF
。
答
发生什么是最后一个循环永远不会停止在阅读!
你的第二环期待read
获得从控制台输入,但越早重定向标准输入到文件与exec<$filename
,不这样做。
而是使用:
while read line
do
...
done < "$filename"
而且,正如其他人指出你想exit
代替EXIT
答
潜在的问题在片段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
“EXIT”不存在 – 2011-12-23 19:20:16