1. ip轉換為整數
vi ip2num.sh
#!/bin/bash
# 所有用到的命令全是bash內建命令
ip_addr=$1
[[ "$ip_addr" =~ "^[0-9]\.[0-9]\.[0-9]\.[0-9]$" ]] ||
ip_list=$;
read -a ip_array <<<$;
# 把點分十進位制位址拆成陣列(read的-a選項表示把輸入讀入到陣列, 下標從0開始)
echo $(( $<<24 | $<<16 | $<<8 | $ )); # bash的$(()) 支援位運算
hex_string=$(printf "0x%02x%02x%02x%02x\n" $ $ $ $);
# 這裡演示另外一種不使用位運算的方法
printf "%d\n" $;
# 參考自:
# 可以使用mysql的select inet_aton('$'); 來驗證結果是否正確。
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.
# 參考自:
下面這個是對的
#!/bin/bash
for a in `cat ./20150427-num-ip.txt`
don=$a
l2=$((($n & 0x000000ff) ))
l1=$((($n & 0x0000ff00) >> 8))
h2=$((($n & 0x00ff0000) >> 16))
h1=$((($n & 0xff000000) >> 24))
echo $a " " $l2.$l1.$h2.$h1 >> ./20150427-ip.txt
done
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 - $"
declare -i n="$ << $"
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"
彙總下幾個IP計算 轉換的shell小指令碼 轉
原文 1.ip轉換為整數 vi ip2num.sh bin bash 所有用到的命令全是bash內建命令 ip addr 1 ip addr 0 9 0 9 0 9 0 9 ip list read a ip array 把點分十進位制位址拆成陣列 read的 a選項表示把輸入讀入到陣列,下標從0開...
socket結構和幾個IP位址轉換函式
通用的結構體 struct sockaddr s un b struct s un w unsigned long s addr s un in addr 某些函式呼叫時的引數必須是指向通用結構體的指標,到時乙個強制轉換即可 in addr t inet addr const char cp in ...
socket結構和幾個IP位址轉換函式
通用的結構體 struct sockaddr 程式設計時常用的 struct sockaddr in 其中struct in addr typedef struct in addr s un b struct s un w unsigned long s addr s un in addr 某些函式...