1 while循环语句
用法:
- 重复测试某个条件,只要条件成立则反复执行。
- 使用场景:相对于for需要知道循环次数,当我们只知道停止条件,不知道次数时,就需要使用while。
格式:
while 条件测试操作
do
命令序列
done
1.1 while语句的作用演示
1、打印0到10
[root@yuji sh]# a=0
[root@yuji sh]# while [ $a -le 10 ] //只要满足a≤10,就输出a的值,之后让a自增1
> do
> echo $a
> let a++
> done
0
1
2
3
4
5
6
7
8
9
10
[root@yuji sh]# echo $a //最后一次输出a的值后,a又加了1,所以现在a的值是11
11
2、不停地打印0
[root@yuji sh]# while [ $a -le 10 ]
> do
> echo $a
> done
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
......
1.2 while循环应用示例
示例1:批量添加用户
要求:
- 用户名称以stu开头,按数字顺序进行编号
- 一共添加20个用户,即stu1、stu2、...... 、stu20
- 初始密码均设为123456
创建脚本:
[root@yuji ~]# vim while01.sh //创建脚本
#!/bin/bash
#用户名称以stu开头,按数字顺序进行编号
#一共添加20个用户,即stu1、stu2、...... 、stu20
#初始密码均设为123456
a=1
while [ $a -le 20 ]
do
useradd stu$a -M
echo "123456"| passwd --stdin stu$a &>/dev/dull
let a++
#一定要有变量迭代的过程
done
小贴士:
将这些测试用户批量删除可以写脚本,也可以使用
echo stu{1..20} |xargs -n 1 userdel
命令。
示例2:猜商品价格游戏
要求:
- 猜商品价格游戏
- 通过变量RANDOM获得随机数
- 提示用户猜测并记录次数,猜中后退出循环
创建脚本:
[root@yuji ~]# vim while02.sh //创建脚本
#!/bin/bash
# 猜商品价格游戏
# 通过变量RANDOM获得随机数
# 提示用户猜测并记录次数,猜中后退出循环
#-----------------------------------------
#商品价格
price=$[RANDOM%100+1]
#猜的次数
a=0
#死循环,一直为真。需要人为设置退出。
while true
do
read -p "请猜测商品价格(1-100):" num
let a++
if [ $num -eq $price ]
then
echo "恭喜你猜对了"
echo "你一共猜了 $a 次"
exit
#猜对价格后,退出脚本进程
elif [ $num -lt $price ]
then
echo "太低了"
else [ $num -gt $price ]
echo "太高了"
fi
done
[root@yuji sh]# bash while02.sh //运行脚本
请猜测商品价格(1-100):50
太高了
请猜测商品价格(1-100):30
太低了
请猜测商品价格(1-100):40
太低了
请猜测商品价格(1-100):45
太低了
请猜测商品价格(1-100):47
太低了
请猜测商品价格(1-100):48
太低了
请猜测商品价格(1-100):49
恭喜你猜对了
你一共猜了 7 次
示例3:while和read结合 读取文件内容
read用法简介:
- read 每次只能读取一行内容,如果read识别到了换行符,就结束这一次的读取。
- linux中的换行符是:换行+回车( 即“\n” )
方法一:
把test文件重定向输入给while,之后read逐行读取。
#!/bin/bash
#把test文件重定向输入给while,之后read逐行读取
while read line
do
echo $line
done < test.txt
方法二:
把文件内容通过管道符传给while,之后read逐行读取。
#!/bin/bash
#把文件内容通过管道符传给while,之后read逐行读取
cat test.txt | while read line
do
echo $line
done
2 until循环语句
用法:
- 重复测试某个条件,只要条件不成立则反复执行。
格式:
until 条件测试操作
do
命令序列
done
2.1 until语句的作用演示
打印1到10:
[root@yuji sh]# a=1
[root@yuji sh]# until [ $a -gt 10 ]
> do
> echo $a
> let a++
> done
1
2
3
4
5
6
7
8
9
10
[root@yuji sh]# echo $a
11
2.2 until 循环应用示例
示例1:计算1到10的和
创建脚本:
[root@yuji sh]# vim until01.sh //写脚本
#!/bin/bash
# 计算1到10的和
sum=0
i=1
# 条件不成立才执行命令序列
until [ $i -gt 10 ]
do
let sum=$[sum+i]
let i++
done
echo "1到10的求和结果是:$sum"
[root@yuji sh]# bash until01.sh //运行脚本
1到10的求和结果是:55
示例2:为指定用户发送在线消息
要求:
- 为指定用户发送在线消息;
- 若用户不在线(未登录系统),则每10分钟试一次,直至用户登录系统后再发送消息;
- 用户名与消息通过位置参数传递给脚本。
创建脚本:
[root@yuji sh]# vim until02.sh
#!/bin/bash
#为指定用户发送在线消息
#若用户不在线(未登录系统),则每10分钟试一次,直至用户
登录系统后再发送消息
#用户名与消息通过位置参数传递给脚本
# 只要用户在线不成立(即用户不在线).就执行命令序列
until who |grep "$1" &> /dev/null
do
echo "$1 不在线"
sleep 600
done
echo $2 | write $1