原文:http://blog.chinaunix.net/uid-20788470-id-1841646.html
 
1. IP转换为整数
> vi ip2num.sh
#!/bin/bash
# 所有用到的命令全是bash内建命令
IP_ADDR=$1
[[ "$IP_ADDR" =~ "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" ]] || { echo "ip format error."; exit 1; }
IP_LIST=${IP_ADDR//./ };
read -a IP_ARRAY <<<${IP_LIST};      # 把点分十进制地址拆成数组(read的-a选项表示把输入读入到数组, 下标从0开始)
echo $(( ${IP_ARRAY[0]}<<24 | ${IP_ARRAY[1]}<<16 | ${IP_ARRAY[2]}<<8 | ${IP_ARRAY[3]} ));       # bash的$(()) 支持位运算
HEX_STRING=$(printf "0X%02X%02X%02X%02X\n" ${IP_ARRAY[0]} ${IP_ARRAY[1]} ${IP_ARRAY[2]} ${IP_ARRAY[3]});     # 这里演示另外一种不使用位运算的方法
printf "%d\n" ${HEX_STRING};
# 参考自:http://hi.baidu.com/test/blog/item/8af8513da98b72eb3d6d9740.html
# 可以使用mysql的select inet_aton('${IP_ADDR}'); 来验证结果是否正确。
2. 整数转换为IP
> vi num2ip.sh
#!/bin/bash
N=$1
H1=$(($N & 0x000000ff))
H2=$((($N & 0x0000ff00) >> 8))
L1=$((($N & 0x00ff0000) >> 16))
L2=$((($N & 0xff000000) >> 24))
echo $L2.$L1.$H2.$H1
或者
#!/bin/bash
N=$1
declare -i H1="$N & 0x000000ff"
declare -i H2="($N & 0x0000ff00) >> 8"
declare -i L1="($N & 0x00ff0000) >> 16"
declare -i L2="($N & 0xff000000) >> 24"
echo "$L2.$L1.$H2.$H1"
# The variable is treated as an integer; arithmetic evaluation (see ARITHMETIC EVALUATION ) is performed when the variable is assigned a value.
# 参考自:https://dream4ever.org/archive/t-263202.html
3. 把掩码长度转换成掩码
# 可以根据2修改下, 255.255.255.255的整型值是4294967295
#!/bin/bash
declare -i FULL_MASK_INT=4294967295
declare -i MASK_LEN=$1
declare -i LEFT_MOVE="32 - ${MASK_LEN}"
declare -i N="${FULL_MASK_INT} << ${LEFT_MOVE}"
declare -i H1="$N & 0x000000ff"
declare -i H2="($N & 0x0000ff00) >> 8"
declare -i L1="($N & 0x00ff0000) >> 16"
declare -i L2="($N & 0xff000000) >> 24"
echo "$L2.$L1.$H2.$H1"

最新文章

  1. Windows Phone Studio-任何人都能开发Windows Phone App的在线工具
  2. JS编程常识
  3. ubuntu下卸载vmware
  4. 谈谈JPA-02-HelloWorld
  5. hadoop环境搭建遇到问题集锦
  6. java基础知识回顾之抽象类和接口的区别
  7. Chrome 开发工具指南
  8. jsp与servlet之间的参数传递【转】
  9. 实战weblogic集群之创建domain,AdminServer
  10. jQuery中在当前页面弹出一个新的界面
  11. Windows下python安装matplotlib
  12. sparklyr包:实现Spark与R的接口
  13. javaScript执行环境、作用域链与闭包
  14. jmeter简单的使用
  15. 转:为什么根据IP地址查询物理所在地,而不是mac地址?
  16. jvm程序执行慢诊断手册
  17. .NET-记一次架构优化实战与方案-底层服务优化
  18. .NET代码混淆——开源.net 混淆器ConfuserEx介绍
  19. python3_字符串
  20. 为什么选择图形数据库,为什么选择Neo4j?

热门文章

  1. Astyle 快速入门,常用指令
  2. 程序员如何面对 HR 面试的 40 个问题!
  3. WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel
  4. linux 命令 find与rm实现查找并删除目录或文件
  5. Android开发 处理拍照完成后的照片角度
  6. 2016.10.29初中部上午NOIP普及组比赛总结
  7. Windows安全证书生成方法(开发者证书)
  8. opencv-访问Mat中每个像素的值
  9. 关于前端调用后端php数据跨域的问题
  10. log4j的使用及与mybatis应用