Linux shell脚本实战案例


Linux Shell脚本是自动化任务和系统管理的强大工具。下面我将提供几个实用的Shell脚本案例,这些案例覆盖了从基础到稍微复杂的应用场景。

1. 基础案例:显示系统信息

这个脚本会显示一些基本的系统信息,如主机名、内核版本等。

#!/bin/bash

echo "Hostname: $(hostname)"
echo "Kernel Version: $(uname -r)"
echo "OS: $(uname -o)"

2. 文件备份案例

这个脚本会将指定目录下的文件备份到另一个位置,并以当前日期命名备份文件夹。

#!/bin/bash

SOURCE_DIR="/path/to/source"
BACKUP_DIR="/path/to/backup"

DATE=$(date +%Y%m%d)
BACKUP_TARGET="$BACKUP_DIR/$DATE"

mkdir -p "$BACKUP_TARGET"
rsync -avz --delete "$SOURCE_DIR/" "$BACKUP_TARGET"

3. 自动安装软件案例

这个脚本可以用来自动安装一个软件包(例如,Nginx),它适用于Debian或Ubuntu系统。

#!/bin/bash

sudo apt-get update
sudo apt-get install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx

4. 批量重命名文件案例

此脚本会将指定目录中的所有文件重命名为小写,并添加一个前缀。

#!/bin/bash

DIR="/path/to/directory"
PREFIX="prefix_"

for FILE in "$DIR"/*; do
    if [ -f "$FILE" ]; then
        NEW_NAME="$PREFIX${FILE##*/}"
        NEW_NAME="${NEW_NAME^^}"
        mv "$FILE" "$DIR/$NEW_NAME"
    fi
done

5. 监控磁盘空间案例

该脚本定期检查磁盘空间使用情况,并通过邮件发送警告,如果使用率超过某个阈值。

#!/bin/bash

THRESHOLD=90
MOUNT_POINT="/mnt/data"
EMAIL="admin@example.com"

usage=$(df -h "$MOUNT_POINT" | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $usage -ge $THRESHOLD ]; then
    echo "Warning: Disk usage on $MOUNT_POINT is at $usage%" | mail -s "Disk Space Alert" $EMAIL
fi

请确保在运行这些脚本之前,你已经赋予它们执行权限,例如通过 chmod +x scriptname.sh 命令。同时,根据你的具体需求调整脚本中的路径和其他参数。

下面是几个更复杂的Shell脚本案例,它们涵盖了更广泛的用途,包括错误处理、日志记录、定时任务等。

6. 定时任务案例:定期清理日志文件

这个脚本会定期压缩并删除旧的日志文件,保持日志文件的新鲜度。

#!/bin/bash

LOG_DIR="/var/log"
KEEP_DAYS=7

# 检查日志目录是否存在
if [ ! -d "$LOG_DIR" ]; then
    echo "Error: Log directory does not exist."
    exit 1
fi

# 清理日志文件
find "$LOG_DIR" -maxdepth 1 -type f -mtime +$KEEP_DAYS -exec gzip {} \;
find "$LOG_DIR" -maxdepth 1 -type f -mtime +$((KEEP_DAYS+7)) -delete

7. 错误处理和日志记录案例:安全地运行命令

这个脚本会尝试运行一个命令,并记录成功或失败的信息。

#!/bin/bash

COMMAND="your_command_here"
LOG_FILE="/var/log/command.log"

# 运行命令并捕获输出
output=$($COMMAND 2>&1)

# 检查命令是否成功
if [ $? -eq 0 ]; then
    echo "$(date): Command succeeded: $output" >> $LOG_FILE
else
    echo "$(date): Command failed: $output" >> $LOG_FILE
fi

8. 备份数据库案例:定期备份MySQL数据库

此脚本会定期备份MySQL数据库到指定的位置,并通过邮件发送通知。

#!/bin/bash

DB_USER="db_user"
DB_PASS="db_password"
DB_NAME="database_name"
BACKUP_DIR="/path/to/backup"
EMAIL="admin@example.com"

DATE=$(date +%Y%m%d-%H%M%S)
DUMP_FILE="$BACKUP_DIR/db_backup_$DATE.sql"

# 创建备份目录
mkdir -p "$BACKUP_DIR"

# 备份数据库
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $DUMP_FILE

# 检查备份文件是否存在
if [ -f "$DUMP_FILE" ]; then
    echo "Database backup created successfully." | mail -s "Database Backup" $EMAIL
else
    echo "Database backup failed." | mail -s "Database Backup Failed" $EMAIL
fi

9. 系统监控案例:CPU和内存使用率

此脚本每隔一段时间报告一次CPU和内存使用率,并记录到日志文件中。

#!/bin/bash

LOG_FILE="/var/log/system_usage.log"

while true; do
    CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}')
    MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0"%"}')

    echo "$(date): CPU Usage: $CPU_USAGE, Memory Usage: $MEM_USAGE" >> $LOG_FILE
    sleep 60
done

10. 用户管理案例:创建新用户并设置密码

此脚本会创建一个新用户,并设置密码。

#!/bin/bash

USERNAME="new_user"
PASSWORD="password123"

# 创建用户
sudo useradd -m $USERNAME
# 设置密码
echo "$USERNAME:$PASSWORD" | sudo chpasswd
# 添加到sudoers组
sudo usermod -aG sudo $USERNAME

确保在使用这些脚本之前,你已经仔细阅读并理解了脚本的内容,必要时进行适当的修改以适应你的环境。此外,对于敏感操作(如创建用户或修改数据库),确保在安全的环境中测试脚本。

让我们创建一个综合性的脚本,它结合了前面提到的一些功能,例如文件备份、错误处理、日志记录和邮件通知。

综合案例:自动备份重要文件并发送邮件通知

这个脚本将会备份指定目录下的文件到另一个位置,并通过邮件发送备份状态的通知。如果备份过程中出现任何问题,它还会记录错误日志。

脚本说明:
  1. 备份源目录目标目录 需要提前定义好。
  2. 邮件配置 包括发件人邮箱、收件人邮箱和SMTP服务器信息。
  3. 日志文件 将记录备份过程中的所有输出。
  4. 错误处理 确保即使部分备份失败,脚本也能继续运行其他部分。
脚本代码:
#!/bin/bash

# 配置
SOURCE_DIR="/path/to/source"
BACKUP_DIR="/path/to/backup"
LOG_FILE="/var/log/backup.log"
EMAIL="admin@example.com"
SMTP_SERVER="smtp.example.com"
FROM_EMAIL="backup@example.com"

# 日期用于备份文件夹
DATE=$(date +%Y%m%d-%H%M%S)
BACKUP_TARGET="$BACKUP_DIR/$DATE"

# 创建备份目录
mkdir -p "$BACKUP_TARGET"

# 日志函数
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') $@" >> "$LOG_FILE"
}

# 发送邮件函数
send_email() {
    subject="$1"
    body="$2"
    echo -e "$body" | mail -s "$subject" -S smtp="$SMTP_SERVER" -S from="$FROM_EMAIL" "$EMAIL"
}

# 备份函数
backup() {
    rsync -avz --delete "$SOURCE_DIR/" "$BACKUP_TARGET"
    if [ $? -eq 0 ]; then
        log "Backup completed successfully to $BACKUP_TARGET"
        send_email "Backup Successful" "Backup completed successfully to $BACKUP_TARGET"
    else
        log "Backup failed"
        send_email "Backup Failed" "Backup failed."
    fi
}

# 主程序
log "Starting backup process..."

# 备份
backup

log "Backup process completed."

使用说明:

  1. 编辑脚本:替换/path/to/source/path/to/backupadmin@example.comsmtp.example.combackup@example.com 为实际的路径和邮箱地址。
  2. 权限:确保脚本具有执行权限,例如使用 chmod +x backup_script.sh
  3. 运行脚本:直接运行脚本,例如 ./backup_script.sh

注意事项:

  • 确保SMTP服务器支持无身份验证或已正确配置了身份验证。
  • 如果需要加密邮件传输,请考虑使用 openssl s_client 或其他方法。
  • 根据实际情况调整日志级别和详细程度。

这个脚本是一个较为完整的示例,包含了备份、错误处理、日志记录以及邮件通知的功能。你可以根据自己的需求进一步扩展和定制它。

😍😍 海量H5小游戏、微信小游戏、Web casualgame源码😍😍
😍😍试玩地址: https://www.bojiogame.sg😍😍
😍看上哪一款,需要源码的csdn私信我😍

————————————————

​最后我们放松一下眼睛
在这里插入图片描述

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极致人生-010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值