标签(空格分隔): Shell
while 循环语句的基本语法为:
while <条件表达式>
do
cmd...
done
until <条件表达式>
do
cmd...
done
例 9-1
每隔 2 秒在屏幕上输出一次负载值。
#!/bin/bash
while true #<== 表达条件永远为真,会一直运行,称之为守护进程。
do
uptime
sleep 2
done
将负载值追加到 log 里,使用微秒单位
#!bin/bash
while [ 1 ]
do
uptime >>/tmp/uptime.log
usleep 2000000
done
通过在脚本的结尾使用 & 符号来在后台运行脚本
[root@web001 scripts]# sh 9_1.sh &
[2] 15344
[root@web001 scripts]# tail -f /tmp/uptime.log
09:49:34 up 1 day, 7:25, 2 users, load average: 0.00, 0.01, 0.05
09:49:36 up 1 day, 7:25, 2 users, load average: 0.00, 0.01, 0.05
09:49:38 up 1 day, 7:25, 2 users, load average: 0.00, 0.01, 0.05
09:49:40 up 1 day, 7:25, 2 users, load average: 0.00, 0.01, 0.05
...
usage | description |
---|---|
sh while1.sh & | 把脚本 while1.sh 放到后台执行 |
ctrl+c | 停止执行当前脚本或任务 |
ctrl+z | 暂停执行当前脚本或任务 |
bg | 把当前脚本或任务放到后台执行,background |
fg | 把当前脚本或任务放到前台执行,如果有多个任务,可以使用 fg 加任务编号调出对应的脚本任务,frontground |
jobs | 查看当前执行的脚本任务 |
kill | 关闭执行的脚本任务,即以 “ kill %任务编号 ” 的形式关闭脚本 |
[root@web001 scripts]# sh 194load.sh &
[1] 16043
[root@web001 scripts]# fg
sh 194load.sh
^Z
[1]+ Stopped sh 194load.sh
[root@web001 scripts]# bg
[1]+ sh 194load.sh &
[root@web001 scripts]# jobs
[1]+ Running sh 194load.sh &
[root@web001 scripts]# fg 1
sh 194load.sh
^C
使用 kill 命令关闭 jobs 任务脚本
[root@web001 scripts]# jobs
[1]- Running sh 194load.sh &
[2]+ Running sh 194load.sh &
[root@web001 scripts]# kill %2
[root@web001 scripts]# jobs
[1]- Running sh 194load.sh &
[2]+ Terminated sh 194load.sh
进程管理的Linux 相关命令:
例 9-2
使用 while 循环或 until 循环竖向打印 54321。
#!/bin/bash
i=5
#while ((i>0))
#while [[ $i > 0 ]]
#while [ $i -gt 0 ]
until [[ i < 1 ]]
do
echo "$i"
((i--))
done
例 9-3
猜数字游戏。首先让系统随机生成一个数字,范围为(1-60),让用户输入所猜的数字。如果不符合要求,则给予或高或低的猜对后则给出猜对所用的次数。
#!/bin/bash
cnt=0
NUM=$((RANDOM%61))
input(){
read -p "pls input a num:" num
expr $num + 1 &>/dev/null
[ $? -ne 0 ] && echo "pls input a 'num'."
input
}
guess(){
((cnt++))
if [ $num -eq $NUM ]; then
echo "You are right."
if [ $cnt - le 3 ]; then
echo "You have try $cnt times, excellent!"
elif [ $cnt -gt 3 -a $cnt le 6 ]; then
echo "You have try $cnt times, good."
elif [ $cnt -gt 6 ]; then
echo "You have try $cnt times."
fi
exit 0
elif [ $num -gt $NUM ]; then
echo "It is too big. Try again."
input
elif [ $num -lt $NUM ]; then
echo "It is too small. Try again."
input
fi
}
main(){
input
while true
do
guess
done
}
方式 1: 采用 exec 读取文件,然后进入 while 循环处理
exec
方式 2:使用 cat 读取文件内容,然后通过管道进入 while 循环处理
cat FILE_PATH|while read line
do
cmd
done
方式 3:在 while 循环结尾 done 处输入重定向指定读取的文件。
while read line
do
cmd
done
1)while 循环结构及相关语句综合实践小结
2)Shell 脚本中各个语句的使用场景