エラー[:-lt:シェルスクリプトLinuxに単項演算子が必要です[閉じる]

エラー[:-lt:シェルスクリプトLinuxに単項演算子が必要です[閉じる]

エラーが発生しました。 [: -lt: 単項演算子が必要です。以下のスクリプトを実行した後にアイデアを共有できる人はいますか?

temp=0
while [ $temp -lt 25 ]
do
    sleep 1
        echo "running.."

   if [ $temp -eq 5 ]
   then
         top -bc -d 5 -n 1|sed -n '7,8p'|awk '{print $1,$9}'>>out.txt
         temp=`expr $temp +1`
         break
   elif [ $temp -eq 20 ]
   then
         top -bc -d 5 -n 1|sed -n '7,8p'|awk '{print $1,$9}'>>out.txt
         temp=`expr $temp +1`
   else
    temp=`expr $temp +1`
   fi
done

ベストアンサー1

+1sの後ろのすべてをsに変更してみてください。expr+ 1

空白がないとexprエラーが返され、$temp空になります。$temp空の場合、空白-ltは数値と比較されるため、エラーが発生します。以下は、問題を再現する1行のコードです。

t=0;t=`expr $t +1`;[ $t -lt 25 ]

出力(STDERRへ):

expr: syntax error
bash: [: -lt: unary operator expected

より良いことは、外部ユーティリティを使用するすべてのコードをexprシェル自体の内部算術拡張を使用するように変更することです。したがって、コードは次のようになります。

temp=`expr $temp +1`

...次に変更する必要があります。

temp=$(($temp + 1))

または、存在するbash、行全体を次に置き換えることができます。

((temp++))

おすすめ記事