はじめに
IPアドレスを見てどのサブネットに入っているかを確認したい際によく頭の中で二進数にしていたのですが、簡単そうだったので引数に10進数のIPアドレスを入力すれば2進数にして返すスクリプトを作成しました。
環境情報
GNU bash, バージョン 4.4.12(3)-release (x86_64-unknown-cygwin)
スクリプトコード
#!/bin/bash octets[0]=`echo $1 | cut -d"." -f1` octets[1]=`echo $1 | cut -d"." -f2` octets[2]=`echo $1 | cut -d"." -f3` octets[3]=`echo $1 | cut -d"." -f4` echo "obase=2;ibase=10;${octets[0]}" | bc | xargs printf %08d echo -n "." echo "obase=2;ibase=10;${octets[1]}" | bc | xargs printf %08d echo -n "." echo "obase=2;ibase=10;${octets[2]}" | bc | xargs printf %08d echo -n "." echo "obase=2;ibase=10;${octets[3]}" | bc | xargs printf %08d echo
実行権限を付与すれば以下のように動きます。
$ ./ipshow2.sh 10.20.30.40 00001010.00010100.00011110.00101000
以下、簡単なコードの解説です。
解説
bcコマンドにて10進数→2進数の変換を行えるのであとは引数をばらして入れるだけです。
bc - An arbitrary precision calculator language
printで0詰めを行わないと以下のように見にくくなるので8桁で0詰めしてます。
$ ./ipshow2.sh 10.20.30.40 1010.10100.11110.101000
終わりに
ループを使えばもしかしたらワンライナーにできるかもしれないので、優秀な方がいればぜひコメントに記載ください。