shell中自定义ip2long函数

7 篇文章 0 订阅
关于ip地址的转换,看到CU上一个帖子,自己定义了ip2long和long2ip两个函数,如下:


#!/bin/bash
function IP2long(){
local IFS='.'
read IP1 IP2 IP3 IP4 <<<"$1"
echo $((IP1*(1<<24)+IP2*(1<<16)+IP3*(1<<8)+IP4))
}

function long2IP(){
local IP=$1
local NET=
NET=".$(( IP - (IP >> 8 << 8 ) ))${NET}"
(( IP >>= 8 ))
NET=".$(( IP - (IP >> 8 << 8 ) ))${NET}"
(( IP >>= 8 ))
NET=".$(( IP - (IP >> 8 << 8 ) ))${NET}"
(( IP >>= 8 ))
NET="${IP}${NET}"
echo $NET
}

ip=${1%/*}
mask=${1#*/}
ip=$(IP2long $ip)
mask=$((((1<<32)-1)<<(32-mask)))
net=$(long2IP $((ip&mask)))
echo $net


用法:
./ip.sh 192.168.5.220/24

根据一个IP/MASK的形式,来计算实际的网络地址

方法是用 mask个1与32-mask个0与IP相与,得到一个新的IP地址,那个地址就是网络地址

想法就是把IP转换成长整数,然后与mask相与后,再转换成点分的表示法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shell,我们可以使用自定义函数来封装一系列命令,以便在脚本重复使用。自定义函数定义格式有以下几种形式: 1. 函数名() { 命令 } 2. function 函数名() { 命令 } 3. function 函数名 { 命令 } 其函数名是我们自己定义函数名称,可以根据需要起一个有意义的名字。{}函数的主体,里面可以包含一系列的命令,用来完成特定的功能。 在函数内部,我们可以使用局部变量来保存临时数据。局部变量是在函数内部定义的变量,函数外部无法使用。在Shell,可以使用关键字local在函数内部定义局部变量。例如,我们可以在函数内部使用local result=$(($value1 $value2))来定义一个局部变量result,并进行计算。 调用函数时,只需要写上函数名即可。但是要注意,调用函数必须在函数定义之后,否则会报错。例如,我们可以使用addition $value1 $value2来调用函数addition,并传入参数$value1和$value2。 总结起来,Shell的自定义函数可以通过函数名和函数主体的命令来定义函数内部可以使用局部变量来保存临时数据,而函数的调用则直接写上函数名即可。需要注意的是,调用函数必须在函数定义之后。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [shell 编程教程(9)自定义函数](https://blog.csdn.net/yspg_217/article/details/123302162)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值