エラーが発生しました。 [: -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
+1
sの後ろのすべてを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++))