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 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|