首页 > 编程笔记 > Linux笔记 阅读:158

Shell while循环用法详解(附带实例)

while 循环和 until 循环都是不定循环,也称作条件循环,主要是指循环可以一直进行,直到用户设定的条件达成为止,语法如下:
while [ 条件判断式 ]
    do
        程序
    done
对 while 循环来说,只要条件判断式成立,循环就会一直进行,直到条件判断式不成立,循环才会停止,如下图所示:


图 1 while循环

我们再写一个从 1 加到 100 的例子,这种例子虽然对系统管理帮助不大,但是对理解循环非常有帮助。

例如,使用 while 循环从 1 加到 100:
#!/bin/bash
i=1
s=0
# 给变量i和变量s赋值
while [ $i -le 100 ]
# 如果变量i的值小于等于100,就执行循环
    do
        s=$(( $s+$i ))
        i=$(( $i+1 ))
    done
echo "The sum is: $s"
解释一下脚本思路:对于 while 循环来讲,只要条件判断式成立,循环就会执行。因此,只要变量 i 的值小于等于 100,循环就会继续。每次循环给变量 s 加入变量 i 的值,再给变量 i 加 1,直到变量 i 的值大于 100,循环才会停止。然后输出变量 s 的值,也就是从 1 加到 100 的总和。

在 while 循环中,可以使用 true 代替条件判断式,true 表示判断为真,这样 while 就可以无限循环下去了。但即便无限循环执行的只是一条简单的 echo 命令,也会因为持续不断地执行 echo 最终占用过多的系统资源。因此,在执行 while 无限循环期间,我们需要通过某些方式让循环停下来。

例如,read 语句就能够让无限循环暂停来等待键盘输入,避免占用过多的系统资源。接下来举例说明:
[root@localhost ~]# cat /root/while.sh
#!/bin/bash
while true
do
cat << EOF
1. SELinux ON
2. SELinux OFF
3. IP DHCP
4. IP Static
EOF
    read -p "请输入您的选择(1-4):" slct
    case "$slct" in
        1)
            echo "SELinux ON..."
        2)
            echo "SELinux OFF.."
        3)
            echo "DHCP IP.."
        4)
            echo "Static IP..."
            ;;
        *)
            echo "Error, Please input 1|2|3|4"
    esac
done
在 while.sh 脚本执行后,就会进入无限循环,在执行脚本期间,我们可以反复多次修改 SELinux 状态或修改 IP 地址的获取方式,如果想要退出脚本,那么可以使用 Ctrl+C 快捷键实现。在 case 语句中,在修改每个配置文件的修改时,均可将其替换为此前学过的 sed 等命令。

相关文章