一、需求说明

  在CSDN问答区经常有学生提问关于IP地址计算的问题,这种题型无非就是根据IP地址和掩码计算网络地址、广播地址、地址掩码、可用地址范围、可用主机数量。其实关于这些我在博文TCP/IP之IP协议及IP地址详解中诊断IP地址的规划和计算做了详细的说明。只要你读懂了这篇博文我相信计算IP地址对广大学生来说应该不是什么难事。如果嫌自己计算麻烦,此脚本可以帮你一次计算出所有结果。为了完成IP计算器脚本主要需要解决IP验证、进制转换、位数补齐等的问题。
  此博文是在前两篇博文Shell脚本之IP验证、Shell脚本之进制转换器的基础上完成的,如果有觉得不清楚的地方很可能是你需要先读一下如上两篇博文。

二、脚本内容

#!/bin/bash
#script name: ipcalculate.sh
#author: wuhs
#version: v1
#date: 2022-05-20
#description: 此脚本用于根据IP地址和掩码位数计算网络地址、掩码、广播地址、可用地址范围、可用主机数量#参数定义
net="192.168.0.0"
mask="255.255.255.0"
broadcast="192.168.0.255"
hostcount="254"#获取IP地址
IP=$1
#获取掩码位数
maskm=$2
#获取主机位数
let n=32-$maskm#定义一个函数,主要是为了解决二进制IP到点分十进制的转换,输入32的二进制字符串,打印点分十进制IP
function toip(){ipc=$1local p1=$(echo $ipc|cut -c -8)p1=`echo "obase=10;ibase=2;$p1" |bc`local p2=$(echo $ipc|cut -c 9-16)p2=`echo "obase=10;ibase=2;$p2" |bc`  local p3=$(echo $ipc|cut -c 17-24)p3=`echo "obase=10;ibase=2;$p3" |bc`  local p4=$(echo $ipc|cut -c 25-32)p4=`echo "obase=10;ibase=2;$p4" |bc`  ipc="$p1.$p2.$p3.$p4"echo $ipc
}#先调用IP验证器验证输入的IP地址是否合规
. ./ipcheck.sh $IP#IP输入合规则继续执行,输入错误则退出
if [ $? -eq 0 ];thenp1=$(echo $IP|cut -d. -f1)p2=$(echo $IP|cut -d. -f2)p3=$(echo $IP|cut -d. -f3)p4=$(echo $IP|cut -d. -f4)#echo $p1 $p2 $p3 $p4
elif [ $? -eq 1 ];thenecho "IP地址格式输入错误"exit
elif [ $? -eq 2 ];thenecho "IP地址为特殊类型IP,此脚本仅用于计算公网或者内网IP地址。"exit
fi#获取IP地址各段二进制值
p12=`echo "obase=2;ibase=10;$p1" |bc`
p12=`printf "%08d\n" $p12`
p22=`echo "obase=2;ibase=10;$p2" |bc`
p22=`printf "%08d\n" $p22`
p32=`echo "obase=2;ibase=10;$p3" |bc`
p32=`printf "%08d\n" $p32`
p42=`echo "obase=2;ibase=10;$p4" |bc`
p42=`printf "%08d\n" $p42`
IP2="$p12$p22$p32$p42"#验证输入掩码位数参数是否合规
if [ $maskm -ge 1 -a $maskm -le 32 ];thenecho -e "\e[32m掩码位数:$maskm 输入合规 \e[0m "
elseecho -e "\e[31m掩码位数:$maskm 输入不合规,要求输入1-32之间数值 \e[0m "exit
fi#获取网络地址
netw=`echo $IP2|cut -c -$maskm`
#获取主机位
let nn=$maskm+1
host=`echo $IP2|cut -c $nn-`
#将主机位全部转换为0,得到地址段网络地址
host=`echo $host| sed 's/1/0/g'`
#将主机位全部转换为1,得到地址段广播地址
brod=`echo $host| sed 's/0/1/g'`
#拼接二进制网络地址
net="$netw$host"
#拼接二进制广播地址
broadcast="$netw$brod"
#echo $broadcast
#获取网段第1个可用地址
fhost=`echo $host|sed 's/0$/1/g'`
fhost="$netw$fhost"
#获取网段最后1个可用地址
lhost=`echo $brod|sed 's/1$/0/g'`
lhost="$netw$lhost"
#获取掩码
mask=`echo $netw|sed 's/0/1/g'`
mask="$mask$host"echo "地址$IP 计算结果如下:"
echo -e "网络地址是:\e[32m `toip $net` \e[0m"
echo -e "地址掩码是:\e[32m `toip $mask` \e[0m"
echo -e "广播地址是:\e[32m `toip $broadcast` \e[0m"
echo -e "可用地址范围是:\e[32m `toip $fhost` - `toip $lhost` \e[0m"let hostcount=(2**$n-2)
echo -e "可用主机数量是:\e[32m $hostcount \e[0m"

三、使用示例

1、常规A/B/C类地址计算

[root@s146 ipcheck]# ./ipcalculate.sh 192.168.100.100 24
192.168.100.100 满足IP格式数字要求
192.168.100.100 是一个私网IP地址
掩码位数:24 输入合规
地址192.168.100.100 计算结果如下:
网络地址是: 192.168.100.0
地址掩码是: 255.255.255.0
广播地址是: 192.168.100.255
可用地址范围是: 192.168.100.1 - 192.168.100.254
可用主机数量是: 254

2、输入IP地址不合规

#此脚本仅用于计算通用的私网和公网IP地址,对应环回口IP、专有IP、组播地址等不做计算,虽然公式是通用的,但是这些IP地址是有特殊用途的,通用计算没有实际意义。
[root@s146 ipcheck]# ./ipcalculate.sh 192.168.100.10a 24
格式错误,请重新输入!
IP地址格式输入错误
[root@s146 ipcheck]# ./ipcalculate.sh 127.0.0.1 24
127.0.0.1 满足IP格式数字要求
127.0.0.1 是一个环回口地址
IP地址格式输入错误

3、掩码输入不合规

[root@s146 ipcheck]# ./ipcalculate.sh 192.168.0.1 33
192.168.0.1 满足IP格式数字要求
192.168.0.1 是一个私网IP地址
掩码位数:33 输入不合规,要求输入1-32之间数值

4、可变长子网掩码VLSM计算

shell脚本之IP计算器相关推荐

  1. Shell脚本判断IP是否合法性(多种方法)

    运维角度来说,写shell脚本经常会遇到判断输入的值是否合法,比如IP.邮件地址等.那么,根据自身写脚本中总结的判断IP合法性脚本分享给网友,遇到时能有所参考. 思路:IP由四位数字组成,以点分割,每 ...

  2. Shell脚本之IP网络地址和广播地址计算

    这是一篇旧时习作,Shell脚本练得多了,想练练移位计算,就有了下面的脚本. #!/bin/bash IPPattern="(\<([0-9]|[1-9][0-9]|1[0-9][0- ...

  3. linux shell脚本 检查IP地址格式

    网上好多检查IP地址格式的脚本,大都看起来让人晕乎乎的.. 这里贴一个我自己写的比较简单易懂的脚本,根据自己的需要稍加改动应该就可以用了~~~ #!/bin/sh ip_string="1. ...

  4. Shell脚本之IP验证

    一.需求说明   我们在编写网络相关脚本的时候,尝尝会遇到需要判断IP地址是否合法的问题,需要知道输入的IP地址是否为一个正确的IP地址.又或者我们需要知道IP地址是公网IP地址还是私网IP地址.此博 ...

  5. shell脚本实现加减乘除计算器

    shell计算器 使用if语句 #!/bin/bash # 这是一个计算器read -t 30 -p "Please input the first number: " num1r ...

  6. shell脚本实战-IP是否在线脚本V2版本

    每个脚本都可以持续演化,比如这个IP是否在线脚本,实现了如下功能: 判断IP是否现在并在屏幕上显示 统计一共有多少在线,多少不在线的,并直接显示 提醒用户当前速度比较慢 增加监控脚本monitor 增 ...

  7. Shell脚本实现 ping功能

    Shell 脚本实现 ip ping 功能 具体代码: #!/bin/bash # ========================================================= ...

  8. shell脚本批量追踪ip路由走向

    shell脚本批量追踪ip路由走向 需求: 有大量ip地址需要追踪路由,查看是否经过(第三跳经过)192.168.23.2,如不经过,需要显示不能经过的ip 思路: 追踪路由用traceroute - ...

  9. shell脚本自动记录登陆后 的IP地址和历史记录

    转载 http://ruilinux.blog.51cto.com/4265949/845405  今天一台线上的服务器不知道被哪个活宝执行了chmod -R 700 /home,造成了文件权限不对, ...

最新文章

  1. Java全能手册火了!Redis/Nginx/Dubbo/Spring全家桶/啥都有
  2. Web App和Native App 谁将是未来
  3. ESXI6.5 最新版尝鲜安装图解
  4. symantec 操作 重叠vo_无关收购 谈谈赛门铁克的产品策略思路
  5. dhl:mvc用户登陆身份验证
  6. react(97)--分支切换
  7. Cracking the Coding Interview(Stacks and Queues)
  8. 图像处理 之 同态滤波
  9. Programiz 中文系列教程·翻译完成
  10. Android免root字体,字体大师免root
  11. java怎么实现事务_java实现简单的事务
  12. 中投、汇金、四大国有资产管理公司、华融、长城、东方、信达
  13. swiper控制页面切换
  14. 【websocket前后端交互】vue-springboot实现websocket前后端交互链接,websocket心跳重连,包含前后端代码,复制即可用【详细解释版本】
  15. Elliptic Curve
  16. 证券投资学原理(韩德宗 朱晋)知识点
  17. Marked.js - HTML 中直接解析显示 Markdown
  18. 丰子恺:不宠无惊 过一生
  19. 中大华工计算机分数,中大华工部分专业分数线猛涨
  20. 长亮科技带病IPO成功 另类持股承诺被疑闯关秘诀

热门文章

  1. 揭秘李佳琪直播带货绝招,学会它让你直播带货效益翻倍。
  2. 前端性能优化之WebP图片
  3. [2021.11.19]UPC-2021级新生个人训练赛第4场-19278 Problem D 关门
  4. 2020年中国球墨铸管行业发展背景、竞争格局及政策环境分析,城市管道建设带来行业增量,新兴铸管是行业龙头「图」
  5. 安卓手机通过USB连接路由器有线上网
  6. 【极乐小程序】房地产行业怎么利用小程序运营http://www.dreawer.cn/opration/605.html
  7. php按一列拆分excel表格,excel表格要根据某一列数据拆分-excel怎么按照某一列拆分表格...
  8. 计算机图像处理技术的应用分析,计算机图像处理技术特点及应用研究
  9. 相机测试软件,相机篇 软件检测其实意义不大_佳能数码相机_数码影像评测-中关村在线...
  10. Android实现可录音/暂停录音/播放录音的录音软件