欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SHELL中的while循环

程序员文章站 2024-03-23 21:48:22
...

流控制:while循环

在编程语言中,循环非常常见。在bash中,bash也有类似的关键字,构建这样的循环:

#!/bin/bash

# 显示一系列数字

count=1

while [ $count -le 6 ]; do
    echo $count
    count=$((count + 1))
done
echo "finished"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

执行脚本:./while-count.sh,结果如下:

[fbap:/home/fbap/usertmp]>./while-count.sh
1
2
3
4
5
6
finished
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

就如同if指令一样,while会判断一系列指令的退出状态。只要退出状态为0,它就执行循环体内的命令。在上述循环中,我们创建了count变量并进行了初始化,while命令会判断test命令的退出状态,只要为0,那门循环体内的指令就会执行(打印count变量,并且count加1)。

下面有一个使用while循环更加高级的一个例子:

#!/bin/bash

#
# 一个菜单驱动的展示系统信息的脚本
#

# 展示结果的延迟时间(单位/秒)
DELAY=3

while [[ "$REPLY" != "0" ]]; do
    clear
    cat <<EOF
----------------------------
请选择:
    1.显示系统信息
    2.显示磁盘使用情况
    3.显示用户空间使用情况
    0.退出
----------------------------
EOF
    read -p "请输入你的选择[0-3]:"
    if [[ $REPLY =~ ^[0-3]$ ]];then

        # 显示系统使用情况
        if [[ "$REPLY" = "1" ]];then
            echo
            echo "主机名:${HOSTNAME}"
            uptime
            sleep $DELAY
        fi

        # 显示磁盘使用情况
        if [[ "$REPLY" = "2" ]];then
            df -h
            sleep $DELAY
        fi

        # 显示用户空间使用情况
        if [[ "$REPLY" = "3" ]];then
            # 判定有效用户是否为root
            if [[ $(id -u) -eq 0 ]];then
                echo
                echo "(所有用户)用户空间使用情况:"
                du -sh /home/*
            else
                echo
                echo "(${USER})用户空间使用情况:"
                du -sh $HOME
            fi
            sleep $DELAY
        fi
    else
        echo "非法输入"
        sleep $DELAY
    fi
done
echo "脚本退出"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57

执行脚本:./read-menu.sh,输出:

----------------------------
请选择:
    1.显示系统信息
    2.显示磁盘使用情况
    3.显示用户空间使用情况
    0.退出
----------------------------
请输入你的选择[0-3]:1

主机名:localhost.localdomain
 17:28:28 up 333 days, 44 min, 10 users,  load average: 1.04, 1.06, 1.17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在上面的例子中,将菜单封装在while循环内,程序就可以在用户每次选择后重复展示菜单项。只要REPLY值不为0,重复循环,展示菜单项,给用户又一次的选择机会。而在每次动作结束时,系统执行sleep命令使程序暂停几秒,让用户看到选择执行的结果,随后清空屏幕显示并再次显示菜单。