0

pdb で 2 つのアトム間の距離を見つけるスクリプトがあります。

bash は小数を認識しないため、printf スクリプトを使用して小数を四捨五入しました。

echo $b は正常に機能し、整数値が得られます。

しかし、フィルタリング システムの if 行が機能しません。

エラーが表示されます

 [: -ge: unary operator expected

以下は、私が取り組んでいるスクリプトの一部です。

 a=$(awk '$2=='91'{x1=$6;y1=$7;z1=$8} $2=='180' {x2=$6;y2=$7;z2=$8} END{print sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2))}' ${names}.pdb.$i)
b= printf %.0f $a
echo $b
if [ $b -ge 1 ] &&[ $b -le 9 ]; then

どんな助けでも大歓迎です。よろしくお願いします。

4

1 に答える 1

1
b= printf %.0f $a

この行は、b出力を stdout に送信する printf コマンドの間、値を何も設定しません。

echo $b

これにより、空白行が出力されます。

割り当ての前後に空白を入れてはなりません=。また、コマンドの出力を変数に格納するには、次の構文を使用します。

b=$( printf %.0f $a )

が空であるため、エラーが発生しています。$bこれが bashの表示です。

if [  -ge 1 ] &&[  -le 9 ]; then

-ge左と右の両方にオペランドがあることを期待していますが、オペランドが見つかりません。

bash では、(ほぼ) 常に優先する必要があり[[ ... ]]ます[ ... ]。二重括弧形式は、空の文字列を含む変数にだまされません。

"$variables"引用してはいけない場合を正確に知っている場合を除き、常に -- を引用する必要があります。

于 2014-02-07T01:21:44.257 に答える