🐚 Linux Shell 脚本基础
1️⃣ 什么是 Shell 脚本
- Shell:Linux 下的命令解释器(常见 bash、sh、zsh)
- Shell 脚本:由一系列命令组成的文本文件,用来自动化任务
- 文件扩展名:通常
.sh
2️⃣ 创建和运行 Shell 脚本
1. 创建文件
chmod +x script.sh # 添加可执行权限 |
|---|
2. 编写脚本示例
echo "Hello, Linux Shell!" |
|---|
#!/bin/bash:指定脚本使用 bash 解释器
echo:输出文本
3. 运行脚本
3️⃣ 变量
echo "姓名: $name, 年龄: $age" |
|---|
4️⃣ 读取用户输入
read -p "请输入你的名字: " username |
|---|
5️⃣ 条件判断
if 语句
| 符号 | 含义 |
|---|
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于等于 |
-le | 小于等于 |
case 语句
6️⃣ 循环
for 循环
for i in {1..5}; do echo $i; done |
|---|
while 循环
7️⃣ 函数
8️⃣ 文件和目录操作
echo "Hello" > test_dir/file.txt |
|---|
echo "World" >> test_dir/file.txt |
|---|
9️⃣ 脚本调试
bash -x script.sh # 显示每条命令执行过程 |
|---|
10️⃣ 综合示例:备份脚本
DEST="/backup/home_backup_$(date +%F).tar.gz" |
|---|
👌 好的,阿杰,我帮你整理一个 Linux 高级 Shell 脚本示例集,涵盖自动化部署、日志分析、文件批量处理、条件报警,以及循环和函数的综合应用。
🐚 Linux 高级 Shell 脚本示例集
1️⃣ 自动化部署示例
功能:自动拉取 Git 仓库代码并重启服务
GIT_REPO="git@github.com:username/myapp.git" |
|---|
SERVICE_NAME="myapp.service" |
|---|
| cd $APP_DIR || exit |
| ----------------------- |
git reset --hard origin/main |
|---|
sudo systemctl restart $SERVICE_NAME |
|---|
- 用途:自动更新应用代码并重启服务
- 结合 cron,可定时自动部署
2️⃣ 日志分析示例
功能:统计 Apache 日志中 404 错误访问次数
LOG_FILE="/var/log/apache2/access.log" |
|---|
| ERROR_COUNT=$(grep " 404 " $LOG_FILE | wc -l) |
| ------------------------------------------------ |
echo "当前 404 错误次数: $ERROR_COUNT" |
|---|
| grep " 404 " $LOG_FILE | awk '{print $7}' | sort | uniq -c | sort -nr | head -5 |
| -------------------------------------------------------------------------------------- |
- 用途:快速定位网站错误
- 可结合 crontab 自动每日统计
3️⃣ 文件批量处理示例
功能:批量重命名目录下所有 .txt 文件
DIR="/home/username/docs" |
|---|
for FILE in $DIR/*.txt; do |
|---|
``BASENAME=$(basename "$FILE") |
|---|
``mv "$FILE" "$DIR/file_$COUNTER.txt" |
|---|
- 用途:整理大量文件
- 结合正则表达式,可处理复杂命名规则
4️⃣ 条件报警示例
功能:监控磁盘使用率,超过阈值发送邮件
| USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//') |
| ------------------------------------------------------------- |
if [ "$USAGE" -gt "$THRESHOLD" ]; then |
|---|
| ``echo "磁盘使用率警告: $USAGE%" | mail -s "Disk Alert" $MAIL |
| ------------------------------------------------------------- |
5️⃣ 循环与函数综合应用示例
功能:批量检查服务状态,并自动重启未运行服务
SERVICES=("nginx" "mysql" "redis") |
|---|
``systemctl is-active --quiet $svc |
|---|
``echo "$svc 未运行,正在重启..." |
|---|
``sudo systemctl restart $svc |
|---|
for svc in "${SERVICES[@]}"; do |
|---|
- 用途:服务器运维自动化
- 使用函数封装逻辑,循环遍历服务
6️⃣ 综合示例:自动备份 + 日志记录 + 邮件通知
SRC="/home/username/data" |
|---|
DEST="/backup/data_$(date +%F).tar.gz" |
|---|
LOG="/var/log/backup.log" |
|---|
``echo "$(date) - 备份成功: $DEST" >> $LOG |
|---|
| ``echo "备份成功: $DEST" | mail -s "Backup Success" $MAIL |
| ------------------------------------------------------------ |
``echo "$(date) - 备份失败" >> $LOG |
|---|
| ``echo "备份失败" | mail -s "Backup Failed" $MAIL |
| ---------------------------------------------------- |
- 自动压缩数据目录
- 日志记录备份状态
- 邮件通知管理员
✅ 总结
这个高级脚本集展示了:
- 自动化部署、日志分析、文件批量处理、条件报警
- 循环、条件判断和函数综合应用
- 可以与 cron 作业 配合,实现定时任务
- 适合 服务器运维、系统管理、自动化运维脚本
www.52runoob.com/archives/68…