Linux shell脚本实战案例

news2024/12/23 16:17:29

文章目录

      • 1. 基础案例:显示系统信息
      • 2. 文件备份案例
      • 3. 自动安装软件案例
      • 4. 批量重命名文件案例
      • 5. 监控磁盘空间案例
      • 6. 定时任务案例:定期清理日志文件
      • 7. 错误处理和日志记录案例:安全地运行命令
      • 8. 备份数据库案例:定期备份MySQL数据库
      • 9. 系统监控案例:CPU和内存使用率
      • 10. 用户管理案例:创建新用户并设置密码
      • 综合案例:自动备份重要文件并发送邮件通知
        • 脚本说明:
        • 脚本代码:
      • 使用说明:
      • 注意事项:

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私信我😍

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2041265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Waterfox vG6.0.8 官方版下载及安装步骤(一款响应速度非常快的浏览器)

前言 Waterfox 水狐浏览器,从字面上我们可以轻松的了解该款浏览器的一些特点。Waterfox是通过Mozilla官方认证的纯64位版火狐浏览器,而Waterfox 10采用Firefox 10官方源码编译而成,改进了大内存和64位计算的细节,在64位Windows系…

haproxy整理

haproxy 1.1 haproxy简介 HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件 是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统…

Linux10 三剑客 正则表达式

三剑客 grep 擅长过滤,按行过滤 首先要把多个虚拟机的网络改成一种形式 爆破攻击:‌爆破攻击是一种尝试通过穷举法(即尝试所有可能的组合)来破解密码或身份验证的方法。这种攻击通常用于尝试登录到系统、网络或应用程序&#…

《系统架构设计师教程(第2版)》第14章-云原生架构设计理论与实践-04-云原生架构案例分析(二)云原生技术助力某汽车公司数字化转型实践

文章目录 1. 背景和挑战2. 基于云原生架构的解决方案3. 应用效益 1. 背景和挑战 汽车行业正迅速步入数字化时代。车企服务的对象发生变化,从购车市场转为覆盖后车市场的全周期,通过互联网渠道直面客户,服务客户急速增多。为适配客户快速变化…

【面试题】N皇后

N皇后 仅供学习 一、问题描述 n 皇后问题是一个经典的组合问题,可以通过回溯算法来解决。 二、python代码 def solve_n_queens(n):def can_place(row, col):# 检查这一行之前是否有列可以放置皇后for i in range(row):if board[i] col or abs(board[i] - col) …

【myz_tools】python库:算法与文档生成

写在前面 本来最开始只是单纯的想整理一下常用到的各类算法,还有一些辅助类的函数,方便时间短的情况下快速开发。后来发现整理成库更方便些,索性做成库,通过pip install 直接可以安装使用 关于库 平时见到的各类算法大多数还是…

抽象语法树AST

什么是AST 在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构&#xff0c…

【Linux】系列入门摘抄笔记-7-用户和用户组管理

用户分类 在Linux操作系统项用户的类型一般分为超级管理员(root)、系统用户和普通用户三类: (1)超级管理员:即root用户,在整个Linux操作系统中权限最高,权限最高也意味着风险最高,若操作失误就可能使整个系统崩溃。 (2)系统用户:默认不登录操作系统,用于运行和维…

大模型常见面试题解析【附答案版】

1、在Transformer模型中,为什么scaled dot-product attention在计算QK内积之后要除以根号d? 简单来说,就是需要压缩softmax输入值,以免输入值过大,进入了softmax的饱和区,导致梯度值太小而难以训练。如果不…

哈希以及闭散列和开散列

哈希 一、哈希1、概念2、哈希冲突 二、哈希函数1、设计原则2、常见的哈希函数(1)直接定址法(2)除留余数法(3)平方取中法(4)折叠法(5)随机数法(6&a…

期权快到期卖不出去了怎么办 ?

期权在最后交易日如果平仓卖不出去,说明没有市场参与者愿意以你的报价买入该期权。这种情况通常出现在期权价值极低,接近于0,或者期权已经深度虚值,即行权价远离当前市场价格而且剩余时间已非常有限,使得该期权的内在价…

vue选中下拉框数据,但是值没有填充到框内

​​ 下拉框选中数据后&#xff0c;roomType的值没有自动更新 查找资料后的已解决&#xff0c;特此记录。 解决办法&#xff1a; 加入强制更新时间 <el-form-item label"房型" prop"roomType"><el-select v-model"form.roomType" pla…

RAG问答系统|QAnything:多类型文本的知识库,安全可靠、一键离线部署

转自老贾探AI 在日常生活和工作中&#xff0c;我们经常面对大量本地信息资料&#xff08;如PDF、Doc等&#xff09;&#xff0c;需要进行关联理解和处理。频繁地切换和区分文件格式&#xff0c;再加上需要跨语言理解的环境&#xff0c;使得如何找到一个准确、快速、可靠地处理文…

48天笔试训练错题——day48

目录 选择题 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 编程题 1. 左右最值最大差 2. 顺时针打印矩阵 选择题 1. cookie 是浏览器存储数据的机制&#xff0c;是用于维护 http 通信当中客户端的用户信息的。 2. 403 Forbidden 表示资源不可用&#xff0c;服务器理解客户请…

前端案例:酷我音乐项目(移动端自适应)(HTML+CSS)

一个简单的移动端案例&#xff0c;模拟不同设备下逻辑分辨率不同&#xff0c;宽高自适应 正常打开整体布局 打开 f12 &#xff08;ctrl shift M&#xff09;或者点击左上角图标,将其模拟为移动端设备 在移动设备iPhone6/7/8&#xff0c;逻辑分辨率375的整体布局 头部和底部的…

虚幻5|角色武器装备的数据库学习(不只是用来装备武器,甚至是角色切换也很可能用到)

虚幻5|在连招基础上&#xff0c;给角色添加武器并添加刀光|在攻击的时候添加武器并返回背后&#xff08;第一部分&#xff0c;下一部分讲刀光&#xff09;_unreal 如何给角色添加攻击-CSDN博客 目的&#xff1a;捡起各种不同的武器&#xff0c;捡起的武器跟装备的武器相匹配 …

C语言日常练习 Day15

目录 一、猴子吃桃问题。 二、两个乒乓球队进行比赛&#xff0c;各出3个人。甲队为A&#xff0c;B&#xff0c;C3人&#xff0c;乙队为X&#xff0c;Y,Z3人。已抽签决定比赛名单。有人向队员打听比赛的名单&#xff0c;A说他不和X比赛&#xff0c;C说他不和X&#xff0c;Z比赛…

Java爬虫中的数据清洗:去除无效信息的技巧

在互联网信息爆炸的时代&#xff0c;数据的获取变得异常容易&#xff0c;但随之而来的是数据质量的问题。对于Java爬虫开发者来说&#xff0c;如何从海量的网页数据中清洗出有价值的信息&#xff0c;是一个既基础又关键的步骤。本文将介绍Java爬虫中数据清洗的重要性&#xff0…

VBA自动发邮件如何配置SMTP实现外部发送?

VBA自动发邮件的教程&#xff1f;如何利用VBA自动化发送邮件&#xff1f; 在使用VBA进行自动化办公任务时&#xff0c;自动发送邮件是一项非常实用的功能。AokSend将详细介绍如何通过VBA自动发邮件&#xff0c;并配置SMTP实现外部发送的过程。 VBA自动发邮件&#xff1a;准备…

前端开发攻略---彻底弄懂跨域解决方案

目录 1、浏览器的同源策略 1.1 源 1.2 同源与非同源 1.3 同源请求与非同源请求 2、跨域受到的限制 3、注意点 4、CORS解决Ajax跨域问题 4.1 CORS概述 4.2 CORS解决简单请求跨域 4.3 简单请求与复杂请求 4.4 CORS解决复杂请求跨域 4.5 借助CORS库快速完成配置 5、JS…