首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >IP地址串操作问题

IP地址串操作问题
EN

Unix & Linux用户
提问于 2022-06-29 18:16:11
回答 1查看 119关注 0票数 1

我正在尝试从一个5位数字构建三个八位数的10.AB.C912ABC

  • 12 =第一个八进制
  • AB =第二个八进制
  • C =第三个八位数

对于我现有的代码,有两种情况可以导致正确的IP生成。如果C有一个前导零,例如: 02,那么第三个八进制将027,IP不能有硬编码的前导零。

代码语言:javascript
代码运行次数:0
运行
复制
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为零,这意味着第二个八进制将有一个前导零。我不知道如何处理这个场景,希望能使脚本更简单。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-06-29 19:05:55

我会把每一个八重奏分开,把每一个前导零都去掉,然后把它们连在一起。就像这样:

代码语言:javascript
代码运行次数:0
运行
复制
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

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/708032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档