Shell 脚本修炼计划:40天从入门到精通
以“每天1段实用脚本+1个核心知识点”为核心,分3个阶段递进,兼顾理论与实践,最终能独立编写企业级自动化脚本。
第一阶段:入门筑基(1-10天)—— 掌握Shell基础语法
目标:理解Shell脚本基本结构、变量、简单命令与条件判断,能编写静态逻辑脚本。
天数 核心知识点 当日脚本任务(示例)
1 脚本头部(#!/bin/bash)、echo输出 编写 hello.sh ,执行后打印“Hello Shell!今天是$(date)”
2 变量定义与引用(本地变量、环境变量) 编写 var_demo.sh ,定义“姓名=张三”“年龄=25”,打印完整信息
3 位置参数($1/ #) 编写 calc_add.sh ,接收2个数字参数,计算并输出它们的和
4 只读变量(readonly)、删除变量(unset) 编写 var_control.sh ,演示变量只读特性(修改时报错)、删除后引用为空
5 条件判断(if [ ]):文件存在/数值比较 编写 file_check.sh ,接收1个文件路径参数,判断文件是否存在并输出结果
6 多条件判断(if-elif-else) 编写 score_level.sh ,接收1个分数参数,输出“优秀(≥90)/良好/及格/不及格”
7 逻辑运算符(&&
8 case分支语句(多值匹配) 编写 menu.sh ,输入1/2/3分别执行“查看日期/计算和/退出”
9 简单循环(for in:固定列表) 编写 print_list.sh ,循环打印列表“apple banana orange”,每个元素占1行
10 阶段小综合 编写 simple_tool.sh ,整合“输入文件名→判断是否存在→存在则统计行数(wc -l)”
第二阶段:熟练应用(11-25天)—— 覆盖日常场景,掌握进阶语法
目标:熟练使用循环、函数、文件处理、正则,能编写批量操作、监控类脚本。
天数 核心知识点 当日脚本任务(示例)
11 for循环(遍历目录文件) 编写 batch_rename.sh ,将当前目录下所有 .txt 文件重命名为“old_原文件名.txt”
12 while循环(条件循环) 编写 count_down.sh ,从输入的数字(如10)倒计时到1,最后打印“时间到!”
13 函数定义与调用(带参数/返回值) 编写 func_calc.sh ,定义“求两数积”的函数,调用时传参并输出结果
14 函数变量作用域(local) 编写 func_scope.sh ,对比“全局变量”和“函数内local变量”的区别(修改不影响外部)
15 文件内容读取(while read line) 编写 read_file.sh ,接收1个文件路径,逐行读取并打印“第N行:内容”
16 文本处理(grep:匹配关键词) 编写 log_grep.sh ,接收“日志文件路径+关键词”,输出包含关键词的所有行
17 文本处理(sed:替换内容) 编写 sed_replace.sh ,将指定文件中的“old”替换为“new”(输出到新文件,不修改原文件)
18 文本处理(awk:列提取) 编写 awk_extract.sh ,读取 /etc/passwd ,输出“用户名(第1列)→ 家目录(第6列)”
19 数组定义与遍历(普通数组) 编写 array_demo.sh ,定义数组“scores=(85 92 78 95)”,循环计算平均分
20 批量执行命令(xargs) 编写 del_temp.sh ,查找 /tmp 下3天前的 .log 文件,确认后删除(结合find + xargs)
21 系统监控(cpu/内存:top/ free) 编写 sys_monitor.sh ,输出当前“CPU使用率(top -bn1
22 定时任务基础(crontab语法) 编写 crontab_note.sh ,记录“每天凌晨2点执行脚本备份日志”的crontab表达式(0 2 * * *)
23 脚本参数校验($#判断是否传参) 编写 backup.sh ,若未传“备份目录”参数则提示“用法:./backup.sh 目录”并退出
24 重定向(> 覆盖写入,>> 追加,2> 错误输出) 编写 log_write.sh ,将“执行日志”写入 run.log ,错误信息写入 error.log
25 阶段小综合 编写 batch_backup.sh ,批量备份指定目录下的 .conf 文件到 /backup/$(date +%Y%m%d) 目录
第三阶段:精通深化(26-40天)—— 企业级脚本能力,解决复杂需求
目标:掌握模块化、错误处理、进程管理、自动化部署,能编写高可用、可维护的脚本。
天数 核心知识点 当日脚本任务(示例)
26 脚本错误处理(set -e:出错即退出) 编写 error_handle.sh ,对比“开启set -e”和“未开启”时,命令报错后的脚本行为
27 进程管理(pgrep/ps:查找进程,kill:终止进程) 编写 process_control.sh ,接收“服务名”,实现“查看进程(status)/终止进程(stop)”
28 模块化脚本(source:引入外部脚本) 编写 lib_calc.sh (存放计算函数),在 main.sh 中用source引入并调用函数
29 远程执行命令(ssh 免密基础,ssh user@ip “命令”) 编写 remote_check.sh ,远程查看目标服务器的 /etc/hostname (需提前配置免密登录)
30 压缩与解压(tar.gz/tar.bz2) 编写 auto_tar.sh ,接收“目录路径”,自动压缩为“目录名_日期.tar.gz”并验证压缩包
31 正则表达式(基础:^开头、$结尾、.任意字符) 编写 regex_check.sh ,判断输入的字符串是否为“11位手机号”(匹配^1[3-9][0-9]{9}$)
32 脚本日志规范(带时间戳、级别:INFO/ERROR) 编写 log_demo.sh ,定义 log_info() 和 log_error() 函数,执行时按规范输出日志
33 自动化部署(以Nginx为例:下载→安装→启动) 编写 install_nginx.sh ,一键执行“yum安装依赖→下载源码→编译安装→启动服务”
34 服务启停脚本(标准Linux服务格式:start/stop/restart) 编写 nginx_service.sh ,支持 ./nginx_service.sh start 等参数,包含进程检查、错误提示
35 批量服务器操作(结合数组+ssh) 编写 batch_exec.sh ,定义服务器数组(user@ip列表),批量执行“uptime”查看负载
36 数据备份与恢复(MySQL:mysqldump) 编写 mysql_backup.sh ,自动备份指定数据库到 /backup/mysql/ ,保留最近7天备份
37 脚本权限控制(检查是否root用户执行) 编写 root_check.sh ,若当前用户不是root,则提示“请用sudo执行”并退出
38 复杂循环(until:条件为真时停止) 编写 wait_service.sh ,循环检查Nginx端口(80),直到端口通了才提示“服务已启动”
39 阶段大综合(自动化运维脚本) 编写 server_auto.sh ,整合“系统监控→日志备份→服务检查→异常邮件提醒(需配置mail)”
40 自定义脚本库整理 将前39天的实用脚本按“工具类/监控类/部署类”分类,编写README说明用法
修炼提议
1. 每日必做:脚本写完后必须实际运行,修改报错(如语法错误、权限问题),直到能正常执行。
2. 注释习惯:关键逻辑(如条件判断、函数功能)必须加注释,方便后续复习和修改。
3. 工具依赖:遇到不懂的命令(如awk、sed),用 man 命令 或 命令 –help 查手册,比直接搜答案更深刻。
4. 积累库:建立自己的 shell_scripts 目录,按阶段存放脚本,后期遇到类似需求可直接复用或修改。
5. 进阶拓展:熟练后可学习“Shell脚本调试(set -x)”“正则进阶”“结合Python/Perl混合编程”,进一步提升能力。



希望能精通Shell脚本呀🎉
收藏了,感谢分享