#!/bin/bash
# 设置GPIO15、GPIO12和GPIO18为输出
echo 15 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio15/direction
echo 12 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio12/direction
echo 18 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio18/direction
while true; do
# 读取CPU利用率、内存利用率和温度
cpu_usage=$(top -n1 | awk '/Cpu\(s\):/ {print $2}' | cut -d'.' -f1)
mem_usage=$(free | awk '/Mem:/ {print $3/$2 * 100.0}' | cut -d'.' -f1)
temp=$(vcgencmd measure_temp | cut -d'=' -f2 | cut -d'.' -f1)
# 如果CPU利用率大于80,则打开GPIO18电源
if [ "$cpu_usage" -gt 80 ]; then
echo 1 > /sys/class/gpio/gpio18/value
else
echo 0 > /sys/class/gpio/gpio18/value
fi
# 如果内存利用率大于80,则打开GPIO12电源
if [ "$mem_usage" -gt 80 ]; then
echo 1 > /sys/class/gpio/gpio12/value
else
echo 0 > /sys/class/gpio/gpio12/value
fi
# 如果温度大于40,则打开GPIO15电源
if [ "$temp" -gt 40 ]; then
echo 1 > /sys/class/gpio/gpio15/value
else
echo 0 > /sys/class/gpio/gpio15/value
fi
sleep 1
done
# 关闭GPIO15、GPIO12和GPIO18
echo 15 > /sys/class/gpio/unexport
echo 12 > /sys/class/gpio/unexport
echo 18 > /sys/class/gpio/unexport
接下来我们来解释一下示例脚本中三行代码的原理:
cpu_usage=$(top -n1 | awk '/Cpu\(s\):/ {print $2}' | cut -d'.' -f1)
这行代码获取系统当前的CPU利用率,首先使用top -n1命令获取一次系统进程信息,然后使用管道符|将其输出传递给awk命令。awk命令用于匹配包含”Cpu(s)”的行,并提取该行的第二个字段(即CPU利用率)。最后,使用cut命令从CPU利用率中提取整数部分,以便进行比较。
mem_usage=$(free | awk '/Mem:/ {print $3/$2 * 100.0}' | cut -d'.' -f1)
这行代码获取系统当前的内存利用率,首先使用free命令获取系统内存信息,然后使用管道符|将其输出传递给awk命令。awk命令用于匹配包含”Mem:”的行,并计算已使用内存与总内存的比例,最后将其乘以100,以获取百分比形式的内存利用率。最后,使用cut命令从内存利用率中提取整数部分,以便进行比较。
temp=$(vcgencmd measure_temp | cut -d'=' -f2 | cut -d'.' -f1)
这行代码获取系统当前的CPU温度,使用vcgencmd measure_temp命令获取CPU温度信息,然后使用管道符|将其输出传递给cut命令。cut命令用于提取温度值中等号=后面的数字,然后再使用cut命令从温度值中提取整数部分,以便进行比较。
总之,这些命令可以帮助您获取有关系统资源使用情况的信息,并以可读的方式显示它们。这些信息可以用于监视系统资源使用情况并执行相应的操作。在示例脚本中,我们将获取的信息与预定义的阈值进行比较,并根据需要启用GPIO引脚以执行相应的操作。比较运算符-gt用于比较数值,-eq用于比较相等性。
需要注意的是,vcgencmd命令是特定于Raspberry Pi的命令,用于获取与Raspberry Pi硬件相关的信息。如果您在其他系统上运行脚本,则需要使用其他命令来获取相应的硬件信息。
Views: 156
