插件窝 干货文章 109个实用 Shell 脚本实例,代码清晰拿来就能用!

109个实用 Shell 脚本实例,代码清晰拿来就能用!

echo bash file 文件 370    来源:    2025-04-13

109个实用Shell脚本实例

以下是一系列实用的Shell脚本实例,涵盖了系统管理、文件处理、文本处理、网络操作等多个方面。这些脚本代码清晰,可以直接使用或根据需求修改。

系统管理类

1. 系统信息收集脚本

#!/bin/bash
# 获取系统信息

echo "===== 系统信息 ====="
echo "主机名: $(hostname)"
echo "操作系统: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)"
echo "内核版本: $(uname -r)"
echo "CPU信息: $(lscpu | grep 'Model name' | cut -d':' -f2 | sed -e 's/^[ \t]*//')"
echo "内存总量: $(free -h | grep Mem | awk '{print $2}')"
echo "当前时间: $(date)"
echo "系统运行时间: $(uptime -p)"

2. 磁盘空间监控脚本

#!/bin/bash
# 监控磁盘空间,超过阈值发送警告

THRESHOLD=90
EMAIL="admin@example.com"

for disk in $(df -h | grep '^/dev' | awk '{print $1}'); do
    usage=$(df -h | grep $disk | awk '{print $5}' | tr -d '%')
    if [ $usage -gt $THRESHOLD ]; then
        echo "警告: 磁盘 $disk 使用率 $usage% 超过阈值 $THRESHOLD%" | mail -s "磁盘空间警报" $EMAIL
    fi
done

3. 进程监控脚本

#!/bin/bash
# 监控指定进程是否运行

PROCESS="nginx"
if pgrep -x "$PROCESS" >/dev/null; then
    echo "$PROCESS 正在运行"
else
    echo "$PROCESS 未运行,尝试启动..."
    systemctl start $PROCESS
fi

文件处理类

4. 批量重命名文件

#!/bin/bash
# 批量将.txt后缀改为.md

for file in *.txt; do
    mv "$file" "${file%.txt}.md"
    echo "已重命名: $file -> ${file%.txt}.md"
done

5. 查找并删除空文件

#!/bin/bash
# 查找并删除当前目录及子目录中的空文件

find . -type f -empty -print -delete

6. 文件备份脚本

#!/bin/bash
# 备份指定目录到带时间戳的压缩包

BACKUP_DIR="/var/www/html"
DEST_DIR="/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)

tar -czf $DEST_DIR/backup_$TIMESTAMP.tar.gz $BACKUP_DIR
echo "备份完成: $DEST_DIR/backup_$TIMESTAMP.tar.gz"

文本处理类

7. 日志文件分析

#!/bin/bash
# 分析Nginx访问日志,统计访问量前10的IP

LOG_FILE="/var/log/nginx/access.log"

echo "访问量前10的IP:"
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr | head -10

8. CSV文件处理

#!/bin/bash
# 处理CSV文件,提取特定列并计算平均值

INPUT="data.csv"
COLUMN=3  # 假设要处理第3列

awk -F',' -v col=$COLUMN 'NR>1 {sum+=$col; count++} END {print "平均值: " sum/count}' $INPUT

9. 批量替换文件内容

#!/bin/bash
# 批量替换多个文件中的字符串

OLD_STRING="旧文本"
NEW_STRING="新文本"
FILES="*.txt"

for file in $FILES; do
    sed -i "s/$OLD_STRING/$NEW_STRING/g" $file
    echo "已处理: $file"
done

网络操作类

10. 检查网站可用性

#!/bin/bash
# 检查网站是否可访问

URL="https://example.com"
STATUS=$(curl -o /dev/null -s -w "%{http_code}\n" $URL)

if [ $STATUS -eq 200 ]; then
    echo "$URL 可访问 (HTTP $STATUS)"
else
    echo "$URL 不可访问 (HTTP $STATUS)"
fi

11. 批量Ping测试

#!/bin/bash
# 批量Ping测试一组IP地址

IP_LIST="8.8.8.8 1.1.1.1 192.168.1.1"

for ip in $IP_LIST; do
    if ping -c 1 $ip &> /dev/null; then
        echo "$ip 可达"
    else
        echo "$ip 不可达"
    fi
done

12. 端口扫描脚本

#!/bin/bash
# 简单的端口扫描工具

HOST="example.com"
PORTS="80 443 22 21 3306"

for port in $PORTS; do
    timeout 1 bash -c "echo >/dev/tcp/$HOST/$port" 2>/dev/null && \
    echo "端口 $port 开放" || \
    echo "端口 $port 关闭"
done

实用工具类

13. 密码生成器

#!/bin/bash
# 生成随机密码

LENGTH=12
PASSWORD=$(tr -dc 'A-Za-z0-9!@#$%^&*()' < /dev/urandom | head -c $LENGTH)
echo "生成密码: $PASSWORD"

14. 文件下载校验

#!/bin/bash
# 下载文件并校验MD5

URL="http://example.com/file.zip"
MD5="expected_md5_sum"
FILE="file.zip"

wget $URL -O $FILE
ACTUAL_MD5=$(md5sum $FILE | awk '{print $1}')

if [ "$ACTUAL_MD5" == "$MD5" ]; then
    echo "文件校验成功"
else
    echo "文件校验失败"
    rm -f $FILE
fi

15. 定时任务管理

#!/bin/bash
# 添加每日备份定时任务

CRON_JOB="0 2 * * * /path/to/backup_script.sh"
(crontab -l 2>/dev/null; echo "$CRON_JOB") | crontab -
echo "定时任务已添加"

其他实用脚本

16. 批量创建用户

#!/bin/bash
# 批量创建用户并设置随机密码

USER_LIST="user1 user2 user3"
GROUP="developers"

groupadd $GROUP 2>/dev/null

for user in $USER_LIST; do
    useradd -m -G $GROUP $user
    PASSWORD=$(date +%s | sha256sum | base64 | head -c 12)
    echo "$user:$PASSWORD" | chpasswd
    echo "用户 $user 创建成功,密码: $PASSWORD"
done

17. 系统资源使用报告

#!/bin/bash
# 生成系统资源使用报告

REPORT_FILE="/tmp/system_report_$(date +%Y%m%d).txt"

{
    echo "===== 系统资源报告 $(date) ====="
    echo ""
    echo "---- 内存使用 ----"
    free -h
    echo ""
    echo "---- 磁盘使用 ----"
    df -h
    echo ""
    echo "---- CPU使用率 ----"
    top -bn1 | grep "Cpu(s)"
    echo ""
    echo "---- 运行进程数 ----"
    ps -e | wc -l
} > $REPORT_FILE

echo "报告已生成: $REPORT_FILE"

18. 文件权限修复

#!/bin/bash
# 修复指定目录的文件权限

DIR="/var/www/html"
USER="www-data"
GROUP="www-data"

find $DIR -type d -exec chmod 755 {} \;
find $DIR -type f -exec chmod 644 {} \;
chown -R $USER:$GROUP $DIR
echo "权限已修复"

19. 日志文件轮转

#!/bin/bash
# 简单的日志轮转脚本

LOG_FILE="/var/log/myapp.log"
MAX_SIZE="10M"
BACKUP_COUNT=5

if [ $(stat -c %s "$LOG_FILE" 2>/dev/null || echo 0) -gt $(numfmt --from=iec "$MAX_SIZE") ]; then
    for i in $(seq $BACKUP_COUNT -1 2); do
        [ -f "$LOG_FILE.$((i-1))" ] && mv "$LOG_FILE.$((i-1))" "$LOG_FILE.$i"
    done
    mv "$LOG_FILE" "$LOG_FILE.1"
    touch "$LOG_FILE"
    echo "日志已轮转"
fi

20. 批量图片转换

#!/bin/bash
# 批量将JPG图片转换为PNG格式

for img in *.jpg; do
    convert "$img" "${img%.jpg}.png"
    echo "已转换: $img -> ${img%.jpg}.png"
done

这些脚本涵盖了Linux系统管理中的常见任务,您可以根据实际需求进行修改和扩展。使用前请确保您理解脚本的功能,并在测试环境中验证后再在生产环境中使用。