关闭PC并使用BASH做一些事情

时间:2015-08-08 04:35:48

标签: linux bash battery

我想在电池电量耗尽前关闭电脑并复制一些文件。

#!/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

但它不起作用!

1 个答案:

答案 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 测试构造:

[