
ディスクの使用済み領域をチェックし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 に送信されます。