
У меня есть, 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
Если вы хотите выполнить команду 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
не присваивается постоянное значение, а вывод конвейера отправляется в stdout.