问题在于,如果条件不为真,它应该“停止”for循环,或者除非满足该值,否则不应该继续。
假设在for循环中有一个输入语句true/false或一个布尔语句,输出为1到10。
如果条件在第5次迭代中为假,则应停留在第5次迭代中,直到布尔值返回真。
for i in {1..10}
do
read jobstatus
# echo $i
if [ "$jobstatus" = true ] ; then
echo 'Okay lets progress'
else
echo 'Nop, cant progress'
((i--))
# continue
#print $i
fi
echo $i
done
我试过编写这样的代码,也通过编写充当“标志”的文件来检查它,但我似乎不能“停止”进程。我不想打破循环,我只想让它停留在特定的迭代中,直到状态发生变化。就像如果作业状态在i=5时出错,除非jobstatus变为true,否则我应该保持5。(我打算在每次输入时检查jobstatus)
6条答案
按热度按时间nzk0hqpo1#
您可以将循环结构如下:
vhipe2zx2#
使用C风格的for循环:
xyhw6mcr3#
if
测试应该是某种循环。例如:如果你想重复其他的
for
命令(例如这里的echo $i
语句)直到测试成功,它们也应该进入循环。emeijp434#
这可能是你正在寻找的:
不需要递减
i
,这也避免了过于频繁地检查jobstatus
的状态,从而潜在地消耗不必要的资源量。mlmc2os55#
通过交互式用户输入,可能是这样的:
使用文本文件作为输入,来测试脚本。
file.txt
脚本:
输出:
zazmityj6#
请尝试以下Shellcheck-clean Bash代码:
truecount
替换了无意义的i
。printf
而不是echo
来打印计数值(echo "$truecount"
在这个特定的情况下可能是可以的,但是echo "$var"
通常不起作用,所以我从不使用它。echo $var
是坏的。请参阅Bash陷阱#14(echo $foo))。