2015-08-08 4 views
0

Я хочу выключить ПК и скопировать некоторые файлы до того, как батарея разрядится.Отключите ПК и сделайте что-нибудь раньше с 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 

Но его не работает!

+0

какой дистрибутив вы используете? –

+0

im Использование linuxmint 17.1 – Padawan

ответ

0

Ваш синтаксис неверен. Вы не обязательно избегаете частей своего кода, и вашему тестовому выражению нужны пространства, окружающие переменные, и числовое сравнение при использовании конструкции [. например .:

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

 Смежные вопросы

  • Нет связанных вопросов^_^