bcを使用した2つのIPアドレスの比較

bcを使用した2つのIPアドレスの比較

bc命令を使用して2つのIPアドレスを比較しようとしていますが、テストでは数字の小さいIPはキャプチャされません。

これは私のコードです。

TEST=$(echo "$i < $IP_BRD && $i > $IP_LOW " | bc -q )

TEST結果が 1 の場合、プロセスは続行され、それ以外の場合は終了します。

以下の例を確認してください。

++ echo '191.35 < 187.254 && 191.35 > 184.1 '
+ TEST=0
++ echo '191.35 < 191.254 && 191.35 > 188.1 '
++ bc -q
+ TEST2=0
++ echo '191.35 < 195.254 && 191.35 > 192.1 '
++ bc -q
+ TEST3=0
+ [[ 0 = 1 ]]
+ [[ 0 = 1 ]]
+ [[ 0 = 1 ]]

ネットワークでは、echo '191.35 < 191.254 && 191.35 > 188.1 'IP 191.35は191.254未満ですが、IPとは見なされません。

私はTEST=$(echo "$i < $IP_BRD && $i > $IP_LOW " | bc -q )大きな成功を収めずに二重引用符を使ってみました。

それを修正する方法についてのアイデアはありますか?

ベストアンサー1

echo '191.35 < 191.254 && 191.35 > 188.1 ' 行では、IP 191.35 は 191.254 未満ですが、そのままとは見なされません。

いいえ、そうではありません:191.35 == 191.350> 191.254。 bc は数値的に比較しますが、IP を直接比較することはできません。まず、IPを整数に変換する必要があります。その後、外部ツールを使用せずにシェル組み込み機能を使用して比較できます。

編集:このスレッドを確認してください。IPアドレスコンバータ

おすすめ記事