LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 791|回复: 5

高手请进,怎样用shell计算IP的网络号及广播地址?

[复制链接]
发表于 2004-10-12 01:46:08 | 显示全部楼层 |阅读模式
有以下2个问题,好久没有解决,那位高手能够解决?

1 怎样用shell根据IP地址组织及子网掩码计算出该IP的网络号及广播地址
例如IP地址192.168.0.1,子网掩码255.255.255.0;网络号为192.168.0.0,广播地址为192.168.0.255


2 怎样用shell将子网掩码mask转换为十进制掩码prefix(mask)?
这里有个PERL类似脚本,可以提供一点思路
# mask_to_prefix(mask)
# Converts a mask like 255.255.255.0 to a prefix like 24
sub mask_to_prefix
{
return $_[0] =~ /^255\.255\.255\.(\d+)$/ ? 32-&log2(256-$1) :
       $_[0] =~ /^255\.255\.(\d+)\.0$/ ? 24-&log2(256-$1) :
       $_[0] =~ /^255\.(\d+)\.0\.0$/ ? 16-&log2(256-$1) :
       $_[0] =~ /^(\d+)\.0\.0\.0$/ ? 8-&log2(256-$1) : 32;
}
sub log2
{
return int(log($_[0])/log(2));
}
发表于 2004-10-12 06:42:47 | 显示全部楼层

  1. q="255.255.0.0";p=0;while read i; do a=$(echo "obase=2;$i" | bc -l);b=$(($(echo ${a%%0*}|wc -c)-1));p=$(($p+$b));done< <(echo $q|tr '.' '\n'|tr -d '0'|sed '/^$/d');echo $p
复制代码


q值为你所要换的mask。

第一个我再想想。
 楼主| 发表于 2004-10-12 10:46:20 | 显示全部楼层
我用的是 BASH( GUN Bourne SHell),你的代码我试了一下,报错呀
#!/bin/sh 调试没有通过
done< <(echo $q|tr '.' '\n'|tr -d '0'|sed '/^$/d');语法有误?
谢谢yongjian
 楼主| 发表于 2004-10-12 11:19:47 | 显示全部楼层
找到1个帖子,可解决第一个问题

用 shell ?碛嬎 network 跟 broadcast
http://bbs.chinaunix.net/forum/viewtopic.php?t=196402
发表于 2004-10-12 12:38:29 | 显示全部楼层
请用 #!/bin/bash
sh不支持进程替换.
 楼主| 发表于 2004-10-12 20:04:40 | 显示全部楼层
在#!/bin/bash下测试通过!  Thankyou  yongjian
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表