关闭 PC 并在使用 BASH 之前做一些事情
Turn off PC and do something before with BASH
我想在电池没电之前关闭电脑并复制一些文件。
#!/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
但是它不起作用!
您的语法不正确。您不必要地转义部分代码,并且在使用 [
构造时,您的测试表达式需要变量周围的空格和数字比较。例如:
#!/bin/bash
LOW=11460
BAT=`/bin/cat /proc/acpi/battery/BAT1/state | /bin/grep remaining | /usr/bin/awk '{print }'`
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 }'`
也考虑使用 (())
作为测试表达式。例如
if ((BAT < LOW))
注意:BAT
和 LOW
周围的 空格在使用 (())
测试结构时不需要,也不需要除非使用大括号扩展或数组语法,否则在 (())
内使用 $
取消引用变量。例如((${#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
或者如果您更喜欢正常的 [
测试结构:
if [ $EUID -ne 0 ]; then
...
我想在电池没电之前关闭电脑并复制一些文件。
#!/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
但是它不起作用!
您的语法不正确。您不必要地转义部分代码,并且在使用 [
构造时,您的测试表达式需要变量周围的空格和数字比较。例如:
#!/bin/bash
LOW=11460
BAT=`/bin/cat /proc/acpi/battery/BAT1/state | /bin/grep remaining | /usr/bin/awk '{print }'`
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 }'`
也考虑使用 (())
作为测试表达式。例如
if ((BAT < LOW))
注意:BAT
和 LOW
周围的 空格在使用 (())
测试结构时不需要,也不需要除非使用大括号扩展或数组语法,否则在 (())
内使用 $
取消引用变量。例如((${#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
或者如果您更喜欢正常的 [
测试结构:
if [ $EUID -ne 0 ]; then
...