需要解释bash脚本中使用的一些变量

时间:2014-01-22 06:55:39

标签: bash

简单的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")

任何人都可以解释它的用法吗?

1 个答案:

答案 0 :(得分:1)

该行:

set ${A:-0.0.0.0}

会设置位置参数。既然你说过:

IFS="."

在此之前,它意味着如果变量A123.42.10.42,那么位置参数1234210,{{1} }将被设置,可以使用42$1,...来访问(实际上,您可以看到用于设置其他变量的那些:$2,{{1} },...)


关于A1表示法,您可以在Shell Parameter Expansion中了解它:

  

A2

     

如果参数未设置或为null,则替换 word 的扩展。否则,参数的值将被替换。