Shell编程之循环语句

 前言

脚本执行任务的时候总会遇到需要重复执行的时候,为了节省资源,除了计划任务,我们还可以使用脚本来完成,也就是Shell脚本中的循环。循环可以不断地执行某个程序段落,直到用户设置的条件完成为止,所以重点是【条件的完成】是什么,除了这种依据判断式完成与否的不定循环之外,还有另外一种已经固定要跑多少次的循环状态,也可以称为固定循环的转态。

 

for语句的结构(固定循环)

for循环语句适用于列表对象无规律,且列表来源已经固定(如某个列表文件)的场合,需要指定一个变量及可能的取值列表,针对每一个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。“取值列表”称为for语句的执行条件,其中包括多个属性相同的对象,需要预先指定(如通讯录、IP黑名单)

格式:

for 变量名 in 取值列表
do
    命令序列
done

for语句结构中,for语句的操作对象为用户指定名称的变量,并通过in关键字为该变量预先设置了一个取值列表,多个取值之间以空格进行分隔。位do…done之间的命令序列称为"循环体",其中的执行语句需要引用变量以完成相应的任务

 

for 语句的执行流程∶首先将列表中的第1个取值赋给变量,并执行do…done循环体中的命令序列;然后将列表中的第2个取值赋给变量,并执行循环体中的命令序列……以此类推,直到列表中的所有取值用完,最后将跳至 done语句,表示结束循环

示例:

一》提示用户输入一个小于100的整数,并计算到该数之间所有整数的偶数和与奇数和

*i++=i$[i+1]为每次加1      或者    i--=i$[i-1]为每次减1
 i+=2为每次加2             或者    i-=2为每次减2

 for循环从上到下依次执行,所以不能使用同一个变量名,例如这里第一个i变量第二个则是b变量

 

二》批量添加用户

用户名存放在users.txt文件中,每行一个,初始密码均为123456

 

三》根据IP地址检查主机状态

ip地址存放在ipadd.txt文件中,每行一个

使用ping命令检查各主机的连通性,(ping -c设置完成次数,ping -w设置多少秒后退出)

 

while循环(不定循环)

对于要求控制循环次数、操作对象按数字顺序编号,按特定条件执行重复操作等情况,while循环语句更适合

这种循环方式为:当条件测试操作成立时,就进行循环,当条件测试操作不成立时才停止

格式:

while 条件测试操作
do
   命令序列
done

 

*循环体内的命令序列应包括修改测试条件的语句,以便在适当的时候使条件不再成立从而结束循环

 

 

例如:

一》批量添加用户

用户名以FF开头,按数字顺序进行编号一共1-20,添加20个用户初始密码均设为123456

通过let i++”(等同于i=`expr $i+1`,来使变量i的值每次循环增加1,从而达到大于20终止循环

 

 

二》猜价格小游戏

通过变量RANDOM($RANDOM,随机从0~32767中生成一个整数数字)获得随机数,提示用户猜测并记录次数,猜中后退出循环

 

untile循环(不定循环)

与while循环相反,当条件测试操作不成立则反复循环,成立时即中止循环

格式:

until 条件测试操作
do
   命令序列
done

 

示例:计算1~20的和

 

无限循环

格式:

while :
do
   命令序列
done

或者

while true
do
    命令序列
done

或者 

for (( ; ; ))

 

跳出循环

return命令

return $?当将返回的return信息改为字符串时,则会出现报错,return需要数字参数(说明shell函数中使用return时只能返回数字),$?返回的数值信息为255

return表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用。return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况

exit命令

exit():exit(0)表示正常退出执行程序,如果加其它的数值:12....可以表示由于不同的错误原因而退出 

break命令

break命令允许跳出所有循环(终止执行后面的所有循环)。直接退出该脚本

continue命令

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环,只会跳回到该循环最外层

posted @ 2021-05-16 22:01  D-LXT  阅读(175)  评论(0编辑  收藏  举报