我正在编写一个将在bash中运行的脚本.
该程序的预期输入看起来像以下4种情况之一:
运行192.168.1.1 [其他参数]
运行168.1.1 [其他参数]
运行1.1 [其他参数]
运行1 [其他参数]
鉴于任何这些情况,我想拥有以下数组.
IP [0] = 192
IP [1] = 168
IP [2] = 1
IP [3] = 1
第四个Octet将永远是必需的.如果没有提供其他的,则默认为192.168.1.x.
我看到这个页面分隔八位字节,但我不知道如何解释我需要处理的4种不同的输入情况.这里.
任何有关如何改进或实施此建议的帮助或建议将不胜感激.
谢谢.
首先,将IP地址拆分为4个部分,但只有在"填充"后才能保证4个字段:
input=168.1.1
IFS=. read -a o <<< "...$input"
Run Code Online (Sandbox Code Playgroud)
然后,使用default-value参数扩展来构建修补的输出,以修补从填充中分配空字符串的字段.
declare -a ip=( ${o[-4]:-192}
${o[-3]:-168}
${o[-2]:-1}
${o[-1]:-1} )
Run Code Online (Sandbox Code Playgroud)
最后,你可以将它拼接在一起:
output=$( IFS=.; echo "${ip[*]}" )
Run Code Online (Sandbox Code Playgroud)