一、Shell 基础变量、if、for 详细讲解1. Shell 变量变量就是给一段数据起个名字方便后面反复用。1.1 定义变量格式变量名 值⚠️ 注意等号两边不能有空格namezhangsan age201.2 使用变量用$变量名或${变量名}echo $name echo My name is $name echo Age is ${age}岁1.3 命令结果存入变量非常常用用$(命令)now$(date %Y-%m-%d %H:%M:%S) echo 当前时间$now1.4 脚本参数变量执行脚本时传参./test.sh a b c$0 # 脚本本身名字 $1 # 第一个参数 $2 # 第二个参数 $# # 参数个数 $* # 所有参数1.5 常用系统变量$HOME # 家目录 $PWD # 当前目录 $PATH # 命令搜索路径 $$ # 当前进程ID2. if 判断核心Shell 中 if 语法固定格式if [ 条件 ]; then 命令1 elif [ 条件 ]; then 命令2 else 命令3 fi⚠️ 注意[后面必须有空格]前面必须有空格结尾必须是fi2.1 文件 / 目录判断备份脚本必用-e file # 文件或目录是否存在 -f file # 是否是普通文件 -d file # 是否是目录 -s file # 文件大小是否大于0非空示例if [ -d /backup ]; then echo 备份目录已存在 else mkdir /backup fi2.2 数字比较-eq 等于 -ne 不等于 -gt 大于 -lt 小于 -ge 大于等于 -le 小于等于示例a10 if [ $a -gt 5 ]; then echo a大于5 fi2.3 字符串比较 相等 ! 不相等 -z 字符串为空strhello if [ $str hello ]; then echo 匹配成功 fi2.4 多条件if [ 条件1 ] [ 条件2 ]; then # 并且 if [ 条件1 ] || [ 条件2 ]; then # 或者3. for 循环用来重复执行命令。3.1 遍历列表for i in 1 2 3 4 5; do echo 数字$i done3.2 遍历文件for file in *.log; do echo 处理文件$file done3.3 数字循环C 语言风格for ((i1; i10; i)); do echo $i done二、文件备份脚本完整 详细注释功能备份指定目录自动按日期命名自动创建备份目录记录日志backup.sh#!/bin/bash # 配置区 # 要备份的目录 SRC_DIR/home/test # 备份存放目录 BAK_DIR/backup # 备份文件名日期 BAK_NAMEbackup_$(date %Y%m%d_%H%M%S).tar.gz # 日志文件 LOG_FILE/backup/backup.log # # 判断备份目录是否存在不存在则创建 if [ ! -d $BAK_DIR ]; then mkdir -p $BAK_DIR echo $(date) 创建备份目录 $BAK_DIR $LOG_FILE fi # 判断源目录是否存在 if [ ! -d $SRC_DIR ]; then echo $(date) 错误源目录 $SRC_DIR 不存在 $LOG_FILE exit 1 fi # 开始备份 echo $(date) 开始备份 $SRC_DIR → $BAK_DIR/$BAK_NAME $LOG_FILE tar -zcvf $BAK_DIR/$BAK_NAME $SRC_DIR /dev/null 21 # 判断备份是否成功 if [ $? -eq 0 ]; then echo $(date) 备份成功 $LOG_FILE else echo $(date) 备份失败 $LOG_FILE fi使用方法chmod x backup.sh ./backup.sh三、系统 CPU / 内存监控脚本完整详细功能获取 CPU 使用率获取内存使用率超过阈值输出警告输出日志monitor.sh#!/bin/bash # 阈值配置 CPU_MAX80 # CPU超过80%报警 MEM_MAX85 # 内存超过85%报警 LOG_FILE/var/log/monitor.log # # 获取CPU空闲率计算使用率 CPU_IDLE$(top -bn1 | grep Cpu | awk {print $8}) CPU_USAGE$(echo 100 - $CPU_IDLE | bc) # 获取内存使用率 MEM_USAGE$(free | grep Mem | awk {print $3/$2 * 100}) # 记录时间 echo $(date) $LOG_FILE echo CPU使用率${CPU_USAGE}% $LOG_FILE echo 内存使用率${MEM_USAGE}% $LOG_FILE # CPU报警 if (( $(echo $CPU_USAGE $CPU_MAX | bc -l) )); then echo 警告CPU使用率过高${CPU_USAGE}% $LOG_FILE fi # 内存报警 if (( $(echo $MEM_USAGE $MEM_MAX | bc -l) )); then echo 警告内存使用率过高${MEM_USAGE}% $LOG_FILE fi echo $LOG_FILE使用方法chmod x monitor.sh ./monitor.sh