1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

LinuxのシェルスクリプトでローカルのIPアドレスを取得する方法

2022-02-08 14:10:16

方法1.

ifconfig -a



ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"

 #! /bin/sh
 ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
 echo $ip
 if[[ $ip == "10."*]]
 then
 echo "The network segment is 10.*. *. * network segment"
 else
 echo "The segment is 192.*. *. *segment"
 fi



コマンドのパース

  •  ifconfig -a は、ウィンドウズではこのコマンドと同じで、ローカルマシンのすべてのIP情報を返します。
  •  grep inet IPを含む行を傍受する。
  •  grep -v 127.0.0.1 ローカルを指している行を削除する
  •  grep -v inet6 inet6 を含む行を削除します。
  •  awk { print $2} $2 はデフォルトでスペースで区切られた 2 番目のグループを意味します 同様に $1 は最初のグループを意味します。
  •  tr -d "addr: 文字列 "addr:"を削除します。

マルチNICの場合

NICが複数ある場合、異なるネットワークセグメント上に複数のIPが存在する可能性があり、その場合でも上記のコマンドを実行すると、以下のように複数のIPが返されます。

あるマシンが192.*. *.8 と 10.*. *. ネットワークセグメントIPが192 * * * 8と10 * * *であり、異なるネットワークセグメントIPアドレスに対して異なる出力を印刷するために、次のようなシェルスクリプトを実行します。

ip addr



 ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(. *)\/(. *)/, "\\1", "g", $2)}' 

方法2

ip addr



 ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(. *)\/(. *)/, "\\1", "g", $2)}' 

ここではawkコマンドが絡んでくるので詳細は省きますが、後日awkコマンドの特集が組まれる予定です   

今回の記事は、Linuxのシェルスクリプトでローカルのipアドレスを取得する方法についてです。Shell get local ip contentについては、過去の記事を検索していただくか、引き続き以下の関連記事をご覧ください。