我正在尝试从一个5位数字构建三个八位数的10.AB.C9
:12ABC
:
12
=第一个八进制AB
=第二个八进制C
=第三个八位数对于我现有的代码,有两种情况可以导致正确的IP生成。如果C有一个前导零,例如: 02,那么第三个八进制将027,IP不能有硬编码的前导零。
five_digits=12620
if [ "${five_digits:4:1}" -eq 0 ]; then
ip_main="10.${five_digits:2:2}.9"
gateway_ip_prefix="10.${five_digits:2:2}.2"
elif [ "${five_digits:4:1}" -ne 0 ]; then
ip_main="10.${five_digits:2:2}.${five_digits:4:1}9"
gateway_ip_prefix="10.${five_digits:2:2}.${five_digits:4:1}2"
上面的代码解决了C中的前导零问题。
第二种情况是A为零,这意味着第二个八进制将有一个前导零。我不知道如何处理这个场景,希望能使脚本更简单。
发布于 2022-06-29 19:05:55
我会把每一个八重奏分开,把每一个前导零都去掉,然后把它们连在一起。就像这样:
str="$five_digits"
if [[ ${#str} != 5 ]] || [[ ${str:0:2} != "12" ]]; then
echo invalid input >&2;
exit 1;
fi
a=10 # first octet, constant
b=${str:2:2} # second octet
b=${b#0} # remove one leading zero
c=${str:4:1}9 # third octet
c=${c#0} # remove one leading zero
res="$a.$b.$c" # concatenated result
echo "$res"
例如,这将输入字符串12345
转换为10.34.59
;将12055
转换为10.5.59
;将12000
转换为10.0.9
。
https://unix.stackexchange.com/questions/708032
复制相似问题