shell脚本转换ip为二进制

1、可以利用bc,关键在于补全8位,这个只能用在C类,局限性大

vim ip_switch_bin.sh
#!/bin/sh
ip=${1}
ip_switch_bin(){
	ipaddrs=$(echo $ip| awk -F '/' '{print $1}'|awk 'BEGIN{RS="."} {print}')
	for i in ${ipaddrs[@]}
	do
        echo "obase=2;$i"|bc
        byte () { printf "%08d" $1; }
	done
}
resbin=$(ip_switch_bin $1)
echo "$resbin"|xargs echo|tr ' ' '.'

测试:

sh ip_switch_bin.sh  192.168.199.200
11000000.10101000.11000111.11001000
#################################
sh ip_switch_bin.sh 192
11000000

2、高级一点的写法,使用全类地址
来源: https://stackoverflow.com/questions/4042601/unixhow-to-convert-ip-address-to-binary-code

vim ip_switch_bin.sh
#!/bin/sh
tobin ()
{
    local val bits b c d;
    val=$1;
    bits="";
    (( val < 2 )) && bits=$val;
    b="";
    while (( val > 1 )); do
        bits=$b$bits;
        (( b = val % 2 ));
        (( c = ( val / 2 ) * ( val % 2 ) ));
        (( val = val / 2 ));
        (( d = val ));
    done;
    echo "$d$c$bits"
}
# 补足八位
byte () { printf "%08d" $1; }
# unset为shell内建指令,可删除变量或函数
unset dot binary
# IFS 是一种 set 变量,默认是 space, tab, newline 
# 保存原始值
saveIFS=$IFS
# 改变IFS的值
IFS=.
ip=($1)
# 还原IFS的原始值
IFS=saveIFS  
for octet in ${ip[@]}
do
    binary=$binary$dot$(byte $(tobin $octet))
    dot=.
done
echo $binary

测试:

[root@node3 ~]# sh  ip_switch_bin.sh 10.10.10.10
00001010.00001010.00001010.00001010
[root@node3 ~]# sh  ip_switch_bin.sh 10
00001010
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值