肤白貌美大长腿都在学shell脚本(while,until循环)循环控制语句continue、break、exit
一、while语句结构
while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就掏出循环。
语法结构为:while 表达式 +do +comand done为结尾
例一:
#!/bin/bash
i=1 #先定一个变量
while [ $i -le 5 ] #开启一个while循环,当1小于等于5的时候
do #则
echo $i #输出i值
let i++ #要改变$i的值,不然就会变为死循环(有兴趣的可以试一下)
#还有一种写法 i=$[$i+1]
done
echo "最后i的值为:$i"
输出结果:
例二:输出1-100之间不能被3整除的数字
#!/bin/bash
i=1 #首先定一个变量
while [ $i -le 100 ] #开启while循环,当1小于等于100成立并开启循环
do
if [[ $i%3 -ne 0 ]] #加入if判断,假如i值除以3不等于0
then echo "$i" #则输出i值
fi
let i++ #i+1
done
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wtiXWyUM-1656854149659)(C:\Users\LIU\AppData\Roaming\Typora\typora-user-images\image-20220703124720591.png)]
例三:打印1-100的和
#!/bin/bash
i=1
sum=0
while [ $i -le 100]
do
let sum=$i+$sum
let i++
done
echo $sum
输出结果:
例四:开启httpd服务脚本
#!/bin/bash
i=$1 #定义变量
case $i in #开启case循环
h) #选项
yum install -y httpd #安装httpd服务
if [ $? -eq 0 ];then #当返回值等于0时,那么
echo "安装成功,正在开启服务"
systemctl start httpd
if [ $? -eq 0 ];then #加入if判断
echo"开启服务成功"
else
echo"启动失败"
fi
else
echo"安装失败"
fi
;;
esac
执行结果:
例五:监听服务器脚本
#!/bin/bash
while ps aux | grep httpd | grep -v grep &> /dev/null #while循环过滤进程,如果能过滤到进程则输出
do
echo "httpd 正在运行中" >> /opt/lianxi/zhuru.log #日志
sleep 2 #保持不要频发过滤 done
echo "httpd 不在运行" >> /opt/lianxi/zhuru.log
执行结果:
二、while死循环
死循环如果不加两个关键字就会一直循环
例一:猜数字,猜不到就一直猜
#!/bin/bash
num=10 #定义你要猜的数字
while true #开启死循环
do
read -p "请输入数字: " shu
if [ $shu -eq $num ];then
echo "猜中"
break #关闭一个循环
elif [ $shu -gt $num ];then
echo "你猜的数大了"
elif [ $shu -lt $num ];then
echo "你猜的数小了"
fi
done
输出结果:
三、在shell脚本中exit、break与continue的区别
continue:提前结束本轮循环,而进入下一轮循环;
break:结束整个循环;
exit:退出shell脚本,不再执行exit下的任何命令;
四、until循环
跟while相反,条件为假进入循环,条件为真则退出循环。
其语法结构为 until +表达式 +do +command +done结尾
例一:用until写出脚本计算1-50的和1275
#!/bin/bash
i=0;s=0
until [ $i -eq 51 ]
do
let s+=i
let i++
done
echo $s
此输出结果为:
死循环结构为 untile false开始死循环
五、循环控制语句
for循环一般会搭配条件判断语句和流程控制语句一起执行,那么就会出现需要跳过循环和终止循环的情况,控制循环的命令有以下三个
一、continue
继续,但不会执行循环体内下面的代码了,开始重新开始下一次循环
#!/bin/bash
for ((i=1;i<=5;i++)) #定义变量进入for循环
do
if [ $i -eq 3 ];then
continue #进入下一循环
else
echo $i
fi
done
二、break
打断,马上停止本次循环,执行循环体外的代码
#!/bin/bash
for ((i=1;i<=10;i++))
do
if [ $i -eq 8 ];then
break
else
echo $i
fi
done
三、exit
直接跳出程序,后面可跟状态返回码如exit 1等
#!/bin/bash
for i in {1..5}
do
if [ $i -eq 3 ];then
exit 100
else
echo $i
fi
done
echo hi
fi
done
[外链图片转存中...(img-pC195HBE-1656854149663)]
三、exit
直接跳出程序,后面可跟状态返回码如exit 1等
#!/bin/bash
for i in {1…5}
do
if [ $i -eq 3 ];then
exit 100
else
echo $i
fi
done
echo hi
![image-20220703195044107](https://img-blog.csdnimg.cn/img_convert/3ce32c6f11737bb97e3e7e7d55eecf69.png)