当前位置: 首页 > news >正文

Shell循环(三)

while循环和until循环

while循环

  • 主要用来重复执行一组命令或语句,常用于守护进程或持续运行的程序,循环次数可以固定也可以不固定。
  • 语法结构:
while 条件语句
do循环体
done
  • while循环语句会对条件测试进行判断,如果条件测试成立时,则执行do和done之间的循环体,直到条件测试不成立时停止循环。
  • 逻辑图

until循环

  • 语法结构:
unitl 条件测试
do循环体
done
  • 在条件表达式不成立时,进入循环体执行指令,条件表达式成立时,终止循环。

循环语句案例实战

while循环语句实现批量用户创建

[root@localhost ~]# vim while_create_user.sh
​
#!/bin/bash
​
while read line
doif [ ${#line} -eq 0 ];thenecho "----------------------------------"#exit#breakcontinuefiuser=`echo $line|awk '{print $1}'`pass=`echo $line|awk '{print $2}'`id $user &>/dev/nullif [ $? -eq 0 ];thenecho "user $user already exists."elseuseradd $userecho "$pass" |passwd --stdin $user &>/dev/nullif [ $? -eq 0 ];thenecho "$user is created."fifi
done < user1.txt
​
[root@localhost ~]# cat user1.txt 
test1
wjp1

执行结果如下:

[root@localhost ~]# ./while_create_user.sh 
[root@localhost ~]# cat user1.txt 
test1
wjp1
[root@localhost ~]# ./while_create_user.sh user1.txt 
user test1 already exists.
user wjp1 already exists.

while循环语句和until循环语句测试远程主机连接

while循环语句测试远程主机连接

#!/bin/bash  
ip=192.168.40.116   //该ip无法连通,如果可以连通则一直循环
while ping -c1 -W1 $ip &>/dev/null
dosleep=1
done
echo "$ip is down!"

执行结果如下:

[root@localhost ~]# ./while_conn_test.sh 
192.168.40.116 is down!

until循环语句测试远程主机连接

[root@localhost ~]# cat until_conn_test.sh 
#!/bin/bash
​
ip=192.168.40.16 //该ip无法ping通,则执行陷入循环;如果ip能够ping通则直接退出该脚本
until ping -c1 -W1 $ip &>/dev/null
dosleep 1
done

执行结果如下:

[root@localhost ~]# ./until_conn_test.sh 
^C^C

for、while、until对比

  • while和until均可采用类似for循环的语法格式,但while更擅长逐行处理文件。

for循环ping脚本

[root@localhost ~]# vim for_while_until_ping.sh
​
#!/bin/bash
​
for i in {2..254}
do{ip=192.168.40.$iping -c1 -W1 $ip &>/dev/nullif [ $? -eq 0 ];thenecho "success"fi}&
done
wait
echo "all finish..."

执行结果如下所示:

[root@localhost ~]# ./for_while_until_ping.sh 
success
success
success
success
all finish...

while循环ping脚本

[root@localhost ~]# vim while_ping.sh
​
#!/bin/bash
i=2
while [ $i -le 254 ]
do{ip=192.168.40.$iping -c1 -W1 $ip &>/dev/nullif [ $? -eq 0 ];thenecho "$ip is up."fi}&let i++
done
wait
echo "all finish..."

执行结果如下所示:

[root@localhost ~]# ./while_ping.sh 
192.168.40.2 is up.
192.168.40.10 is up.
192.168.40.136 is up.
192.168.40.156 is up.
all finish...

until循环ping脚本

[root@localhost ~]# vim until_ping.sh
​
#!/bin/bash
​
i=2
until [ $i -gt 254 ]
do{ip=192.168.40.$iping -c1 -W1 $ip &>/dev/nullif [ $? -eq 0 ];thenecho "$ip is up."fi}&let i++
done 
wait
echo "all finish."

执行结果如下所示:

[root@localhost ~]# ./until_ping.sh 
192.168.40.2 is up.
192.168.40.10 is up.
192.168.40.136 is up.
192.168.40.156 is up.
all finish.

相关文章:

  • MySQL故障排查、生产环境优化与存储引擎MyISAM和InnoDB
  • GruntJS-前端自动化任务运行器从入门到实战
  • 关于 JavaScript 中 new Set() 的详解
  • MacOS 安装git
  • ssm项目tomcat启动就java: Compilation failed: internal java compiler error
  • 在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
  • Leetcode4(寻找两个正序数组的中位数)
  • Windows11 WSL2 Ubuntu编译安装perf工具
  • VSCode 没有添加Windows右键菜单
  • Java图形编程实战:从基础绘制到高级动画实现
  • 函数01 day10
  • 【PostgreSQL安装】保姆级安装教程+特性详解
  • 深入理解Go并发模型:从CSP理论到生产实践的完整指南
  • encodeURIComponent和decodeURIComponent
  • OpenHarmony按键分发流程(60%)
  • 安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
  • 云安全与网络安全:核心区别与协同作用解析
  • Android Jetpack Compose开发纯自定义表盘【可用于体重,温度计等项目】
  • 设置Outlook关闭时最小化
  • TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
  • 软件公司 网站模板/排名首页服务热线
  • 织梦英文版网站怎么做/中国营销策划第一人
  • 连连电商网站开发公司/百度学术官网首页
  • 设计吧 网站/谷歌seo推广培训班
  • 广东建设厅的工程造价网站/seo排名技术教程
  • 怎么建设个人主页网站/全网营销推广是什么