Ваш синтаксис неверен. Вы не обязательно избегаете частей своего кода, и вашему тестовому выражению нужны пространства, окружающие переменные, и числовое сравнение при использовании конструкции [
. например .:
#!/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}'`
Рассмотрим также с использованием (())
в качестве выражения проверки. например
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
...
какой дистрибутив вы используете? –
im Использование linuxmint 17.1 – Padawan