而bash中的循环是循环知道循环中每条指令的退出代码吗?

时间:2015-09-09 18:38:03

标签: bash

我试图找出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它将退出?

2 个答案:

答案 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