Bash -gt: nieoczekiwany operator

1

Mam checkSpace.shsprawdzanie zajętego miejsca na dysku i jeśli jest większe niż 80, zatrzymuje usługę

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

Ale kiedy go uruchomię sudo sh checkSpace.sh, daje mi:

1 
checkSpace.sh: 4: [: -gt: unexpected operator 
used space is
Blitzkr1eg
źródło
Czy naprawdę musisz sudouruchomić dfpolecenie? W systemach, z których korzystałem, dfdziała dobrze jak zwykły użytkownik.
John1024
Świetnym poleceniem debugowania jest zestaw -x. set + x wyłącza to. Zobaczysz, na co przekłada się procent procentowy.
Robert Jacobs
@ John1024 prosi o zezwolenie na uruchomienie napędu sudo. Nie wiem, czy i jak można to zmienić, aby nie wymagało sudo; Dzięki Robert.
Blitzkr1eg

Odpowiedzi:

0

Jeśli chcesz uruchomić polecenie sudo df ...., musisz użyć podstawienia polecenia . Zastąp zatem:

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

Z:

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

Co poszło nie tak

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

W powyższym poleceniu zmienna powłoki percentjest tymczasowo ustawiona na wartość, sudoa następnie polecenie df /media/usbi jego dane wyjściowe są wysyłane do tailpolecenia. percentnie otrzymuje stałej wartości, a dane wyjściowe potoku są wysyłane do standardowego wyjścia.

John1024
źródło