while
通过判断条件是否成立,对其进行循环,若条件成立,则一直执行循环体中的命令序列,若条件不成立,则退出循环。
在使用while循环的时候,其还与for循环不同,for循环的循环数据是有限的,也就是你所指定的某些数据进行循环。而while是根据你指定的条件对其进行循环,若条件一直成立,则一直循环。这个时候,我们就要避免出现死循环的情况,否则后续命令也无法执行。
语法
while 条件判断
do
命令序列
done
简单案例
例1:简单使用一下循环,a的值小于5,则循环加一,直到大于或等于5
#!/bin/bash
#date:2020-3-2
#描述:for简单案例
a=1
while [ $a -lt 5 ]
do
a=$[$a+1]
echo "a的值为$a"
done
执行效果:
[root@linus ~]# sh while_test.sh
a的值为2
a的值为3
a的值为4
a的值为5
例2:设置一个从1加到n的小案例
#!/bin/bash
#date:2020-3-2
#描述:for简单案例
read -p "请输入从1加到哪里:" num
a=1
b=0
while [ $a -le $num ]
do
b=$[$b+$a]
let a++
done
echo "结果为$b"
执行效果:
[root@linus ~]# sh while_test.sh
请输入从1加到哪里:2
结果为3
例3:批量自主添加用户脚本,并提示是否设置过期时间
#!/bin/bash
#date:2020-3-2
#描述:批量添加用户脚本
read -p "你想创建几个用户:" num
a=0
while [ $a -lt $num ]
do
read -p "请输入需要创建的用户:" name
read -p "请输入用户密码:" passwd
read -p "是否设置过期时间(yes|no):" date
case $date in
yes|YES|Y|y)
read -p "请输入过期时间:" date2
useradd -e $date2 $name
;;
NO|no|N|n)
echo "无过期时间,直接创建"
useradd $name
;;
*)
echo "输入为其他字符,使用默认选项,无过期时间"
useradd $name
esac
echo "$passwd" | passwd --stdin $name &>/dev/null
echo "$name用户创建成功"
let a++
done
执行效果:
[root@linus ~]# sh while_user.sh
你想创建几个用户:1
请输入需要创建的用户:caiwu
请输入用户密码:caiwu.com
是否设置过期时间(yes|no):yes
请输入过期时间:2020-3-9
caiwu用户创建成功
例4:批量自主删除用户脚本,并提示是否继续删除
#!/bin/bash
#date:2020-3-2
#描述:批量删除用户脚本
daan ()
{
read -p "是否要删除用户(yes|no):" daan
}
daan
while [ $daan = yes ]
do
read -p "请输入要删除的用户:" user
userdel -r $user
echo "$user用户已删除"
daan
done
执行效果:
[root@linus ~]# sh while_del.sh
是否要删除用户(yes|no):yes
请输入要删除的用户:user
user用户已删除
是否要删除用户(yes|no):no
例5:猜测商品价格小游戏
#!/bin/bash
#date:2020-3-2
#描述:猜测商品价格游戏
a=`expr $RANDOM % 100`
while true
do
read -p "输入商品价格(0-100):" int
if [ $int -eq $a ]
then
echo "恭喜你,猜对了"
exit 0
elif [ $int -gt $a ]
then
echo "猜测价格高于实际价格"
else
echo "猜测价格低于实际价格"
fi
done
执行效果:
[root@linus ~]# sh for_game.sh
输入商品价格(0-100):40
猜测价格高于实际价格
输入商品价格(0-100):30
猜测价格低于实际价格
输入商品价格(0-100):37
猜测价格高于实际价格
输入商品价格(0-100):35
猜测价格高于实际价格
输入商品价格(0-100):33
猜测价格高于实际价格
输入商品价格(0-100):31
猜测价格低于实际价格
输入商品价格(0-100):32
恭喜你,猜对了