前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Shell编程学习路线]——for循环应用技巧 语法和案例

[Shell编程学习路线]——for循环应用技巧 语法和案例

作者头像
神秘奇男子
发布2024-06-22 08:29:17
700
发布2024-06-22 08:29:17
举报
文章被收录于专栏:运维知识运维知识

————前言————

在Shell编程中,for循环是一个强大且常用的控制结构,可以极大地简化任务的自动化处理。无论是批量处理文件、执行重复性任务,还是实现复杂的逻辑控制,for循环都能提供高效且灵活的解决方案。在这篇文章中,我们将深入探索for循环的多种应用技巧,通过具体实例帮助你掌握其在实际编程中的妙用。不论你是Shell编程的新手还是有经验的开发者,这里都有适合你的实用技巧,助你在Shell脚本编程的道路上更进一步。

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

for 循环语句

for 循环是Shell脚本中用于遍历列表、数组或文件的重要工具。它通过指定一个变量和一组值,依次将 每个值赋给变量,并执行相应的命令块。这使得在Shell中能够方便地处理多个文件、目录或其他数据 集,用于自动化任务和批处理操作。

基本结构
代码语言:javascript
复制
for 变量名 in 取值列表
do
执行的命令
done

`for 变量名 in 取值列表`: 这部分定义了循环的结构。`变量名` 是用来存储列表中当前值的变量名。`取 值列表` 是一个用空格分隔的列表,可以是具体的数值、字符串、文件名列表等。 `do`: 表示循环开始,后面紧跟着要执行的命令块。 `执行的命令`: 在每次循环迭代时执行的命令或命令块。可以是任意Shell命令,通常使用`变量名` 来访问 当前循环迭代中的值。 `done`: 表示循环体的结束。

它的作用是依次将列表中的每个值赋给变量名,并执行相应的命令块,直到列表中的所有值都被处理完 毕。

图示原理
for循环实例

实例 1.根据文档中的姓名去创建用户 并设置密码为123456 编写脚本 user.sh

代码语言:javascript
复制
vim user.sh
#!/bin/bash
#2024-6-13-13-57-35
for i in `cat user.txt`
do
useradd $i
echo '123456' | passwd --stdin $i &> /dev/null
done

添加人员名单

代码语言:javascript
复制
vim user.txt
wangwu
zhangsan
lisi
smqnz
测试
代码语言:javascript
复制
bash user.sh //执行脚本
tail -4 /etc/passwd //查看是否成功
举一反三

通过上述实验 我们根据文本创建用户,现在我们根据文本删除用户 编写脚本内容

代码语言:javascript
复制
#!/bin/bash
for i in `cat user.txt`
do
userdel -r $i
echo "用户$i 删除成功"
done

可以看到家目录已经删除成功说明用户也是删除成功

实例(ping)

题目要求编写一个脚本,根据给定的IP地址列表,检查每个主机的状态。这意味着脚本需要能够逐个Ping 每个IP地址,并显示每个主机是否可达。 第一步创建IP地址列表 第二步编写脚本 第三步执行并测试

代码语言:javascript
复制
vim ip.txt
 192.168.93.1 
192.168.93.2 
192.168.93.111 
192.168.93.11

编写脚本

代码语言:javascript
复制
vim ip.sh
#!/bin/bash
for i in `cat ip.txt`
do
ping -c 3 -i 0.2 -W 3 $i &> /dev/null
if [ $? -eq 0 ];then
echo "$i is up"
else
echo "$i is down"
fi
don

解释如下

for i in \cat ip.txt`: 使用 cat命令读取ip.txt 文件中的每一行,每一行一个IP地址。反引号 \ ` 用于命令替换,将 cat ip.txt 的输出作为 for 循环的输入。 ping -c 3 -i 0.2 -W 3 i &> /dev/null: 对每个IP地址 -c 3: 发送3个ICMP包。 -i 0.2: 设置ICMP包的发送间隔为0.2秒。 -W 3: 设置超时时间为3秒。 &> /dev/null: 将Ping命令的所有输出重定向到 /dev/null,即丢弃所有输出,只关注命令的返回状态。 if [ ? -eq 0 ]; then ... fi: 检查上一条命令的返回状态: ? 是上一个命令的退出状态码,Ping命令成功返回0,失败返回其他值。 如果返回状态为0,输出 "$i is up",表示主机可达。 如果返回状态不为0,输出 "$i is down",表示主机不可达或Ping超时。

总结

通过本文的学习,我们详细探讨了Shell编程中for循环的多种应用场景和技巧。从基本的语法结构,到复杂的文件处理和数据操作,for循环展示了其在Shell脚本中的强大功能。我们不仅了解了如何使用for循环遍历列表、文件内容,还学会了在实际项目中应用这些知识以提高脚本的效率和可维护性。

通过这些实例,相信你已经对for循环有了更深刻的理解和更熟练的掌握。在今后的编程实践中,希望你能灵活运用for循环,为解决各种自动化任务提供高效的解决方案。Shell脚本的魅力在于其简洁和强大,for循环作为其中的重要工具,定会成为你编程道路上的得力助手。

继续探索Shell编程的其他强大功能,不断提升你的编程能力,期待你在Shell脚本编写中取得更多成就

"成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!" "每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。" 神秘泣男子

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ————前言————
  • for 循环语句
    • 基本结构
      • 图示原理
        • for循环实例
          • 测试
            • 举一反三
              • 实例(ping)
              • 总结
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档