本文链接: (转载请注明出处)
用途说明
while循环是Shell中常用的语法结构,它与其他编程语言中的while有些类似,只是写法有些不一样罢了。
常用格式
格式一
while 条件;
do
语句
done
格式二 死循环
while true
do
语句
done
格式三 死循环
while :
do
语句
done
格式四 死循环
while [ 1 ]
do
语句
done
格式五 死循环
while [ 0 ]
do
语句
done
使用示例
示例一
COUNTER=0
while [ $COUNTER -lt 10 ]; do
echo The counter is $COUNTER
let COUNTER=COUNTER+1
done
COUNTER=0while [ $COUNTER -lt 10 ]; do echo The counter is $COUNTER let COUNTER=COUNTER+1 done
[root@jfht ~]# COUNTER=0
[root@jfht ~]# while [ $COUNTER -lt 10 ]; do> echo The counter is $COUNTER> let COUNTER=COUNTER+1 > doneThe counter is 0The counter is 1The counter is 2The counter is 3The counter is 4The counter is 5The counter is 6The counter is 7The counter is 8The counter is 9[root@jfht ~]#这个while循环改用for循环更好些
for ((COUNTER=0; COUNTER<10; ++COUNTER))
do
echo The counter is $COUNTER
done
for ((COUNTER=0; COUNTER<10; ++COUNTER))do echo The counter is $COUNTERdone
[root@jfht ~]# for ((COUNTER=0; COUNTER<10; ++COUNTER))
> do> echo The counter is $COUNTER> doneThe counter is 0The counter is 1The counter is 2The counter is 3The counter is 4The counter is 5The counter is 6The counter is 7The counter is 8The counter is 9[root@jfht ~]#示例二
while true
do
date
sleep 1
done
while truedo date sleep 1done
[root@jfht ~]# while true
> do> date> sleep 1> done2010年 10月 10日 星期日 16:35:22 CST2010年 10月 10日 星期日 16:35:23 CST2010年 10月 10日 星期日 16:35:24 CST2010年 10月 10日 星期日 16:35:25 CST2010年 10月 10日 星期日 16:35:26 CST2010年 10月 10日 星期日 16:35:27 CSTCtrl+C[root@jfht ~]#示例三 读取输入
while read line
do
echo $line
done
while read linedo echo $linedone
[root@jfht ~]# while read line
> do> echo $line> donehellohelloworldworldCtrl+D[root@jfht ~]#实例四 处理命令行参数
文件 while_4.sh
#!/bin/sh
usage()
{
echo "usage: $0 [-a] [-e <admin>] [-f <serverfile>] [-h] [-d <domain>] [-s <whois_server>] [-q] [-x <warndays>]"
}
while getopts ae:f:hd:s:qx: option
do
case "${option}" in
a) ALARM="TRUE";;
e) ADMIN=${OPTARG};;
d) DOMAIN=${OPTARG};;
f) SERVERFILE=$OPTARG;;
s) WHOIS_SERVER=$OPTARG;;
q) QUIET="TRUE";;
x) WARNDAYS=$OPTARG;;
\?) usage; exit 1;;
esac
done
echo "ALARM=$ALARM"
echo "ADMIN=$ADMIN"
#!/bin/shusage(){ echo "usage: $0 [-a] [-e] [-f ] [-h] [-d ] [-s ] [-q] [-x ]"}while getopts ae:f:hd:s:qx: optiondo case "${option}" in a) ALARM="TRUE";; e) ADMIN=${OPTARG};; d) DOMAIN=${OPTARG};; f) SERVERFILE=$OPTARG;; s) WHOIS_SERVER=$OPTARG;; q) QUIET="TRUE";; x) WARNDAYS=$OPTARG;; \?) usage; exit 1;; esacdoneecho "ALARM=$ALARM"echo "ADMIN=$ADMIN"
[root@jfht ~]# cat while_4.sh
#!/bin/shusage(){ echo "usage: $0 [-a] [-e <admin>] [-f <serverfile>] [-h] [-d <domain>] [-s <whois_server>] [-q] [-x <warndays>]"}while getopts ae:f:hd:s:qx: optiondo case "${option}" in a) ALARM="TRUE";; e) ADMIN=${OPTARG};; d) DOMAIN=${OPTARG};; f) SERVERFILE=$OPTARG;; s) WHOIS_SERVER=$OPTARG;; q) QUIET="TRUE";; x) WARNDAYS=$OPTARG;; \?) usage; exit 1;; esacdoneecho "ALARM=$ALARM"echo "ADMIN=$ADMIN"[root@jfht ~]# chmod +x while_4.sh [root@jfht ~]# ./while_4.sh ALARM=ADMIN=[root@jfht ~]# ./while_4.sh -aALARM=TRUEADMIN=[root@jfht ~]# ./while_4.sh -e hyALARM=ADMIN=hy[root@jfht ~]#问题思考
1. 为什么 while [ 0 ] 也会是死循环?
2. 怎么使用while read line从文件中读入数据?
相关资料
【1】BASH Programming - Introduction HOW-TO
【2】Audbel
【3】一个有很多while示例的英文网页