- while [ 条件表达式 ]
- do
- 语句
- 语句
- done
示例:循环输出 1~10这几个数
- [root@openEuler ~]# cat while1.sh
- #!/bin/bash
-
- i=1
- while [ $i -le 10 ]
- do
- echo $i
- let i++
- done
示例:使用 exec 读取指定文件的内容并循环输出。
- # 第一步创建文件及内容
- [root@openEuler ~]# cat > myfile << EOF
- > open
- > openlab
- > openlab123
- > linux
- > readhat
- > EOF
- [root@openEuler ~]# cat myfile
- open
- openlab
- openlab123
- linux
- readhat
- # 第二步:编写脚本来实现文件读取并循环输出
- [root@openEuler ~]# cat while2.sh
- #!/bin/bash
-
- exec < myfile
-
- while read line
- do
- echo $line
- done
- [root@openEuler ~]# bash while2.sh
- open
- openlab
- openlab123
- linux
- readhat
使用另一种方式来读取文件:
- [root@openEuler ~]# cat while3.sh
- #!/bin/bash
-
- while read line
- do
- echo $line
- done < myfile
- [root@openEuler ~]# bash while3.sh
- open
- openlab
- openlab123
- linux
- readhat
在 while 的表达式中,可以指定以下几个特殊值:
true 它会一直循环,而且它的状态返码是 0
false 它不做任何事,表示成功,状态码为 0
: 它的作用与 true 相同,都是进行无限循环
示例:
- [root@openEuler ~]# while true ; do echo 123123 ; done #会一直循环
-
- [root@openEuler ~]# while false ; do echo 123123 ; done
- [root@openEuler ~]# echo $?
- 0
-
- [root@openEuler ~]# while : ; do echo 123123 ; done
- [root@openEuler ~]# cat while4.sh
- #!/bin/bash
-
- price=$[ $RANDOM % 100 ]
- time=0
-
- while true
- do
- read -p 'Please enter product price [0-99]: ' input
- let time++
- if [ $input -eq $price ]; then
- echo 'Good luck, you guessed it.'
- echo 'You have guessed $time times.'
- exit 0
- elif [ $input -gt $price ]; then
- echo "$input is to high"
- else
- echo "$input is to low"
- fi
- if [ $time -eq 5 ]; then
- echo "You have guessed is 5 times. exit"
- exit 1
- fi
- done
- [root@openEuler ~]# bash while4.sh
- Please enter product price [0-99]: 50
- 50 is to low
- Please enter product price [0-99]: 80
- 80 is to high
- Please enter product price [0-99]: 70
- 70 is to high
- Please enter product price [0-99]: 60
- 60 is to low
- Please enter product price [0-99]: 65
- 65 is to low
- You have guessed is 5 times. exit
- [root@openEuler ~]#
示例:使用while读取文件
- # 1. 创建文件
- [root@openEuler ~]# cat ips
- 192.168.72.131 22
- 192.168.72.132 23
- 192.168.72.133 22
-
- # 2. 编写脚本
- [root@openEuler ~]# cat while6.sh
- #!/bin/bash
-
- while read line
- do
- IP=`echo $line|cut -d" " -f1` # 也可以使用awk来实现,如:IP=`echo $line|awk '{print $1}'`
- PORT=$(echo $line|cut -d " " -f 2)
- echo "IP:$IP, PORT:${PORT}"
- done < ips
-
- # 3. 运行测试
- [root@openEuler ~]# bash while6.sh
- IP:192.168.72.131, PORT:22
- IP:192.168.72.132, PORT:23
- IP:192.168.72.133, PORT:22