我想在电池电量耗尽前关闭电脑并复制一些文件。
#!/bin/bash
LOW=11460
BAT=`/bin/cat /proc/acpi/battery/BAT1/state | /bin/grep remaining | /usr/bin/awk '{print\$3}'`
if ["$BAT" \< "$LOW"]
then
echo "Turning off"
rsync folder/ otherfolder/
shutdown -h now
fi
但它不起作用!
答案 0 :(得分:1)
您的语法不正确。您不必要地转义代码的一部分,并且在使用[
构造时,测试表达式需要围绕变量的空间和数值比较。 e.g:
#!/bin/bash
LOW=11460
BAT=`/bin/cat /proc/acpi/battery/BAT1/state | /bin/grep remaining | /usr/bin/awk '{print $3}'`
if [ "$BAT" -lt "$LOW" ]
then
echo "Turning off"
rsync folder/ otherfolder/
shutdown -h now
fi
假设/bin
和/usr/bin
都在您的路径中,我会做出以下更改:
BAT=`cat /proc/acpi/battery/BAT1/state | grep remaining | awk '{print $3}'`
还要考虑使用(())
作为测试表达式。 e.g。
if ((BAT < LOW))
注意:使用BAT
测试构造时不需要LOW
和(())
周围的空格,并且无需使用{取消引用您的变量除非使用大括号扩展或数组语法,否则$
内{1}}。例如(())
。
此外,由于您要调用需要((${#array[@]} < something))
权限才能调用root
的脚本,因此您应该在开头测试shutdown
:
root EUID
或者您更喜欢普通的if ((EUID != 0)); then
printf "error: script must be run by root, EUID: '%s' can't.\n" $EUID
exit 0
fi
测试构造:
[