如果我可能没有接收到全部4个八位字节作为输入,那么如何使用Bash将IP地址分成4个八位字节变量?
我正在编写一个将在bash中运行的脚本 此程序的预期输入将类似于以下4种情况之一: 运行192.168.1.1[其他参数] 运行168.1.1[其他参数] 运行1.1[其他参数] 运行1[其他参数] 考虑到这些情况,我想要以下数组 IP[0]=192 IP[1]=168 IP[2]=1 IP[3]=1 始终需要第四个八位组。如果未提供其他选项,则默认为192.168.1.x 我在单独的八位字节上看到了这一页,但我不确定如何解释我需要处理的4种不同的输入情况 任何关于我如何改进或实施的帮助或建议都将不胜感激如果我可能没有接收到全部4个八位字节作为输入,那么如何使用Bash将IP地址分成4个八位字节变量?,bash,ip,Bash,Ip,我正在编写一个将在bash中运行的脚本 此程序的预期输入将类似于以下4种情况之一: 运行192.168.1.1[其他参数] 运行168.1.1[其他参数] 运行1.1[其他参数] 运行1[其他参数] 考虑到这些情况,我想要以下数组 IP[0]=192 IP[1]=168 IP[2]=1 IP[3]=1 始终需要第四个八位组。如果未提供其他选项,则默认为192.168.1.x 我在单独的八位字节上看到了这一页,但我不确定如何解释我需要处理的4种不同的输入情况 任何关于我如何改进或实施的帮助或建议都
谢谢。这应该行得通。它使用蛮力查找IP的长度,并使用$IFS变量将其分隔到数组中:
#! /bin/bash
function full_ip () {
if [[ $1 = *.*.*.* ]] ; then
echo $1
elif [[ $1 = *.*.* ]] ; then
echo 192.$1
elif [[ $1 = *.* ]] ; then
echo 192.168.$1
else
echo 192.168.1.$1
fi
}
for ip in 192.168.1.1 168.1.1 1.1 1 ; do
f=$(full_ip $ip)
echo -n $f$'\t'
IFS=. IP=($f) IFS=$' \t\n'
echo ${IP[0]} ${IP[1]} ${IP[2]} ${IP[3]}
done
这应该行得通。它使用蛮力查找IP的长度,并使用$IFS变量将其分隔到数组中:
#! /bin/bash
function full_ip () {
if [[ $1 = *.*.*.* ]] ; then
echo $1
elif [[ $1 = *.*.* ]] ; then
echo 192.$1
elif [[ $1 = *.* ]] ; then
echo 192.168.$1
else
echo 192.168.1.$1
fi
}
for ip in 192.168.1.1 168.1.1 1.1 1 ; do
f=$(full_ip $ip)
echo -n $f$'\t'
IFS=. IP=($f) IFS=$' \t\n'
echo ${IP[0]} ${IP[1]} ${IP[2]} ${IP[3]}
done
首先,将IP地址分成4个部分,但仅在“填充”它以保证4个字段后:
input=168.1.1
IFS=. read -a o <<< "...$input"
最后,您可以将其重新缝合在一起:
output=$( IFS=.; echo "${ip[*]}" )
首先,将IP地址分成4个部分,但仅在“填充”它以保证4个字段后:
input=168.1.1
IFS=. read -a o <<< "...$input"
最后,您可以将其重新缝合在一起:
output=$( IFS=.; echo "${ip[*]}" )
谢谢,这正是我想要的,并没有强迫我求助于一些野蛮的强制循环。我还能够用ip替换o,只是为了避免创建额外的变量。谢谢,这正是我想要的,并没有强迫我求助于一些野蛮的强制循环。我还能够用ip替换o,只是为了避免创建额外的变量。