从实列中学习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) )); then
        return 0  # 负载过高
      else
        return 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 ]]; then
    send_alert_email "$cpu_load"
    echo "已发送警报邮件!"
  else
    echo "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 变量、函数的基本用法,并实现一个实用的监控脚本!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一刀到底211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值