1

У меня есть checkSpace.sh который проверяет используемое пространство на диске и, если больше 80 останавливает службу

#!/bin/bash

percent=sudo df /media/usb | tail -n 1 | grep -E [[:digit:]]+% -o | grep -E [1-9]+ -o
if [ $percent -gt 80 ]; then
  sudo service motion stop
fi
echo "used space is"
echo $percent

Но когда я запускаю его с помощью sudo sh checkSpace.sh он дает мне:

1 
checkSpace.sh: 4: [: -gt: unexpected operator 
used space is

1 ответ1

0

Если вы хотите выполнить команду sudo df .... , вам нужно использовать подстановку команд. Таким образом, заменить:

percent=sudo df /media/usb | tail -n 1 | grep -E [[:digit:]]+% -o | grep -E [1-9]+ -o

С:

percent=$(sudo df /media/usb | tail -n 1 | grep -E [[:digit:]]+% -o | grep -E [1-9]+ -o)

Что пошло не так

percent=sudo df /media/usb | tail -n 1 | grep -E [[:digit:]]+% -o | grep -E [1-9]+ -o

В приведенной выше команде для переменной оболочки percent временно устанавливается значение sudo а затем команда df /media/usb и ее выходные данные отправляются в команду tail . percent не имеют постоянного значения и выходные данные конвейера отправляются на стандартный вывод.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .