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

あひるの勉強部屋

つらつらつら~と不定期にカキコするブログ

hostsを書き換えるスクリプト完成

OSX シェルスクリプト

自宅でgitサーバーを運用中であるが、DNSサーバーを建てていないのでサーバーのLAN内に入った時にいちいち

/etc/hosts

を書き換えなければならない。(コメントアウトするか外すか)

例えば

192.168.0.2 example.com

#192.168.0.2 example.com

にするためだけに、

sudo vim /etc/hosts

として書き換えるのは阿呆らしい。

かといって稼働中でバリバリ使用中のサーバーサイドをいじりたくなかったので、hostsファイルを半自動で書き換えてしまえと思いました。

以下シェルスクリプト(OSX用)

#!/bin/sh
var=`sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I|grep "\sSSID"|sed -e "s/[^:]*: //"`
var2=`cat /etc/hosts|grep "example"`

if [ -z ${var} ]; then	#
	echo "Please turn on Wifi or connect to the Wifi spot!"
	exit 1
elif [ ${var} = "your_SSID" ]; then
	echo ${var2} | grep '#'
	if [ $? -eq 0]; then
	#if [ !`echo ${var2} | grep -q '#'` ]; then
		sed -i -e '/example/s/^#//' /etc/hosts
	fi
else
	echo ${var2} | grep -q '#'
	if [ $? -eq 0 ]; then
	#if [ `echo ${var2} | grep -q '#'` ]; then
		echo "already have #"
	else
		echo "add # on the beginning"
		sed -i -e '/example/s/^/#/' /etc/hosts
	fi
fi
exit $?

Githubにもソースをあげているのでご自由にどうぞNa0ki/hosts_rename_script · GitHub

上から順に雑に説明します。

sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I

で以下の情報が得られます。(値は適当に変えてあります)

     agrCtlRSSI: -57
     agrExtRSSI: 0
    agrCtlNoise: -95
    agrExtNoise: 0
          state: running
        op mode: station 
     lastTxRate: 300
        maxRate: 300
lastAssocStatus: 0
    802.11 auth: open
      link auth: wpa2-psk
          BSSID: 0:0:00:00:00:00
           SSID: your_SSID
            MCS: 15
        channel: 44,1

ここからSSIDの行grepしてsedで整形してあげれば、SSIDを取得できます。(varの中身)

次にexample.comのある行を取得したいのでexampleでgrepをかけています。

最初のifではwifiが接続されていない場合を想定しています。wifiが接続されていない場合はNULLが返ってくるため

[ -z ${var} ]

でNULLの場合の処理に持って行っています。

次のifはサーバーと同一LAN内にいる場合の処理を書いています。

sedexample.comの行頭のコメントアウトを外しています。

最後はサーバーのLAN外にいるときはコメントアウトするように処理しています。

以上です。

 

シェルスクリプトを普段書かないので書式に随分と苦しめられました。

助けてくれた友人に感謝。

OSXではlaunchdでスクリプトをバックグラウンドで動かせるらしいので、このスクリプトを動かせるようにlaunchdの勉強中です(☝  ՞ਊ ՞)☝

ではでは