Shell脚本解释

时间:2018-08-07 06:44:48

标签: bash shell networking

我是Shell脚本的新手。我试图找到该功能在做什么。请帮助我解密相同的内容。不可能给出每个变量的描述,仅需基本解释即可。我的shell语法有问题

 pgm_lan_interface_mac(){
    if [ $is_lxc -eq 1 ]; then
        return
    fi
    if [ "$1" == 0 ]; then
        return
    fi
    if [ -z "$virtual_mac" ]; then
        return
    fi
    while read -r line || [[ -n "$line" ]];
    do
        lan=`echo $line | awk '{print $1}'`
        eth=`echo $line | awk '{print $2}'`
        # Let HA interface have its own mac
        if [ "$eth" == "$ha_intf" ]; then
            continue
        fi
        ethN=`echo $eth | sed 's/[^0-9]//g'`
        ethNhex=`printf "%02x" $ethN`
        vmac=`echo ${virtual_mac::15}$ethNhex`
        if [ ! -z "$VIRTUAL_EDGE" ];
        then
            ifconfig $eth down
        fi
        ifconfig $eth hw ether $vmac
        pgm_sub_interface_mac 1 $eth $vmac
        if [ ! -z "$VIRTUAL_EDGE" ];
        then
            ifconfig $eth up
        fi
        log_ha "[$?]: $eth $vmac"
    done < /tmp/ha/lanlinks
}

1 个答案:

答案 0 :(得分:0)

if [ $is_lxc -eq 1 ]; then
    return
fi

仅比较变量是否等于1,在这种情况下,该函数将不返回任何内容并退出

if [ "$1" == 0 ]; then
    return

在这里进行比较,如果传递给函数的第一个参数为0,则返回空

if [ -z "$virtual_mac" ]; then
    return
fi

正在查看变量virtual_mac是否为空,它将返回

while read -r line || [[ -n "$line" ]];

在第一部分中,它要求输入变量行和||。运算符的意思是如果执行的第一个命令是可变行,则在||之后接收到该命令不会执行 这部分将继续要求输入

lan=`echo $line | awk '{print $1}'`

这定义了一个变量,该变量是初始变量行中的第一个单词,awk'{print $ 1}'打印一行中的第一个单词,例如。如果line = abc xyz

awk'{print $ 1}'将给出abc awk'{print $ 2}'将给出xyz

if [ "$eth" == "$ha_intf" ]; then
    continue
fi

再次将变量eth与另一个变量进行比较,如果它们相等,它将继续。

ethN=`echo $eth | sed 's/[^0-9]//g'`

我们从变量eth创建的新变量sed所做的是获取接口名称的每个非数字字符并将其删除,以便将ethN转换为N(其中{{1 }}是一个数字,例如N变成eth8)。

8

在这里,我们从两个变量virtual_mac和ethNhex创建一个变量。 vmac=`echo ${virtual_mac::15}$ethNhex` 返回$ {virtualmac}变量值的前15个字符(如果值少于15个字符,则返回整个字符)

${virtual_mac::15}

在这里,我们正在检查变量virtual_edge是否为空,如果为空,我们正在寻找我猜到的设备。

 if [ ! -z "$VIRTUAL_EDGE" ];
    then
        ifconfig $eth down
 fi

这里我们调用另一个带有3个参数的函数作为输入,其中2个是在主机函数中生成的变量。

pgm_sub_interface_mac 1 $eth $vmac

在这里,我们再次检查变量virtual edge是否为空,如果为空,则将执行以下命令

if [ ! -z "$VIRTUAL_EDGE" ];

这将调用由3个变量$?构成的单个参数的另一个函数。表示上一次函数调用的退出状态的最后一个值。