文章目录
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="[email protected]"
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="[email protected]"
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
确保在使用这些脚本之前,你已经仔细阅读并理解了脚本的内容,必要时进行适当的修改以适应你的环境。此外,对于敏感操作(如创建用户或修改数据库),确保在安全的环境中测试脚本。
让我们创建一个综合性的脚本,它结合了前面提到的一些功能,例如文件备份、错误处理、日志记录和邮件通知。
综合案例:自动备份重要文件并发送邮件通知
这个脚本将会备份指定目录下的文件到另一个位置,并通过邮件发送备份状态的通知。如果备份过程中出现任何问题,它还会记录错误日志。
脚本说明:
- 备份源目录 和 目标目录 需要提前定义好。
- 邮件配置 包括发件人邮箱、收件人邮箱和SMTP服务器信息。
- 日志文件 将记录备份过程中的所有输出。
- 错误处理 确保即使部分备份失败,脚本也能继续运行其他部分。
脚本代码:
#!/bin/bash
# 配置
SOURCE_DIR="/path/to/source"
BACKUP_DIR="/path/to/backup"
LOG_FILE="/var/log/backup.log"
EMAIL="[email protected]"
SMTP_SERVER="smtp.example.com"
FROM_EMAIL="[email protected]"
# 日期用于备份文件夹
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."
使用说明:
- 编辑脚本:替换
/path/to/source
、/path/to/backup
、[email protected]
、smtp.example.com
和[email protected]
为实际的路径和邮箱地址。 - 权限:确保脚本具有执行权限,例如使用
chmod +x backup_script.sh
。 - 运行脚本:直接运行脚本,例如
./backup_script.sh
。
注意事项:
- 确保SMTP服务器支持无身份验证或已正确配置了身份验证。
- 如果需要加密邮件传输,请考虑使用
openssl s_client
或其他方法。 - 根据实际情况调整日志级别和详细程度。
这个脚本是一个较为完整的示例,包含了备份、错误处理、日志记录以及邮件通知的功能。你可以根据自己的需求进一步扩展和定制它。