Bash -gt: 予期しない演算子

Bash -gt: 予期しない演算子

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

関連情報