简单的bash脚本,用于从IP和网络掩码生成子网,这是我在谷歌搜索后得到的。它如下
#!/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 行处,代码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")
谁能解释它的用法?
行:
set ${A:-0.0.0.0}
将设置位置参数。 既然你说过:
IFS="."
在此之前,这意味着如果变量A
123.42.10.42
则设置位置参数123
、42
、10
、42
,可以使用$1
、$2
、... (事实上,你可以看到那些被用来设置其他变量:A1
、A2
、...
关于${A1:-0}
表示法,你可以在 Shell 参数扩展中阅读它:
${parameter:-word}
如果参数未设置或为 null,则替换单词的扩展。否则,将替换参数的值。