(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Linux】10進数のIPアドレスを2進数で表示するスクリプト

スポンサーリンク

はじめに

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

終わりに

ループを使えばもしかしたらワンライナーにできるかもしれないので、優秀な方がいればぜひコメントに記載ください。