Loops ksh,在达到循环最大值时执行操作
我希望编写一个小型KornShell脚本,执行5个测试(在每个测试之前等待一段时间),然后,如果所有测试都失败,执行一个操作 我在考虑做一些类似的事情:Loops ksh,在达到循环最大值时执行操作,loops,ksh,Loops,Ksh,我希望编写一个小型KornShell脚本,执行5个测试(在每个测试之前等待一段时间),然后,如果所有测试都失败,执行一个操作 我在考虑做一些类似的事情: for i in {1..5} do "doMyTest" #it fills a variables "status" (but can unfortunately fails) if [ "$status" ]; then #if status is filled then
for i in {1..5}
do
"doMyTest" #it fills a variables "status" (but can unfortunately fails)
if [ "$status" ]; then #if status is filled then we can leave the loop
break
fi
sleep 3 #else wait some time before doing another try
done
if [ -z "$status" ]; then
exit 1
fi
... then the rest of my program
你知道我怎样才能做得更好吗?
听起来有点多余
非常感谢。您只想在所有测试都失败时看到失败? 当一个测试成功时可以跳过其他测试时,可以使用
test1 || sleep 3 && \
test2 || sleep 3 && \
test3 || sleep 3 && \
test4 || sleep 3 && \
test5 || exit 1
当所有5次迭代都完成后,它是否会自动离开循环(而不点击
中断
逻辑)?否则,您需要用示例输出解释您的问题。可能有两个示例显示正在使用的中断
,然后是另一个未使用中断
的示例。祝你好运。可能“doMyTest”并不总是有效,并且没有填充变量状态。我想做5次,如果它第一次通过实例工作(状态为filled),那么它将完成中断并离开。下一个if将不会被填充,退出1将不会被调用,我的程序将继续。但是,如果值$status由于“doMyTest”失败而未填充,我想在离开之前尝试5次(不使用中断),然后它将进入下面的if,并应用退出1。它回答了你的问题吗?我可能遗漏了一些语法错误,但是你的代码对你的问题来说似乎是合理的。你有什么证据表明它没有按要求工作?您是否知道并使用shell的调试/跟踪功能以及set-vx
?这将显示执行前的每个“语句”(在本例中,是while
循环的整个主体),然后显示实际执行的内容(使用前导的+
字符)。通过这种方式,您可以查看变量名,然后使用+
行,您可以查看哪些值被变量替换。你应该能够用这个解决你的问题。祝你好运尽量不要在不同的SE站点上发布相同的问题。同样的问题也出现在电视上