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)表示正常退出执行程序,如果加其它的数值:1,2,....可以表示由于不同的错误原因而退出
break命令
break命令允许跳出所有循环(终止执行后面的所有循环)。直接退出该脚本
continue命令
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环,只会跳回到该循环最外层