Bash

IP地址字元串操作問題

  • June 29, 2022

我正在嘗試從 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 為零,這意味著第二個八位字節將具有前導零。我不確定如何處理這種情況並希望使腳本更簡單。

我會將每個八位組分開,並從每個八位組中刪除任何前導零,然後將它們連接在一起。像這樣的東西:

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; 1205510.5.59; 和1200010.0.9

引用自:https://unix.stackexchange.com/questions/708032