当前位置: 首页 > news >正文

关于shell的简单用法

一、Shell 基础:变量、if、for 详细讲解

1. Shell 变量

变量就是给一段数据起个名字,方便后面反复用。

1.1 定义变量

格式:变量名 = 值⚠️ 注意:等号两边不能有空格

name="zhangsan" age=20

1.2 使用变量

$变量名${变量名}

echo $name echo "My name is $name" echo "Age is ${age}岁"

1.3 命令结果存入变量(非常常用)

$(命令)

now=$(date +"%Y-%m-%d %H:%M:%S") echo "当前时间:$now"

1.4 脚本参数变量

执行脚本时传参:./test.sh a b c

$0 # 脚本本身名字 $1 # 第一个参数 $2 # 第二个参数 $# # 参数个数 $* # 所有参数

1.5 常用系统变量

$HOME # 家目录 $PWD # 当前目录 $PATH # 命令搜索路径 $$ # 当前进程ID

2. if 判断(核心)

Shell 中 if 语法固定格式:

if [ 条件 ]; then 命令1 elif [ 条件 ]; then 命令2 else 命令3 fi

⚠️ 注意:

  • [后面必须有空格
  • ]前面必须有空格
  • 结尾必须是fi

2.1 文件 / 目录判断(备份脚本必用)

-e file # 文件或目录是否存在 -f file # 是否是普通文件 -d file # 是否是目录 -s file # 文件大小是否大于0(非空)

示例:

if [ -d /backup ]; then echo "备份目录已存在" else mkdir /backup fi

2.2 数字比较

-eq 等于 -ne 不等于 -gt 大于 -lt 小于 -ge 大于等于 -le 小于等于

示例:

a=10 if [ $a -gt 5 ]; then echo "a大于5" fi

2.3 字符串比较

= 相等 != 不相等 -z 字符串为空
str="hello" if [ "$str" = "hello" ]; then echo "匹配成功" fi

2.4 多条件

if [ 条件1 ] && [ 条件2 ]; then # 并且 if [ 条件1 ] || [ 条件2 ]; then # 或者

3. for 循环

用来重复执行命令。

3.1 遍历列表

for i in 1 2 3 4 5; do echo "数字:$i" done

3.2 遍历文件

for file in *.log; do echo "处理文件:$file" done

3.3 数字循环(C 语言风格)

for ((i=1; i<=10; i++)); do echo $i done

二、文件备份脚本(完整 + 详细注释)

功能:

  • 备份指定目录
  • 自动按日期命名
  • 自动创建备份目录
  • 记录日志

backup.sh

#!/bin/bash # ==================== 配置区 ==================== # 要备份的目录 SRC_DIR="/home/test" # 备份存放目录 BAK_DIR="/backup" # 备份文件名(日期) BAK_NAME="backup_$(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 2>&1 # 判断备份是否成功 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_MAX=80 # CPU超过80%报警 MEM_MAX=85 # 内存超过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
http://www.cnnetsun.cn/news/2006457.html

相关文章:

  • 绿激光3D打印散热器如何帮助机器人更加“从容冷静”的奔跑?
  • 用Gemini 3.1搞科研!你会发现这辈子有了
  • Phi-3.5-mini-instruct轻量推理优势:在低功耗GPU上实现<500ms首token延迟
  • 郭老师-人脉的本质:你强,世界才温柔
  • WooCommerce 多域名外链商品的动态联盟参数注入教程
  • 第8天 合并两个有序数组
  • 10年老兵带你学Java(第5课):接口与抽象类 - 抽象与契约
  • 类设计--友元+静态成员+对象之间的关系
  • 前端基础:form和input用法详解
  • Linux内核SCSI错误处理实战:当你的硬盘IO卡住或报错时,内核到底做了什么?
  • 万象视界灵坛实战教程:将语义解析结果接入Elasticsearch构建视觉搜索系统
  • Educational Codeforces Round 120 (Rated for Div. 2) vp补题
  • Phi-3.5-mini-instruct步骤详解:从model path配置到Gradio端口映射
  • 无人机送货时如何‘看’得更远?聊聊MPC里的预测时域K和采样时间dt怎么调
  • 别再被公式吓跑!用大白话和Python代码图解GAMP算法的核心思想
  • 别再对着屏幕列表发愁了!手把手教你根据手头的OLED屏型号,快速找到正确的U8g2构造器
  • 别再暴力搜索了!用‘可行性剪枝’5分钟搞定洛谷P1025数的划分
  • 智能车电磁循迹:从吴恩达的机器学习课到我的小车,聊聊归一化为什么比差比和更香
  • **WebAssembly实战进阶:用Rust构建高性能前端模块并集成到React应用中**在现代Web开发中,
  • 告别枯燥理论!用Proteus 8.15 + 51汇编亲手“点亮”硬件:数码管、按键、LED全搞定
  • 从电平转换到总线仲裁:UART、RS232与RS485的硬件差异如何重塑软件编程思维
  • Android13 Activity启动流程深度解析:从进程间通信到窗口树构建
  • 从电位器到内部温度传感器:一个STM32 ADC多通道采集的完整项目实战(含代码与波形分析)
  • 【效率革命】18款免费3dMAX插件与脚本,解锁你的创意生产力
  • 【Qwen3.5 系列技术解析】:2026 年原生多模态旗舰模型全景报告
  • 告别Command Not Found:手把手教你配置Mac上的zsh与Oh My Zsh(含Homebrew、zsh-autosuggestions插件安装)
  • 保姆级教程:在Ubuntu 20.04上搞定Velodyne VLP-16雷达的ROS驱动与Rviz可视化(含网络配置避坑)
  • 武汉大学计算机复试通关指南:从机考到面试的实战策略
  • TypeScript的NonNullable《T》工具类型的实现原理
  • RWKV-7 (1.5B World)多场景落地:教育问答、跨境客服、内容创作三合一