直到循环没有按预期工作
Until Loop not working as expected
我目前正在学习 Linux 作为家庭作业,我们必须创建一些基本的 shell 脚本。没有什么特别复杂的,但是这个让我头疼。这是我的代码:
until [ "$toPrint" == 'fin' ]
do
echo "Enter file name to print out :" ; read toPrint
sh ./afficher.sh "$toPrint"
done
基本上,我有另一个名为 afficher.sh 的脚本(我是法国人,所以不介意使用的是法语),它读取作为参数获取的任何文件名。然而,在我键入 "fin" 的那一刻,一切都应该停止,除了它仍然尝试打印名为 "fin" 的文件。我在 Internet 上阅读了一些关于 until 循环的内容,一旦它变为 True,它就应该停止,但我不是这样...
您在循环顶部检查条件,但在循环中间输入值。读取值后做的下一件事总是将它传递给 afficher.sh
,然后一旦完成,您检查它的值以查看是否应该停止。如果您不想 运行 afficher.sh
fin
值,您需要确保您的控制流允许您在调用 afficher.sh
之前进行比较.
就个人而言,我会这样实现——使用 while
循环,而不是 until
循环,并分别明确地检查退出条件:
while true; do
echo "Enter file name to print out :" ; read toPrint
[ "$toPrint" = fin ] && break
sh ./afficher.sh "$toPrint"
done
如果你真的想使用循环的条件,你可以这样做:
while echo "Enter file name to print out :";
read toPrint &&
[ "$toPrint" != fin ]; do
sh ./afficher.sh "$toPrint"
done
...但就我个人而言,出于审美原因,我不太喜欢这个。
我目前正在学习 Linux 作为家庭作业,我们必须创建一些基本的 shell 脚本。没有什么特别复杂的,但是这个让我头疼。这是我的代码:
until [ "$toPrint" == 'fin' ]
do
echo "Enter file name to print out :" ; read toPrint
sh ./afficher.sh "$toPrint"
done
基本上,我有另一个名为 afficher.sh 的脚本(我是法国人,所以不介意使用的是法语),它读取作为参数获取的任何文件名。然而,在我键入 "fin" 的那一刻,一切都应该停止,除了它仍然尝试打印名为 "fin" 的文件。我在 Internet 上阅读了一些关于 until 循环的内容,一旦它变为 True,它就应该停止,但我不是这样...
您在循环顶部检查条件,但在循环中间输入值。读取值后做的下一件事总是将它传递给 afficher.sh
,然后一旦完成,您检查它的值以查看是否应该停止。如果您不想 运行 afficher.sh
fin
值,您需要确保您的控制流允许您在调用 afficher.sh
之前进行比较.
就个人而言,我会这样实现——使用 while
循环,而不是 until
循环,并分别明确地检查退出条件:
while true; do
echo "Enter file name to print out :" ; read toPrint
[ "$toPrint" = fin ] && break
sh ./afficher.sh "$toPrint"
done
如果你真的想使用循环的条件,你可以这样做:
while echo "Enter file name to print out :";
read toPrint &&
[ "$toPrint" != fin ]; do
sh ./afficher.sh "$toPrint"
done
...但就我个人而言,出于审美原因,我不太喜欢这个。