一、while循环介绍
while循环与for一样,一般不知道循环次数使用for,不知道循环的次数时推荐使用while
二、while语法
while [ condition ] #条件为真才会循环,条件为假,while停止循环
do
commands
done
三、while实战
1、使用while遍历文件内容
#!/usr/bin/bash
while read i
do
echo "$i"
done < $1
查看运行结果:
[root@localhost test20210728]# sh while-1.sh /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt
......
2、while实现账户登录判断
[root@localhost test20210728]# vim while-2.sh
#!/usr/bin/bash
read -p "login: " account
while [ $account != 'root' ]
do
echo "输入的账户不符合条件,请重新输入:"
read -p "login: " account
done
查看运行结果:
[root@localhost test20210728]# sh while-2.sh
login: test
输入的账户不符合条件,请重新输入:
login: root1
输入的账户不符合条件,请重新输入:
login: root
[root@localhost test20210728]#
3、while+sleep(输出1-10,且每次输出后睡眠1s)
[root@localhost test20210728]# vim while-3+sleep.sh
#!/usr/bin/bash
i=1
while [ $i -lt 10 ];do
echo -n $i" "
sleep 1
i=$((i+1))
done
echo
查询运行结果:(每秒输出一个数字)
[root@localhost test20210728]# sh while-3+sleep.sh
1 2 3 4 5 6 7 8 9
4、while+break(输出1开始自增,且到5时停止)
[root@localhost test20210728]# vim while-4+break.sh
#!/usr/bin/bash
i=1
while [ $i -lt 10 ];do
echo -n $i" "
if [ $i -eq 5 ];then
break
fi
i=$((i+1))
done
echo
查看运行结果:
[root@localhost test20210728]# sh while-4+break.sh
1 2 3 4 5
5、while+continue(输出1-10开始自增,且到5时跳过输出)
[root@localhost test20210728]# vim while-5+continue.sh
#!/usr/bin/bash
i=0
while [ $i -lt 10 ];do
i=$((i+1))
if [ $i -eq 5 ];then
continue
fi
echo -n $i" "
done
echo
查看运行结果:
[root@localhost test20210728]# sh while-5+continue.sh
1 2 3 4 6 7 8 9 10
四、until介绍
和while正好相反,until是条件为假时开始执行,条件为真停止执行
五、until语法
until [ condition ] #注意,条件为假until才会循环,until停止循环
do
commands代码块
done
六、until案例
1、until实现输出10到20
[root@localhost test20210729]# vim until_test.sh
#!/usr/bin/bash
num=10
until [ $num -gt 20 ]
do
echo $num
num=$((num+1))
done
查看运行结果:
[root@localhost test20210729]# sh until_test.sh
10
11
12
13
14
15
16
17
18
19
20