如果我可能没有收到所有4个八位字节作为输入,如何使用Bash如何将IP地址分成4个Octet变量?

Sup*_*man 0 ip bash

我正在编写一个将在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种不同的输入情况.这里.

任何有关如何改进或实施此建议的帮助或建议将不胜感激.

谢谢.

che*_*ner 5

首先,将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)