我是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
}
答案 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个变量$?构成的单个参数的另一个函数。表示上一次函数调用的退出状态的最后一个值。