Shell~三⼤循环
Shell~三⼤循环的认识
for循环
for循环(英语:for loop)是⼀种编程语⾔的迭代陈述,能够让程式码反复的执⾏。
它跟其他的循环,如while循环,最⼤的不同,是它拥有⼀个循环计数器,或是循环变数。这使得for循环能够知道在迭代过程中的执⾏顺序。
shell中的for循环与在c中不同,它包含三种形式:第⼀种结构是列表for循环;第⼆种结构就是不带列表的for循环;
第三种就类似于C语⾔。
模型
#!/bin/bash
for i in 取值列表
do
循环主体/命令
done
#!/bin/absh
echo "HHHHHHHHH博客:"
for i
do
echo "$i"shell脚本返回执行结果
done
for((exp1;exp2;exp3))
do
指令...
done
while循环
while循环(英语:while loop)是⼀种控制流程的陈述。利⽤⼀个返回结果为布林值(Boolean)的表达式作为循环条件,当这个表达式的返回值为“真”(true)时,则反复执⾏循环体内的程式码;若表达式的返回值为“假”(false),则不再执⾏循环体内的代码,继续执⾏循环体下⾯的代码。
因为while循环在区块内代码被执⾏之前,先检查陈述是否成⽴,因此这种控制流程通常被称为是⼀种前测试循环(pre-test loop)。相对⽽⾔do while循环,是在循环区块执⾏结束之后,再去检查陈述是否成⽴,被称为是后测试循环。
while条件
do
命令
done
获取⽂件的值
while read line;
#这⾥read的作⽤就是结合while循环读取⽂本⽂件的⾏。使⽤read由标准输⼊读取数据,放⼊变量line中,如果读到的数据⾮空,就进⼊循环。do
echo $line;
done <
while read line
do
echo $line
done
exec <   #这个语句的作⽤将中的内容作为exec的标准输⼊
while read line;
do
echo $line
done
⼀. for循环
1.1 for循环的语法格式
1.11 列表循环
列表for循环:⽤于将⼀组命令执⾏已知的次数
基本语法格式:
for value in{list}
do
command
command
done
或者
for value in a b c
do
command1
command2
done
注意事项:
1.12 类C 风格的for 循环
基本语法结构
说明:
expr1:定义变量并赋予初始值
expr2:判定循环的条件
expr3:变量的迭代规则
1.3 for
循环的流程结构图
1.4 循环控制语句(continue ,break ,exit)
-循环体:do…done之间的内容continue:继续;
-continue表⽰循环体内下⾯的代码不执⾏,重新开始下⼀次循环
-break:打断;马上停⽌执⾏本次循环,执⾏循环体后⾯的代码
-exit:表⽰直接跳出程序
1.5 for 循环的应⽤案例
1.51 脚本计算1-100的基数和
1.需求
2.思路
1)定义⼀个变量来保存基数的和 sum=0
2)出1-100的奇数,保存到另外⼀个变量⾥ i=遍历出来的期数
3)从1-100中出奇数后,再相加,然后赋给变量
4)遍历完毕后,将sum的值打印出来
3.落地实现
for  ((expr1;expr2;expr3))
do
command
done
例:
for  ((i =1;i <=6;i ++))
do
echo $i done
计算1-100的奇数和
⽅法⼀
#!/bin/bash
#计算1-100的奇数和
#定义变量保存奇数和
sum=0
#for循环遍历1-100的奇数,并且相加,把结果重新赋值给sum
for i in{1..100..2}
do
let sum=$sum+$i
done
#打印出所有奇数和
echo “1-100的奇数和为$sum“
⽅法⼆
sum=0
for((i=1;i<=100;i+=2))
do
sum=$[$sum + $i]
done
echo "1-100的奇数和为$sum"
1.52 批量创建⽤户
1.需求
批量加5个新⽤户,以U1到U5命名,并统⼀加到⼀个新组,组名为class,统⼀改密码为123456
2.思路
1)添加⽤户的命令 useradd -G calss
2) 判断class组是否存在
3)根据题意,判断该脚本循环5次来添加新⽤户
4)给⽤户设置密码应该放到循环体中
3.落地实现
#!/bin/bash
#判断class组是否存在
grep -w ^class/etc/group &>/dev/null
test $?-ne 0&& groupadd class
#循环创建⽤户
for((i=1;i<=5;i++))
do
useradd -G class U$i >/dev/null
echo 123| passwd --stdin U$i >/dev/null
done
1.53 局域⽹内脚本检查主机⽹络通讯
1.需求:
写⼀个脚本,局域⽹内,把能ping通的IP和不能ping通的IP分类,并保存到两个⽂本⽂件⾥,以10.1.1.1-10.1.1.10 2.落地实现
#!/bin/bash
#定义变量
ip=10.1.1
#循环去ping主机的IP
for i  in{1..10}
do
ping -c 3 $ip.$i &>/dev/null
if[ $?-eq 0];then
echo "$ip.$i is ok">/opt/
else
echo "$ip.$i is down">/opt/
fi
done
⼆. while循环语句
特点:条件为真就进⼊循环,条件为假就退出循环
2.1 while 循环语法格式
1.while循环的语法格式
while表达式
do
command
done
while[1-eq 1]或者((1=1))
do
command
command
done
2.2 while循环的应⽤实例
2.21 while循环脚本同步时间
1.具体需求
1.写⼀个脚本,30秒同步⼀次系统时间,时间同步服务器为ntp1.aliyun
2.如果同步失败,则进⾏邮件报警,每次失败都报警
3.同步成功,也进⾏邮件通知,但是成功100次才通知⼀次
2.思路
1.每隔30秒同步⼀次时间,改脚本是⼀个死循环
2.同步失败发送邮件(ntpdate 20.0.0.26;rate -s 20.0.0.26)
3.同步成功100次发送邮件(定义⼀个变量保存成功的次数)
3.实现脚本

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。