
Ich habe ein checkSpace.sh
Programm, das den belegten Speicherplatz auf einer Festplatte überprüft und wenn dieser größer als 80 ist, einen Dienst stoppt
#!/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
Aber wenn ich es ausführe, sudo sh checkSpace.sh
erhalte ich Folgendes:
1
checkSpace.sh: 4: [: -gt: unexpected operator
used space is
Antwort1
Wenn Sie den Befehl ausführen möchten sudo df ....
, müssen Sie verwendenBefehlsersetzung. Ersetzen Sie daher:
percent=sudo df /media/usb | tail -n 1 | grep -E [[:digit:]]+% -o | grep -E [1-9]+ -o
Mit:
percent=$(sudo df /media/usb | tail -n 1 | grep -E [[:digit:]]+% -o | grep -E [1-9]+ -o)
Was schief gelaufen ist
percent=sudo df /media/usb | tail -n 1 | grep -E [[:digit:]]+% -o | grep -E [1-9]+ -o
Im obigen Befehl percent
wird die Shell-Variable vorübergehend auf den Wert gesetzt sudo
und dann der Befehl df /media/usb
und seine Ausgabe an den Befehl gesendet tail
. percent
Es wird kein permanenter Wert zugewiesen und die Ausgabe der Pipeline wird an stdout gesendet.