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

从实列中学习linux shell脚本2: shell 的变量 方法 命名和使用规则之类 比如拿:获取cpu 负载,以及负载超过2.0 以后就发生邮件为例子

以下是对 Linux Shell 中变量、方法(函数)、命名规则的详细说明,并结合 获取CPU负载并在负载超过2.0时发送邮件 的示例进行演示:


1. Shell 变量

命名规则
  • 命名格式:变量名由字母、数字、下划线组成,不能以数字开头
  • 大小写敏感varVAR 是两个不同的变量。
  • 避免保留字:如 if, then, else 等。
  • 推荐风格:小写下划线式(如 cpu_load)。
定义与使用
# 定义变量(等号两侧不能有空格!)
cpu_load=$(uptime | awk -F 'load average:' '{print $2}' | cut -d, -f1 | tr -d ' ')# 使用变量(用 $ 符号引用)
echo "当前CPU负载: $cpu_load"
作用域
  • 全局变量:默认情况下变量是全局的。
  • 局部变量:在函数中用 local 定义:
    function check_load() {local threshold=2.0  # 局部变量# ...
    }
    

2. Shell 方法(函数)

定义与调用
# 定义函数
send_email() {local subject="$1"  # 第一个参数local body="$2"     # 第二个参数echo "$body" | mail -s "$subject" admin@example.com
}# 调用函数
send_email "CPU警报" "CPU负载过高!当前值:$cpu_load"
返回值
  • 函数默认返回最后一条命令的退出状态(0 表示成功,非 0 表示失败)。
  • 可用 return 显式返回:
    check_load() {if (( $(echo "$1 > 2.0" | bc -l) )); thenreturn 0  # 负载过高elsereturn 1  # 负载正常fi
    }
    

3. 示例:监控CPU负载并发送邮件

完整脚本
#!/bin/bash# 定义发邮件的函数
send_alert_email() {local subject="CPU负载警报"local message="当前CPU负载为 $1,超过阈值 2.0!"echo "$message" | mail -s "$subject" admin@example.com  # 替换为你的邮箱
}# 获取当前CPU负载(1分钟内的平均值)
get_cpu_load() {local load=$(uptime | awk -F 'load average:' '{print $2}' | cut -d, -f1 | tr -d ' ')echo "$load"
}# 主逻辑
main() {local cpu_load=$(get_cpu_load)echo "当前CPU负载: $cpu_load"# 使用 bc 进行浮点数比较(因为Shell不支持直接比较浮点数)if [[ $(echo "$cpu_load > 2.0" | bc -l) -eq 1 ]]; thensend_alert_email "$cpu_load"echo "已发送警报邮件!"elseecho "CPU负载正常。"fi
}# 执行主函数
main
关键点解释
  1. 获取CPU负载

    • uptime 命令输出包含负载信息(如 load average: 0.01, 0.02, 0.00)。
    • awk 截取负载部分,cut 提取第一个值(1分钟负载)。
    • tr -d ' ' 删除空格,确保值为纯数字(如 0.01)。
  2. 浮点数比较

    • Shell 无法直接比较浮点数,需借助 bc 命令:
      echo "1.5 > 2.0" | bc -l  # 输出 0(假)或 1(真)
      
  3. 发送邮件

    • 依赖 mail 命令,需提前配置邮件服务(如安装 postfixssmtp)。
    • 测试邮件命令是否可用:
      echo "测试内容" | mail -s "测试主题" your_email@example.com
      

4. 补充知识

变量操作
  • 字符串拼接
    name="World"
    greeting="Hello, $name!"  # 输出 Hello, World!
    
  • 默认值
    echo ${undefined_var:-"默认值"}  # 如果变量未定义,使用默认值
    
条件判断
  • 数值比较
    if [ "$a" -gt "$b" ]; then  # -gt 表示大于(仅限整数)
    if [[ $(echo "$a > $b" | bc) -eq 1 ]]; then  # 浮点数比较
    
  • 字符串比较
    if [ "$str1" = "$str2" ]; then  # 判断相等
    

5. 脚本调试

  • 检查语法错误:
    bash -n script.sh
    
  • 显示执行过程:
    bash -x script.sh
    

通过以上内容,你可以掌握 Shell 变量、函数的基本用法,并实现一个实用的监控脚本!

相关文章:

  • Silvaco仿真中的victory mesh
  • 信创开发中的数据库详解:国产替代背景下的技术生态与实践指南
  • Sce2DriveX: 用于场景-到-驾驶学习的通用 MLLM 框架——论文阅读
  • 在VMware上创建Ubuntu虚拟机,与Xshell和Xftp的连接和使用
  • 指针变量存放在哪?
  • 香港科技大学广州|智能制造学域硕、博研究生招生可持续能源与环境学域博士招生宣讲会—四川大学专场!
  • Kafka 消息可靠性深度解析:大流量与小流量场景下的设计哲学
  • 计算机毕业设计--基于深度学习(U-Net与多尺度ViT)的车牌模糊图像修复算法设计与实现(含Github代码+Web端在线体验界面)
  • 62.微服务保姆教程 (五) Seata--微服务分布式事务组件
  • Samba-系统集成
  • java web 过滤器
  • 好未来golang后端开发
  • 【Linux】第十五章 调度未来任务
  • 洛谷 B3644:【模板】拓扑排序 / 家谱树 ← 邻接表
  • elementui里的el-tabs的内置样式修改失效?
  • LeetCode - 02.02.返回倒数第 k 个节点
  • 自定义指令input中前面不能输入空格
  • WPF TextBlock控件性能优化指南
  • Dali 1.1.4 | 使用尖端技术将描述转换成独特艺术品、照片和图像,发挥无限创意
  • Docker容器资源控制--CGroup
  • 小公司如何做网站隔离/国外引流推广软件
  • 网易做网站吗/百度账号怎么注册
  • 长春网站建设哪家专业/杭州优化建筑设计
  • wordpress 小工具参数/广州网站优化页面
  • 门户网站内容维护流程/刷百度指数
  • 常州网站关键词推广/网站建设费用多少钱