ifconfigからIPアドレスを取得します


0

私は自分のシェルドットファイルを更新していました、そして私は私のipだけを表示するエイリアスを持つのが良いと思いました。 私は通常wlan0にあり、それはデバイスの最後の「ブロック」であるwifiと接続します。

だから私はこのようなものです:

wlan0     Link encap:Ethernet  HWaddr 6c:71:d9:d3:28:9d  
          inet addr:192.168.1.16  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::6e71:d9ff:fed3:289d/64 Scope:Link

そして私は私のBcastアドレスが欲しいのです。

このコマンドで私はそれを得ることができます:

alias ip="ifconfig | grep Bcast | tail -n1 | cut -d' ' -f14 | cut -d':' -f2"

しかし、私はこれが好きではありません。もっときれいな方法はありますか?


2
それが確実なら wlan0 あなたが使用しているインターフェースは以下の通りです。 ifconfig wlan0|sed -n 's/^.*Bcast:\(.*\) .*$/\1/p'。これはいいですか?
AFH

はい、4つのコマンドを使用したほうがはるかに優れています。しかし、あなたはそれを説明してもらえますか?ありがとう
Federico Ponzi

答えとしてそれをする必要があるでしょう。
AFH

回答:


1

それが確実なら wlan0 これはインターフェースです。それから、このインターフェースに関する情報を返すことができます。

ifconfig wlan0

これで1行しかありません Bcast: その中で(排除 tail )あなたが使用することができます sed を組み合わせる grep そして cut 関数:

ifconfig wlan0 | sed -n 's/^.*Bcast:\(.*\) .*$/\1/p'

この場合、 sed -n 入力から行を定期的に出力することを排除し、検索文字列は行全体に一致し、その間にあるものをマークします。 Bcast: そして次のスペース:代入はこのマークされたフィールドだけです、そして /p を上書きします -n そして印刷を強制します。この文字列をエイリアスに割り当てるには、二重引用符を使用して一部の文字をバックスラッシュでエスケープするか、単一引用符を使用して上記のコマンドの文字を置き換える必要があります。 '\'' (ただし、最終的な結果は省略できます ''

最後に、あなたがそれを確認したい場合は wlan0 あなたが望むインターフェイスであり、インターネットアクセス用に設定された他のものはありません、あなたはどのインターフェイスが使用されているか調べることができます(あなたはインストールする必要があるかもしれません) networkctl ):

networkctl status | sed -n 's/^.*Gateway: .* on \(.*$\)/\1/p'

これは sednetworkctl 以前と同様に出力します。今、あなたはそれらを組み合わせることができます:

ifconfig $(networkctl status |\
  sed -n 's/^.*Gateway: .* on \(.*$\)/\1/p')|sed -n 's/^.*Bcast:\(.*\) .*$/\1/p'

これはほとんどきれいではありませんが、ほとんどの基盤をカバーしています。特に、ワイヤレスが機能せず、代わりにイーサネットを使用している場合は、機能するはずです。両方のインターフェースが連携して動作している場合は、まだもっと複雑になります。 /Gateway/,$ の行範囲として s コマンド、およびIPv6エントリを除外する方法)。


の出力 ip -4 -o dev wlan0 解析が簡単かもしれません
Teun Vink

@TeunVink - 私のバージョンの ip (Ubuntu 15.04)は持っていません dev オブジェクトとして。情報は ip -4 -o addrしかし、私はこれがパースするのが簡単だとは思わない
AFH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.