Bash
IP地址字元串操作問題
我正在嘗試從 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
;12055
到10.5.59
; 和12000
到10.0.9
。