01 Shell脚本模块化编程与Linux初始化脚本实现
学习目标
通过本节内容,将全面掌握:
1. 理解 Shell 模块化编程思想:掌握将大型脚本分解为独立模块的原理与优点。 2. 掌握函数与文件模块化方法:能用函数或独立脚本文件构建清晰结构。 3. 实现模块化巡检脚本:能编写可复用、可扩展、可维护的自动化脚本系统。 4. 学会扩展与调试:在脚本中捕获错误、添加新模块、提升鲁棒性。 5. 具备实战应用能力:将模块化思想运用于企业环境,如系统巡检、初始化、自动部署等任务。
Shell 模块化编程概述
模块化编程的概念
模块化编程是将复杂任务拆分为多个独立的小模块(函数或脚本)。 每个模块只负责一个明确功能,主脚本统一调度这些模块。
这种思想使脚本更加:
- 可复用
- 易维护
- 易扩展
- 结构清晰
模块化的优势
<sheet sheet-id="DxEeCz" token="NOTzsjgz9hI1yYtQTcEcxoC2nsb"></sheet>
Shell 模块化实现方法
Shell 模块化主要有两种方式:
函数模块化
在单个脚本中定义多个函数,然后按需调用。
示例:函数模块化脚本(可直接运行)
保存为 func_demo.sh:
vim func_demo.sh命令说明:
- 用途:执行
vim func_demo.sh。
- 重点看:命令输出中的状态、关键数值或报错信息。
#!/bin/bash
# 函数模块化示例:系统信息巡检
# 1. 打印系统信息
print_system_info() {
echo "===== 系统信息 ====="
echo "主机名: $(hostname)"
echo "操作系统: $(uname -s)"
echo "内核版本: $(uname -r)"
}
# 2. 内存使用
show_memory_usage() {
echo "===== 内存使用情况 ====="
free -h
}
# 3. 磁盘使用
show_disk_usage() {
echo "===== 磁盘使用情况 ====="
df -h --output=source,pcent,target | column -t
}
# 主逻辑调用
print_system_info
show_memory_usage
show_disk_usage命令作用:
- 把命令后的文本或变量展开结果写到标准输出;配合
>或>>时会改为写入文件,前者覆盖、后者追加。
执行结果:
- 成功后文本或变量展开结果会输出到终端;带重定向时会写入目标文件。
- 成功后会显示文件系统容量、已用空间和挂载点。
关键参数:
注意事项:
关键参数:
注意事项:
注意事项:
**注意事项:**
开始系统信息巡检...
系统巡检完成
**注意事项:**
#!/bin/bash
}
0)
;;
1)
;;
2)
;;
3)
;;
4)
;;
5)
;;
6)
;;
7)
;;
8)
;;
9)
;;
10)
;;
*)
;;注意事项:
/root/server_init
注意事项:
#!/bin/bash }
**注意事项:**
#!/bin/bash
ssh_port=${ssh_port:-22}
}注意事项:
注意事项:
注意事项:
请选择操作: 正在执行所有操作... 优化Linux系统... Linux系统优化完成 配置阿里云源... 阿里云源配置完成 配置SSH... 请输入SSH端口(默认22): SSH配置完成,当前端口:22 配置时间同步... =============================================================================== 时间同步配置完成 配置DNS...
默认主DNS:114.114.114.114 默认备用DNS:8.8.8.8
请输入主DNS(直接回车使用默认): 请输入备用DNS(直接回车使用默认): DNS配置完成,主DNS:114.114.114.114,备用DNS:8.8.8.8 配置防火墙... 防火墙配置完成 安装常用工具... 常用工具安装完成 安装MySQL...
MySQL安装完成 安装Nginx...
Nginx安装并配置完成 检测到主网卡:ens160 静态IP配置完成 [connection] id=ens160 uuid=23b2a272-c4e7-46a3-b9e2-4308c9807f45 type=ethernet interface-name=ens160 autoconnect-priority=-999
[ipv4] address1=192.168.88.100/24,192.168.88.2 method=manual dns=114.114.114.114,8.8.8.8
[ipv6] method=disabled
**注意事项:**
请选择操作:
正在配置DNS...
配置DNS...
默认主DNS:114.114.114.114
默认备用DNS:8.8.8.8
DNS配置完成,主DNS:114.114.114.114,备用DNS:192.168.88.2
请选择操作:
正在配置静态IP...
检测到主网卡:ens160
静态IP配置完成
[connection]
id=ens160
uuid=f2b60b8b-7fa0-44f5-a963-a108bb6a50e9
type=ethernet
interface-name=ens160
autoconnect-priority=-999
[ipv4]
address1=192.168.88.101/24,192.168.88.2
method=manual
dns=114.114.114.114,192.168.88.2
[ipv6]
method=disabled注意事项:
通过本节内容的学习,掌握了以下关键技能:
本节所学的模块化编程思想在实际运维工作中有广泛的应用,特别是在以下场景:
要进一步提高脚本的功能和灵活性,可以从以下几个方面进行优化:
模块化不仅仅是“拆分”脚本,更是一种组织结构的思维方式,是让脚本从“能跑”到“能维护”的关键能力。它使得脚本更具灵活性、可扩展性和可维护性,特别适用于团队合作和企业级自动化运维场景。
任务要求:
在现有的系统巡检脚本基础上,增加3个新功能模块:
任务要求:
改进现有的Linux初始化脚本: