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命令使程序暂停几秒,让用户看到选择执行的结果,随后清空屏幕显示并再次显示菜单。
上一篇: Java 数组的反转