ifconfig eth:xxを使用してIPを追加するときに行で最も高いeth:xxを見つける方法

ifconfig eth:xxを使用してIPを追加するときに行で最も高いeth:xxを見つける方法

これはPerlスクリプトにあるので、その番号を取得して新しいIPに1つを追加する必要があります。誰かが私にライナーのコピーを与えることができますか? Bash / Perlかもしれません。

編集する

次の入力が与えられました。

inet xx.182.137.90/29 brd xxx.182.137.95 scope global eth0
inet xxx.182.137.91/24 brd xxx.182.137.255 scope global eth0:1
inet xxx.182.137.92/24 brd xxx.182.137.255 scope global secondary eth0:2
inet xxx.182.137.93/24 brd xxx.182.137.255 scope global secondary eth0:3
inet xxx.182.137.94/24 brd xxx.182.137.255 scope global secondary eth0:4

4を出力する必要があります。以下でお願いしたことを考えると

$ ip addr | grep -e 'eth[0-9]:[0-9]' | cut -d: -f2

これに対する回答を変更すると、これを得るのに役立ったので、これを受け入れます。

ベストアンサー1

設定されている場合

ifconfig必要なものを理解している場合は、出力を取得して使用する次のeth:xxデバイスを返す1行のコマンドが必要です。

それでは、eth0:0、eth0:1、eth0:2を使用すると、コマンドは3を返す必要がありますか?

はい

このようなコマンドは必要な操作を実行する必要があります。

$ if (ifconfig | grep -q "^eth"); then \
      echo $(($(ifconfig | grep -Po "(?<=^eth[0-9]:)\d+" | sort -n | tail -1) + 1)); \
      else echo 0;fi

したがって、イーサネットデバイスがある場合:

$ ifconfig | grep eth
eth0:0      Link encap:Ethernet  HWaddr F0:DE:F1:2F:7D:4E  

私たちのコマンドは1を返します:

$ if (ifconfig | grep -q "^eth"); then echo $(($(ifconfig | grep -Po "(?<=^eth[0-9]:)\d+" | sort -n | tail -1) + 1)); else echo 0;fi
1

イーサネットデバイスがない場合は0を返します。

$ if (ifconfig | grep -q "^eth"); then echo $(($(ifconfig | grep -Po "(?<=^eth[0-9]:)\d+" | sort -n | tail -1) + 1)); else echo 0;fi
0

詳細

まあ、ここでは多くのことが起こっているように見えますが、とても簡単です。

  1. if ステートメント - 最初は次のようなものかどうかを知る必要があります。どのイーサネットデバイスなので、出力を実行しifconfigてgrepしてデバイスを見つけます。 1つが見つかったら、ifconfigもう一度実行して解析します。
  2. 2番目のifconfig - 実際に出力を解析しています。grepPCREツール()を使用して、-PethXX:で始まる文字列を検索します。スイッチは-oethXX:の後に表示される番号を返します。
  3. 並べ替え - sortethXX:YY デバイスが複数ある場合、結果を数値で表示します。
  4. tail - 最も高い値の ethXX:YY デバイスになる最後のデバイスを返します。
  5. その後、この数字を増やして増やします$(( $(ifconfig ...) + 1 ))。したがって、ethXX:YYが0の場合は0 + 11つが得られます1
  6. echoecho - これにより、ステップ5の結果が得られます。
  7. eth デバイスが出力にない場合は、ifconfig最初のデバイスになるため、0 を返します。

IPアドレス

を使用するには、ip addr上記のソリューション形式を使用してこれを実行できます。

$ if (ip addr | grep -q "eth"); then \
      echo $(($(ip addr | grep -Po "(?<=eth[0-9]:)\d+" | sort -n | tail -1) + 1)); \
      else echo 0;fi

はい

サンプルデータの使用:

inet xx.182.137.90/29 brd xxx.182.137.95 scope global eth0
inet xxx.182.137.91/24 brd xxx.182.137.255 scope global eth0:1
inet xxx.182.137.92/24 brd xxx.182.137.255 scope global secondary eth0:2
inet xxx.182.137.93/24 brd xxx.182.137.255 scope global secondary eth0:3
inet xxx.182.137.94/24 brd xxx.182.137.255 scope global secondary eth0:4

このコマンドは 5 を返します。

$ if (ip addr | grep -q "eth"); then echo $(($(ip addr | grep -Po "(?<=eth[0-9]:)\d+" | sort -n | tail -1) + 1)); else echo 0;fi
5

おすすめ記事