読者です 読者をやめる 読者になる 読者になる

min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

bash 自分のIPアドレスを変数に格納する

 

「自分のIPアドレスが192で始まってたら自宅内にいる。そうでなければ、外部でテザリングでネットしてる」って判定をスクリプト内でさせたい。MacBook Airbashで。

ーーー

まずはIPアドレスが今どうなっているのかを、スクリプト内で知る必要がある。

自分のIPアドレスが 192.168.2.106 だとして、分解して変数に入れたい。

例えば

 変数$ip1に 192

 変数$ip2に 168

 変数$ip3に 2

 変数$ip4に 106

という感じ。

ーーー

ifconfigで取得した文字列の中から、無線で使っているインターフェース(en0)のものを取り出せればいい。

$ ifconfig

f:id:min117:20160326185146p:plain

ーーー

grepコマンドに -A オプションをつけると、grepで引っかかった文字列の後ろ(After)の行を引っ掛けてくれる。

例えば、grep -A 5 en0 と指定すれば、en0で引っかかった文字列後ろ5行を引っ掛けて

$ ifconfig | grep -A 5 en0:

f:id:min117:20160326193011p:plain

目的のインターフェース(en0)の部分だけ取り出せた。

ーーー

このうち「inet 192.168.2.106」の行だけをさらに切り出す。

$ ifconfig | grep -A 5 en0: | grep inet" "

f:id:min117:20160326190030p:plain

grep inet としてしまうと、inet6まで引っ掛かってしまうので、

grep inet" " として、inet直後に半角空白があるほうだけを引っ掛けている。

ーーー

今度は「inet 192.168.2.106 netmask 0xffffff00 broadcast 192.168.2.255」という文字列の中から、「192.168.2.106」だけを切り出す。

$ ifconfig | grep -A 5 en0: | grep inet" " | awk '{print $2}'

f:id:min117:20160326190400p:plain

切り出せた。awkコマンドは、デフォルトのセパレータが半角空白なので、フィールド2つ目($2)を指定してやるだけで取り出せる。

ーーー

最後にこの文字列(192.168.2.106)を、ドットで区切って4つに分ける(192と168と2と106 に分けて取り出す)。

まずは192を取り出す。

$ ifconfig | grep -A 5 en0: | grep inet" " | awk '{print $2}' | awk -F. '{print $1}'

f:id:min117:20160326190813p:plain

取り出せた。

-F. としているのは、「192.168.2.106」という文字列のフィールド(-F)の区切りはドット.ですよ、と指定するため。

ーーー

末尾の$1を$2にしてやれば「168」を取り出せる。

末尾の$1を$3にしてやれば「2」を取り出せる。

末尾の$1を$4にしてやれば「106」を取り出せる。

ーーー

取り出せた4つの文字列をそれぞれ変数に入れる。

まずは192を、変数$ip1に入れる。

$ ip1=$(ifconfig | grep -A 5 en0: | grep inet" " | awk '{print $2}' | awk -F. '{print $1}')

または

$ ip1=`ifconfig | grep -A 5 en0: | grep inet" " | awk '{print $2}' | awk -F. '{print $1}'`

$()で囲まれた中にあるコマンドの実行結果が、変数 $ip1 に入る。

バッククオート``で囲んでも同じ(シングルクォート''ではないので注意)。

※ 「ip1=」のイコールの前後に半角を入れちゃダメ

ーーー

入ったか確認してみる。

$ echo $ip1

f:id:min117:20160326191317p:plain

変数$ip1に192が入ったのが確認できた。

ーーー

同じ手順で、

変数$ip2 に 168を入れる。

f:id:min117:20160326191713p:plain

変数$ip3 に 2を入れる。

f:id:min117:20160326191718p:plain

変数$ip4 に 106を入れる。

f:id:min117:20160326191722p:plain