简单的bash脚本从ip和netmask生成子网,这是我在google搜索后得到的。如下所示
#!/bin/bash
sub_net()
{
A=$1
B=$2
OFS=$IFS
IFS="."
set ${A:-0.0.0.0}
A1=${1:-0}
A2=${2:-0}
A3=${3:-0}
A4=${4:-0}
IFS="."
set ${B:-0.0.0.0}
B1=${1:-0}
B2=${2:-0}
B3=${3:-0}
B4=${4:-0}
IFS=$OFS
C4=$(( B4 & A4 ))
C3=$(( B3 & A3 ))
C2=$(( B2 & A2 ))
C1=$(( B1 & A1 ))
echo ${C1}.${C2}.${C3}.${C4}
}
sub_net 181.172.0.111 255.255.255.0
我知道IFS
用于字段分隔符但是在第8行:8代码set ${A:-0.0.0.0}
写的是什么用它。对于调试我只是评论该行,但得到了以下错误
./script.bash: line 33: 255.255.255.0: syntax error: invalid arithmetic operator (error token is ".255.255.0")
任何人都可以解释它的用法吗?
答案 0 :(得分:1)
该行:
set ${A:-0.0.0.0}
会设置位置参数。既然你说过:
IFS="."
在此之前,它意味着如果变量A
是123.42.10.42
,那么位置参数123
,42
,10
,{{1} }将被设置,可以使用42
,$1
,...来访问(实际上,您可以看到用于设置其他变量的那些:$2
,{{1} },...)
关于A1
表示法,您可以在Shell Parameter Expansion中了解它:
A2
如果参数未设置或为null,则替换 word 的扩展。否则,参数的值将被替换。