linux脚本获取广播地址,根据IP地址换算出broadcast(广播地址)的shell脚本

#!/bin/bash

# 將參數值裡的非數字全部換成空白鑑

# edit www.jquerycn.cn

all=(${@//[!0-9]/ })

# 要是處理過的參數量不是 8 個的話... 送出錯誤信息,告知命令可接受的參數格式。並退出。

[ "${#all[@]}" != "8" ] && {

echo "Usage: "

echo "${0##*/} ip.ip.ip.ip/mask.mask.mask.mask"

exit 1

}

# 定義一個 get_add 的 function

get_addr () {

# 要是讀進的第一個 function 參數為 -b ,則設定 op, op1, 與 arg 的變量,以供後面的 $(( $1 $op ($5 $op1 $arg) )) 計算用。

if [ "$1" = "-b" ]; then

# 其結則為 $(( $1 | ($5 ^ 255) )),也就是逐個算出 broadcast address 。

op='|'; op1='^'; arg='255'

# 然後用 shift 拿掉這個 -b 。

shift

# 若沒有 -b 參數,則只定義 op 變量。然則,$(( $1 $op ($5 $op1 $arg) )) 的實際算式就變成 $(( $1 & $5)),這會逐個算出 network address 。

else

op='&'

fi

# 取消變量 address ,以免影嚮其後於 while loop 的運算。

unset address

# 假如能讀到第 5 個參數,才進入 while loop,否則離開。

while [ "$5" ]; do

# 跟據前面的 -b 參數,來決定要算出 broadcast 還是 network 。因為前 4 個參數是 ip 後 4 個是 mask ,因此第一個參數跟第五個參數來算就能得出第一組 ip/mask 的計算結果。

num=$(( $1 $op ($5 $op1 $arg) ))

# 再拿掉第一個參數,這可讓下一次 looping 計算下一組 ip/mask 。當 shift 4 次之後,while loop 就可結束。

shift

# 將每次的計算結果擴充在 address 變量中。(注意:如此的話,最後結果前面會有一個小數點,我們後面再處理)

address="$address.$num"

done

}

# 跑 function 來計算 network address :

get_addr ${all[@]}

# echo -e 可以用 \t 送出一個 鍵。${address#.} 則是拿掉最前面的小點。

echo -e "network:\t${address#.}"

# 跑 function 來計算 broadcast address :

get_addr -b ${all[@]}

echo -e "broadcast:\t${address#.}"

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 #!/bin/bash

# 將參數值裡的非數字全部換成空白鑑

all=(${@//[!0-9]/ })

# 要是處理過的參數量不是 8 個的話... 送出錯誤信息,告知命令可接受的參數格式。並退出。

[ "${#all[@]}" !=  "8" ] && {         echo "Usage: "

echo "${0##*/} ip.ip.ip.ip/mask.mask.mask.mask"

exit 1

}

# 定義一個 get_add 的 function

get_addr () {

# 要是讀進的第一個 function 參數為 -b ,則設定 op, op1, 與 arg 的變量,以供後面的 $(( $1 $op ($5 $op1 $arg) )) 計算用。

if [ "$1" = "-b" ]; then

# 其結則為 $(( $1 | ($5 ^ 255) )),也就是逐個算出 broadcast address 。

op='|'; op1='^'; arg='255'

# 然後用 shift 拿掉這個 -b 。

shift

# 若沒有 -b 參數,則只定義 op 變量。然則,$(( $1 $op ($5 $op1 $arg) )) 的實際算式就變成 $(( $1 & $5)),這會逐個算出 network address 。

else

op='&'

fi

# 取消變量 address ,以免影嚮其後於 while loop 的運算。

unset address

# 假如能讀到第 5 個參數,才進入 while loop,否則離開。

while [ "$5" ]; do

# 跟據前面的 -b 參數,來決定要算出 broadcast 還是 network 。因為前 4 個參數是 ip 後 4 個是 mask ,因此第一個參數跟第五個參數來算就能得出第一組 ip/mask 的計算結果。

num=$(( $1 $op ($5 $op1 $arg) ))

# 再拿掉第一個參數,這可讓下一次 looping 計算下一組 ip/mask 。當 shift 4 次之後,while loop 就可結束。

shift

# 將每次的計算結果擴充在 address 變量中。(注意:如此的話,最後結果前面會有一個小數點,我們後面再處理)

address="$address.$num"

done

}

# 跑 function 來計算 network address :

get_addr ${all[@]}

# echo -e 可以用 \t 送出一個 鍵。${address#.} 則是拿掉最前面的小點。

echo -e "network:\t${address#.}"

# 跑 function 來計算 broadcast address :

get_addr -b ${all[@]}

echo -e "broadcast:\t${address#.}"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值