代码世界,因交流而精彩。感谢你驻足于此——接下来的内容,是我用心整理的干货,愿这几分钟的阅读能为你节省时间、带来启发,有所收获。
别忘了读完后在评论区留下你的想法,我们一起碰撞思维火花!


前言

🚀 自动化运维从零开始:Bash Shell 脚本的创建与执行

在 Linux 世界里,单个命令行工具往往只能完成单一的基础任务。面对复杂的运维场景时,我们需要把多个命令串联起来,让它们协同工作、传递数据。而 Bash Shell 脚本正是解决这类问题的利器 —— 它可以将各类 Linux 命令封装成可复用的脚本,高效解决重复性的复杂问题。


一、Bash Shell

📝 什么是 Bash Shell 脚本

Bash Shell 脚本本质上是一个可执行文本文件,它不仅包含了一系列要执行的 Linux 命令,还可以加入流程控制语句(如条件判断、循环)来统筹整个任务的执行逻辑。

一个设计精良的 Shell 脚本本身就是一个强大的命令行工具,甚至可以被其他脚本调用,实现更复杂的功能组合。熟练编写 Shell 脚本是系统管理员的核心技能之一,它能显著提升日常运维工作的效率与准确性,让你更高效地完成批量操作、自动化部署等任务。

✨ 编写工具推荐

你可以用任何普通文本编辑器编写脚本,但像 vimemacs 这类专业编辑器会更有优势 —— 它们支持 Bash 语法高亮,能通过颜色标记帮你快速发现语法错误,比如括号不匹配、引号缺失等问题,让调试过程更顺畅。


🔧 指定命令解释器

Shell 脚本的第一行通常以 #! 开头,这个组合被称为 she-bang(也叫 hash-bang),名称来源于 #(hash)和 !(bang)两个字符的发音。它的作用是告诉系统,要用哪个解释器来执行脚本的后续内容。

对于 Bash 脚本来说,标准的第一行写法是:

#!/usr/bin/bash

这行指令确保系统会调用 Bash 解释器来运行你的脚本,保证代码在不同环境下的一致性。

二、相关练习

1.编写简单的Bash脚本

创建并执行一个简单的Bash脚本:

向firstscript.sh脚本文件中添加更多命令,执行并查看

2.脚本中的循环和条件结构

使用ssh和hostname命令将servera、serverb的主机名显示

创建for循环,在servera、serverb主机上执行hostname命令

在 /home/student/hin 目录中创建 shell 脚本,以执行同样的 for 循环。确保脚本包含在PATH环境变量中

1.for HOST in servera serverb:定义循环,依次将 servera 和 serverb 赋值给变量 HOST

2.ssh student@${HOST} hostname:通过 SSH 登录到目标主机,执行 hostname 命令

3.使用正则表达式匹配命令输出中的文本

以 student 用户身份登录 servera 计算机,再切换为 root 用户。使用 grep 命令查找 postfix 与 postdrop 组和用户的 GID 和 UID。为此,请使用 rpm --scripts 命令查找特定软件包的信息并显示用作安装过程一部分的脚本。

修改前面的正则表达式,以显示 /var/log/maillog 文件中的前两条消息。在这个搜索中,您不需要使用脱字符号 ^,因为您想搜索的不是一行中的第一个字符。

查找 Postfix 服务器的 queue 目录的名称。在 /etc/postfix/main.cf 配置文件中搜索与队列有关的所有信息。使用 grep 命令 -i 选项忽略大小写区分。

确认 postfix 服务将消息写入到 /var/log/messages 文件。使用 less 命令加斜杠 / 搜索文件。按 n 移动到与搜索相匹配的下一个条目。按 q 退出 less 命令。

进入less后,按 /,然后输入搜索关键词。按n移动到下一个条目

使用 ps aux 命令确认 postfix 服务器当前是否正在运行。使用 grep 命令将输出限制为所需的行。

确认 qmgr、cleanup 和 pickup 队列是否配置正确。使用 grep 命令 -e 选项匹配同一文件中的多个条目。/etc/postfix/master.cf 文件是配置文件。

三、附加实验

1.在 workstation 计算机上创建可执行 /home/student/bin/bash-lab 脚本文件。脚本中的初始内容必须使用 shebang 解释器指令。

2. 编辑新创建的脚本文件,将来自 servera 和 serverb 计算机上的以下信息存储在 workstation 计算机上。系统将使用 SSH 密钥来进行身份验证,因此您不需要提供密码。将下表中所列命令的输出分别存储在 workstation 计算机上的 /home/student/output-servera 和 /home/student/output-serverb 文件中。使用井号 (#) 来区分输出文件中连续命令的输出。

命令或文件 要求的内容
hostname -f 存储整个输出。
echo "#####" 附加井号以区分以下命令。
lscpu 只获取以 CPU 字符串开头的行。
echo "#####" 附加井号以区分以下命令。
/etc/selinux/config 忽略空行。另外,也忽略以 # 字符开头的行。
echo "#####" 附加井号以区分以下命令。
/var/log/secure 获取所有 “Failed password” 条目。
echo "#####" 附加井号以区分以下命令。

3. 执行 /home/student/bin/bash-lab 脚本,然后在 workstation 上查看输出内容。


总结

🛠️ 核心技能清单

  1. 编写并执行 Bash 脚本:将日常运维工作自动化,高效完成系统管理任务。
  2. 运用循环结构:在脚本中批量处理列表中的项目,让重复操作更简洁。
  3. 添加条件判断:让脚本具备决策能力,根据不同情况执行相应的逻辑分支。
  4. 正则表达式与 grep 结合:快速在日志文件和配置文件中检索、筛选目标文本。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐