使用Shell脚本进行语句循环

使用Shell脚本进行语句循环

📒博客主页: 微笑的段嘉许博客主页

🎉欢迎关注🔎点赞👍收藏⭐留言📝

📌本文由微笑的段嘉许原创!

📆51CTO首发时间:🌴2022年10月日24🌴

✉️坚持和努力一定能换来诗与远方!

🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

本文介绍

除了上一篇文章介绍的if条件语句之外,(本文不再介绍if条件语句,感兴趣的小伙伴可以参考上一章介绍的使用Shell脚本进行条件测试)作为一种脚本编程语言,Shell同样包含循环,分支等其他程序控制结构,从而能够轻松完成更加复杂,强大的功能。本文将介绍for、while、case语句的具体应用。

📌导航小助手📌

📝理论讲解:

使用for循环语句

​ 在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的对象不一样,其他命令相同。例如,根据通讯录中的姓名列表创建系统账号,根据服务器清单检查各主机的存活状态,根据IP地址黑名单设置拒绝访问的防火墙策略等。

​ 当面对各种列表重复任务时,使用简单的if语句已经难以满足要求,而顺序编写全部代码更是显得异常繁琐,困难重重。本文将要介绍的for循环语句,可以很好地解决类似地问题。

for语句的结构

​ 使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。在这里,"取值列表"称为for语句的执行条件,其中包括多个属性相同的对象,需要预先指定(如通讯录、IP黑名单)。

​ for语句的语法结构如下所示:

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

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

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

img

使用While循环语句

​ for循环语句非常适用于列表对象无规则,且列表来源已固定(如某个列表文件)的场合。而对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,则更适合使用另外一种循环——while语句。

while语句的结构

​ 使用while循环语句时,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足时为止。在脚本应用中,应该避免出现死循环的情况,否则后边的命令操作将无法执行。因此,循环体内的命令序列中应包括修改测试条件的语句,以便在适当的时候使测试条件不再成立,从而结束循环。

​ while循环语句的语法结构如下所示:

while	条件测试
do	
	命令序列
done

​ while语句的执行流程:首先判断while后的条件测试操作结果,如果条件成立,则执行do…done循环体中的命令序列;返回while后再次判断条件啊测试结果,如果条件仍然成立,则继续执行循环体;再次返回到while后,判断条件测试结果……如此循环,直到while后的条件测hi结果不再成立为止,最后跳转到done语句,表示结束循环,如下图所示;

​ 使用while循环语句时,有两个特殊的条件测试操作,即true(真)false(假)了。使用true作为条件时,表示条件永远成立,循环体内的命令序列将无限执行下去,除非强制终止脚本(或通过exit语句退出脚本);反之,若使用false作为条件,则循环体将不会被执行。这两个特殊条件也可以用在if语句的条件测试中。

img

使用case分支语句

​ 上一篇文章介绍多分支的if语句时,曾经提到过该用case语句可以使脚本程序的结构更加清晰、层次分明,本文就来学习case语句的语法结构及应用。

case语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句只是判断一个变量的不同取值。

​ case分支语句的语法结构如下所示:

case	变量值	in
模式1)
	命令序列1
	;;
模式2)
	命令序列2
	;;
	......
* )
	默认命令序列
esac

​ 在上述语句结构中,关键字case后面跟的是"变量值",即"$变量名",这点需要与for循环语句的结构加以区别。整个分支结构包括在case…esac之间,中间的模式1、模式2、……、*对应为变量的不同取值(程序期望的取值),其中*作为通配符,可匹配任意值。

​ case语句的执行流程:首先使用"变量值"与模式1进行比较,若取值相同则执行模式1后的命令序列,直到遇见双分号";;“后跳至esac,表示结束分支;若于模式1不相匹配,则继续与模式2进行比较,若取值相同则执行模式2后的命令序列,直到遇见双分号”;;“后跳至esac,表示结束分支……依此类推,若找不到任何匹配的值,则执行默认模式” *) "后的命令序列,直到玉娇案esac后结束分支,如图所示:

使用case分支语句时,有几个值得注意的特点如下所述。

  • case行尾必须为单词"in",每一行模式必须以右括号" ) "结束。
  • 双分号";;"表示命令序列的结束。
  • 模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]“,还可以用竖杠符号” | “表示或,如"A|B”
  • 最后的" *) "表示默认模式,其中的*相当于通配符。

📖实验配置与实现:

推荐步骤

for 循环应用

while 循环应用

case 服务控制脚本应用

实验步骤

一、for 循环应用

1、使用 for 循环创建用户

1)创建用户列表

image-20221024161421738

2)创建 for 循环脚本

image-20221024161431313

3)添加脚本执行权限运行脚本

image-20221024161440491

2、使用 for 脚本删除创建的用户

1)创建删除用户脚本

image-20221024161449601

2)添加执行脚本权限运行脚本

image-20221024161455582

3、使用 for 判断网路连通性

1)创建 IP 地址列表

image-20221024161513817

2)创建判断主机连通性脚本

image-20221024161521428

3)添加执行权限运行脚本

image-20221024161530693

4、使用 for 结合 read -p 接收用户入 IP 地址使用 for 测试网络连通性

1) 创建脚本网络连通性脚本

image-20221024161539609

2)运行脚本进行测试

image-20221024161544930

二、while 循环应用

1、使用 while 创建 100 个以 benet 的用户名字

1)创建脚本文件

image-20221024161553004

2)执行脚本

image-20221024161558744

2、将创建的 100 个账户删除

1)编辑删除用户脚本

image-20221024161606660

2)删除创建的用户

image-20221024161613469

3、随机值进行判断,判断范围为 2 的 16 次方范围值内使用

1)创建随机值判断脚本

image-20221024161621806

2) 运行脚本

image-20221024161628286

三、case 服务控制脚本应用

1、使用 case 判断用户输入的是字符或者数字以及字母

1)创建脚本

image-20221024161637420

2)运行脚本

image-20221024161643652

2、配置 case 控制 vsftpd 服务

1)挂载系统光盘

image-20221024161653322

2)系统光盘挂载到/mnt 目录

image-20221024161700303

image-20221024161709537

3) 安装 vsftpd 服务

image-20221024161718428

4)创建脚本控制文件

image-20221024161729032

5)运行验证脚本

image-20221024161739132


🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微笑的小许

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值