台式机 Bash 脚本入门教程
一、Bash 脚本的核心价值 在 Windows 系统中运行 Linux 子系统(如 WSL2)或双系统环境下,Bash 脚本是实现自动化办公、系统维护和批量处理的利器。相比图形界面工具,脚本能更精准地控制执行流程,尤其在处理大量文件(如批量重命名照片)、定时任务(如夜间日志清理)和系统监控(如CPU温度预警)时效率提升显著。本教程将手把手教你从零开始掌握 Bash 脚本编写与执行技巧。
二、基础语法与执行环境

- 脚本创建与执行权限
新建脚本文件后务必添加执行权限:
# 创建脚本文件 echo '#!/bin/bash' > backup.sh echo 'echo "备份开始"' >> backup.sh echo 'tar -czvf /backup/path/$(date +%Y%m%d).tar.gz /home/user' >> backup.sh
添加执行权限
chmod +x backup.sh
首次执行需验证路径:
```bash
./backup.sh
-
变量与参数传递
- 变量赋值:
NAME="张三" - 参数获取:
echo "当前参数:$1 $2 $3" - 环境变量:
export PATH=/new/path:$PATH
- 变量赋值:
-
基础逻辑结构
#!/bin/bash
初始化变量
start_time=$(date +%s) file_count=0
遍历指定目录
for file in /data/*.txt; do
文件处理逻辑
echo "处理文件:$file"
((file_count++))
done
计算耗时
end_time=$(date +%s) echo "处理完成,共 $file_count 个文件,耗时 $(($end_time - $start_time)) 秒"
三、核心功能实现技巧
1. 条件判断与流程控制
```bash
if [ -f "$1" ]; then
echo "文件存在,正在处理..."
process_file "$1"
else
echo "错误:文件不存在!"
exit 1
fi
- 多条件判断:
if [ "$OS" = "Ubuntu" ] && [ "$VER" -ge 20 ]; then ... - 循环嵌套:处理不同格式的文件时组合使用
for和while循环
-
文件操作进阶
- 批量修改文件名:`find /path -type f -name "*.jpg" -exec ren {} {}_{:N} \;
- 触发式备份:在
/etc/cron.d中添加定时任务:0 2 * * * root /path/to/backup.sh
-
网络与系统交互
# 发送HTTP请求 curl -s "https://api.example.com/data?token=$API_TOKEN"
监控CPU使用率(需root权限)
while true; do usage=$(top -bn1 | grep "Cpu(s)" | cut -c 11-19 | awk '{print $1}' | sed 's/%//g') echo "当前CPU使用率:$usage%" sleep 5 done
四、典型应用场景实战
1. 自动化日志清理
```bash
#!/bin/bash
LOG_DIR="/var/log"
LOG_SIZE=100MB
# 遍历所有日志文件
for log in $LOG_DIR/*.log; do
# 检查文件大小
if [ -s "$log" -a $(du -sh "$log" | awk '{print $1}') -gt $LOG_SIZE ]; then
# 保留最新5个版本
ls -tr $log | head -5 | xargs rm -f
fi
done
执行时:./clean_logs.sh
- 多环境部署脚本
#!/bin/bash function deploy_app { case $1 in "dev") deploy_to "/home/dev环境" ;; "prod") deploy_to "/home/生产环境" ;; *) echo "错误:无效的环境参数" >&2 esac }
function deploy_to { echo "开始部署到 $1" rsync -avz --delete ./dist/* "$2" systemctl restart app服务 }
调用方式:`./deploy.sh dev`
五、常见问题与解决方案
1. 权限错误处理
```bash
if [ ! -x "$脚本路径" ]; then
echo "错误:脚本没有执行权限!"
exit 1
fi
-
错误捕获机制
try { # 复杂操作 } catch { # 记录错误日志 error_log "$错误信息" exit 1 } -
性能优化技巧
- 使用
parallel命令处理大量任务 - 避免在循环内执行耗时操作
- 对敏感操作添加
set -e(立即退出错误)
- 使用
六、进阶开发指南
-
模块化设计 创建
functions.sh包含通用函数,主脚本调用:#!/bin/bash include() { if [ -f "$1" ]; then source "$1" else echo "错误:函数文件不存在!" exit 1 fi } include functions.sh backup_data -
GUI 集成方案
- 使用
gnome-terminal执行脚本 - 开发C语言界面调用Bash脚本
- 通过
expect实现图形界面自动化
- 使用
-
版本控制实践
# 使用Git管理脚本 git init git add backup.sh git commit -m "v1.0 基础备份功能"
七、安全与维护建议
-
敏感信息处理
- 使用
.env文件存储API密钥 - 在脚本开头设置环境变量:
export API_KEY="your_key_here"
- 使用
-
脚本监控机制
# 在脚本末尾添加监控 watch -n 5 'echo "脚本运行状态:$(ps -ef | grep脚本名 | wc -l)"' -
定期维护检查
#!/bin/bash # 检查脚本执行记录 tail -f /var/log/脚本执行日志.log | grep "ERROR"
验证脚本依赖项
command -v tar &> /dev/null || echo "警告:未安装tar工具!"
总结要点:
1. 熟练掌握`#!/bin/bash`语法规范
2. 掌握文件操作(`cp`, `mv`, `rm`)和压缩工具(`tar`, `zip`)
3. 条件判断与循环结构是核心逻辑
4. 实际应用需结合定时任务和日志记录
5. 建议使用`shebang`确保兼容性
实用建议:
1. 从5行脚本的自动化备份开始实践
2. 每次修改后使用`bash -x 脚本名`调试执行过程
3. 重要脚本创建备份机制(如自动存档到Git仓库)
4. 定期更新`apt`包(WSL环境下)保持工具最新
掌握Bash脚本后,可拓展学习Shell函数、正则表达式和Shell编程模式(如管道、重定向)。建议先掌握50个常用命令,再通过实践项目(如搭建自动化部署系统)深化理解,最终实现从手动操作到智能运维的跨越。 
