【发布时间】:2020-07-24 13:20:55
【问题描述】:
我正在编写电池通知脚本。
抱歉,目前这是零碎的调试代码。
这是我到目前为止的代码......
#!/bin/bash
BatteryCapacity=`cat /sys/class/power_supply/BAT0/capacity`
BatteryStatus=`cat /sys/class/power_supply/BAT0/status`
BatteryFull="Full"
BatteryDischarging="Discharging"
BatteryCharging="Charging"
CriticalAlert=97
NormalAlert=96
LowAlert=95
i=0
while true
do
if [ "$BatteryStatus" = "$BatteryDischarging" ]; then
if [ $BatteryCapacity -le $CriticalAlert ]; then
notify-send -u critical "Alert" "Battery Low!!!"
echo "Success01"
sleep 10
else
if [ "A" = "A" ]; then
echo "Success02"
sleep 10
fi
fi
fi
done
当$BatteryStatus = Discharging (Discharging = Discharging) 且$BatteryCapacity = $CriticalAlert(我在调试此程序时更改此值以匹配实际电池容量)程序将成功满足第一组条件并回显“Success01” .
+ '[' Discharging = Discharging ']'
+ '[' 97 -le 97 ']'
+ notify-send -u critical Alert 'Battery Low!!!'
+ echo 'Success 001'
Success 001
+ sleep 10
但是如果我的 $BatteryStatus 不等于 Discharging 并且是 Charging 或 Full 程序将卡在...
+ '[' Charging = Discharging ']'
+ true
+ '[' Charging = Discharging ']'
+ true
+ '[' Charging = Discharging ']'
+ true
+ '[' Charging = Discharging ']'
+ true
...
我很困惑为什么程序会卡在+ '[' Charging = Discharging ']' + true 循环中,而不是转到 else 条件。
我使用bash -x SCRIPT.sh 进行调试输出。
我尝试过在线搜索,但找不到任何可以告诉我我可能做错了什么的东西。
这里有一个link 到更健全的电池通知脚本第 2 版,以便为我正在做的事情提供一些背景信息。
有人愿意解释一下吗?
提前致谢!
【问题讨论】:
-
您的缩进与
if/else/fis 的实际结构不匹配。else子句与if [ $BatteryCapacity -le $CriticalAlert ]相关,而不是if [ "$BatteryStatus" = "$BatteryDischarging" ]。 -
@GordonDavisson Yeahhh 我明白我是如何与语法对抗的......我使用不同的条件组织重写了整个内容。
-
也代替反引号子shell来提取
/sys值:read -r BatteryCapacity </sys/class/power_supply/BAT0/capacity; read -r BatteryStatus </sys/class/power_supply/BAT0/status
标签: bash loops if-statement while-loop