Linux Shell编程和循环语句
一.for循环语句
- 1.for语句的结构
- 2.for循环语句实例
- ①根据姓名列表来批量创建多个用户
- ②根据IP地址列表检查主机状态
- 二.使用while循环语句
- 1.while语句结构
- 2.while循环语句应用
- ①批量添加规律编号用户
- ②猜价格游戏
- 三 until循环语句
- 1.until语句结构
- ① 计算1-50的和
1.for语句的结构
使用 for 循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。在这里,“取值列表”称为 for 语句的执行条件,其中包括多个属性相同的对象,需要预先指定(如通讯录、IP 黑名单)
for循环语句格式
for 变量名 in 取值列表
do命令序列
done
for 语句的执行流程:首先将列表中的第一个取值赋给变量,并执行 do…done 循环体中的命令序列:然后将列表中的第二个取值赋给变量,并执行循环体中的命令序列.…依此类推,直到列表中的所有取值用完,最后将跳至 done 语句,表示结束循环
2.for循环语句实例
①根据姓名列表来批量创建多个用户
创建了一个为users的文件里面存放了有多个用户文件中读取各用户名称,重复执行添加用户、设置初始密码的相关操作
若要删除脚本所添加的用户,只需参考上述脚本代码,将 for 循环体中添加用户的命令序列改为删除用户的操作即可
②根据IP地址列表检查主机状态
根据包含公司各服务器 IP 地址的列表文件,检査其中各主机的 ping 连通性,输出各主机是否启动、关闭。其中,服务器的数量并不固定,各服务器的IP 地址之间也无特殊规律。
执行shell脚本读取各服务器的 IP 地址,重复执行 ping 连通性测试,并根据测试结果输出相应的提示信息
创建完一个文件中有各种ip地址然后创建for循环检查文件中ip地址
执行结果如下
二.使用while循环语句
1.while语句结构
for 循环语句非常适用于列表对象无规律,且列表来源已固定(如某个列表文件)的场合。而对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,则更适合使用另外一种循环-while 语句
while 条件测试操作
do命令序列
done
while 语句的执行流程:首先判断 while 后的条件测试操作结果,如果条件成立,则执行 do…done循环体中的命令序列;返回 while 后再次判断条件测试结果,如果条件仍然成立,则继续执行循环体;再次返回到 while 后,判断条件测试结果,如此循环,直到 while 后的条件测试结果不再成立为止,最后跳转到 done 语句,表示结束循环
使用 while 循环语句时,有两个特殊的条件测试操作,即 true(真)和 false(假)。使用 true作为条件时,表示条件永远成立,循环体内的命令序列将无限执行下去,除非强制终止脚本(或通过 exit语句退出脚本);反之,若使用 false 作为条件,则循环体将不会被执行
2.while循环语句应用
①批量添加规律编号用户
在一些技术培训和学习领域,出于实验或测试的目的,需要批量添加用户账号,这些用户的名称中包含固定的前缀字串,并按照数字顺序依次进行编号,账号的数量往往也是固定的。例如,若要添加 20 个用户,名称依次为 stu1、stu2、…、stu20
使用变量 i 来控制用户名称的编号,初始赋值为 1,并且当取值大于 20 时终止循环。在循环体内部,通过语句“let i++”(等同于 i='expr $i +1
)来使变量 i 的值增加 1,因此当执行第一次循环后 ì 的值将变为 2,执行第二次循环后 i 的值将变为 3,…,依此类推
以此类推删除1-20 zzh用户
②猜价格游戏
由脚本预先生成一个随机的价格数目(0~999)作为实际价格,判断用户猜测的价格是否高出或低于实际价格,给出相应提示后再次要求用户猜测;一直到用户猜中实际价格为止,输出用户共猜测的次数、实际价格,
针对上述要求,主要设计思路如下:通过环境变量 RANDOM 可获得一个小于 216的随机整数,计算其与 1000 的余数即可获得 0~999 的随机价格;反复猜测操作可以通过以 true 作为测试条件的while 循环实现,当用户猜中实际价格时终止循环;判断猜测价格与实际价格的过程采用 if 语句实现,嵌套在 while 循环体内;使用变量来记录猜测次数
三 until循环语句
1.until语句结构
until 循环与 while 循环类似,while 循环能实现的脚本 until 同样也可以实现,但区别是while循环在条件为真是继续执行循环,而 unti1 则是在条件为假时执行循环
while 条件测试操作
do命令序列
done
unti1 语句的执行流程:首先判断 unti1 后的条件测试操作结果,如果条件不成立,则执行 do…done循环体中的命令序列;返回 unti1 后再次判断条件测试结果,如果条件仍然不成立,则继续执行循环体:再次返回到 unti1 后,判断条件测试结果…如此循环,直到 unti1 后的条件测试结果成立为止,最后跳转到 done 语句,表示结束循环
① 计算1-50的和
在一些科学计算领域,经常会用到各种数的计算,自然数的求和操作是最简单的。本例中计算从 1 到58 的和,从1开始相加,采用循环的方式,每次循环后加 1,将得到的值加入计算的和中,数字运算采用的是 let 方式,直到加到 50 为止
在 i 的值小于 50 之前,每次循环 i 的值加 1,并且求出 s的值
谢谢大家