我试图找出while循环逻辑如何在bash中工作。
如果我有4条指示;在循环中,它们将按照循环中设置的条件执行n次。
虽然;是否知道每个命令的返回码的循环?
理想情况下,您可以编写带有while循环的shell脚本,在其中检查每个命令的退出代码,如果任何命令返回错误,则再次执行此操作。 这个逻辑是否可以在bash或循环中不知道每个命令的返回代码,并看到do-done之间的块,作为一个?
编辑:
示例:
a=2
b="test"
while [ "$?" != 0 ]
do
ls $b
cd $b
grep "2.txt" | mv 2.txt $a.txt
ls $b
done
这个简化的例子基本上是检查一个目录,cd进入它,找到一个具有特定名称的文件并重命名。
当我运行此循环时,如果这些命令中的任何一个返回代码不为0,则循环应该从头开始,直到所有命令返回0然后循环退出。
这实际上是真的还是整个命令块都作为单个实体处理,所以如果最后一个命令返回0它将退出?
答案 0 :(得分:1)
while
命令仅检查紧随其后的条件语句的退出状态。它不会检查循环内语句的状态。
你可以在循环中使用if
语句来摆脱循环。
while something
do
command1
if ! command2
then break
fi
command3
done
只要something
成功,这将循环,但如果command2
失败则停止。
答案 1 :(得分:1)
也许:使用无限循环,并在最后加入&&
与break
的所有命令
while true
do
ls $b &&
cd $b &&
grep "2.txt" | mv 2.txt $a.txt &&
ls $b &&
break
done
注意while ...; do ...; done
而不是while ...; do ...; loop