これは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
詳細
まあ、ここでは多くのことが起こっているように見えますが、とても簡単です。
- if ステートメント - 最初は次のようなものかどうかを知る必要があります。どのイーサネットデバイスなので、出力を実行し
ifconfig
てgrepしてデバイスを見つけます。 1つが見つかったら、ifconfig
もう一度実行して解析します。 - 2番目のifconfig - 実際に出力を解析しています。
grep
PCREツール()を使用して、-P
ethXX:で始まる文字列を検索します。スイッチは-o
ethXX:の後に表示される番号を返します。 - 並べ替え -
sort
ethXX:YY デバイスが複数ある場合、結果を数値で表示します。 - tail - 最も高い値の ethXX:YY デバイスになる最後のデバイスを返します。
- その後、この数字を増やして増やします
$(( $(ifconfig ...) + 1 ))
。したがって、ethXX:YYが0の場合は0 + 1
1つが得られます1
。 echo
echo - これにより、ステップ5の結果が得られます。- 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