BASH Shell IF ELSE语句的无限循环

3

好的,我知道我之前问过类似的问题,我明白如何创建一个无限循环:

while [ 1 ]
do
    foo
    bar
        then
sleep 10
done

但是如果我想在这个循环中运行一些(相当多的)IF ELSE语句,完成后如何让脚本继续循环,我该怎么做?


你是指如何在while循环内部使用if/else语句吗?我不明白。 - webbi
是的,就是这样,我有一个相当大的脚本,其中有相当多的if else语句。我想做的是循环整个脚本。 - bikerben
@bikerben:好的,只需将您想要的 shell 代码包装在 while/do/done 中即可。如果您打算使用 Ctrl-C(或任何其他终止它的方法)退出它,也许可以看一下 trap 命令。 - Jan Hudec
3个回答

5
while :; do
    if cond1; then
        whatever
    elif cond2; then
        something else
    else
        break
    fi
done
  1. 你可以使用while true或其简写形式:来进行无限循环。而[ 1 ]则过于复杂,不是你想象中的那样([ 0 ]同样为真!)。记住,在ifwhile语句中,条件是任意命令,其退出状态(零=真,非零=假)被用作条件值,[只是特殊的test命令的别名(在大多数shell中内置,但不一定要这样)。
  2. do/done之间允许使用任何shell构造,包括条件语句、更多的循环和case语句。
  3. 使用break来从内部终止最内层的循环(就像大多数其他语言一样)。

我敢打赌他不是在问那个...我不明白他为什么说:“我想做的是循环整个脚本”。 - webbi

0
在Bash中,if语句的格式为:if [ 一些测试 ]; then 某些命令; fi
while [ 1 ]
do
    if [ some test ]
    then
        some command
    else
        other cmd
    fi
sleep 10
done

Bash脚本指南


1
不论是在Shell中还是其他编程语言中,“if”语句的用法都非常简单:if some test; then some command; fi。方括号[是一个用于比较值和检查文件是否存在的命令,但有许多情况下你可能需要使用一些任意的命令(如whichgrep等),或者test命令无法满足需求,这时你可能会转而使用expr命令。 - Jan Hudec

0

修正chown案例,添加了break来结束循环 已修正

while [ 1 ]
do
    if [ some test ]
    then
        some command
    brake
    else
        other cmd
    fi
sleep 10
done

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接