「自分のIPアドレスが192で始まってたら自宅内にいる。そうでなければ、外部でテザリングでネットしてる」って判定をスクリプト内でさせたい。MacBook Airのbashで。
ーーー
まずはIPアドレスが今どうなっているのかを、スクリプト内で知る必要がある。
自分のIPアドレスが 192.168.2.106 だとして、分解して変数に入れたい。
例えば
変数$ip1に 192
変数$ip2に 168
変数$ip3に 2
変数$ip4に 106
という感じ。
ーーー
ifconfigで取得した文字列の中から、無線で使っているインターフェース(en0)のものを取り出せればいい。
$ ifconfig
ーーー
grepコマンドに -A オプションをつけると、grepで引っかかった文字列の後ろ(After)の行を引っ掛けてくれる。
例えば、grep -A 5 en0 と指定すれば、en0で引っかかった文字列の後ろ5行を引っ掛けて
$ ifconfig | grep -A 5 en0:
目的のインターフェース(en0)の部分だけ取り出せた。
ーーー
このうち「inet 192.168.2.106」の行だけをさらに切り出す。
$ ifconfig | grep -A 5 en0: | grep inet" "
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}'
切り出せた。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. としているのは、「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
変数$ip1に192が入ったのが確認できた。
ーーー
同じ手順で、
変数$ip2 に 168を入れる。
変数$ip3 に 2を入れる。
変数$ip4 に 106を入れる。