Zakładając, że używasz bash
wersji 4.0 lub nowszej ...
CODE=A
declare -A domain
domain=(
[a]=com.tencent.ig
[b]=com.vng.pubgmobile
[c]=com.pubg.krmobile
[d]=com.rekoo.pubgm
)
PN=${domain[${CODE,,}]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
W kodzie definiuję tablicę asocjacyjną zawierającą wszystkie nazwy domen, z których każda jest powiązana z jednym klawiszem z małą literą.
$PN
Zmienna jest przypisana nazwę domeny odpowiadającą dolnym bocznym $CODE
wartości ( ${CODE,,}
zwraca wartość $CODE
zmieniła się małymi literami tylko) z tej tablicy, ale jeśli $CODE
nie odpowiada ważnego wpisu w domain
wykazie, to wychodzi skrypt ze związkiem błąd.
${variable:?error message}
Podstawienie parametr byłoby rozszerzyć do wartości $variable
(odpowiedniej domeny w kodzie), ale byłoby wyjść skryptu z komunikatem o błędzie, jeśli wartość nie jest pusta dostępny. Nie dostaniesz dokładnie to samo formatowanie komunikatu o błędzie, jak w kodzie, ale to w zasadzie zachowują się tak samo, jeśli $CODE
jest nieprawidłowy:
$ bash script.sh
script.sh: line 12: domain[${CODE,,}]: ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS
Jeśli zależy Ci na liczbie postaci, możemy to jeszcze skrócić:
CODE=A
declare -A domain=( [a]=tencent.ig [b]=vng.pubgmobile [c]=pubg.krmobile [d]=rekoo.pubgm )
PN=com.${domain[${CODE,,}]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
Oprócz usuwania niepotrzebnych nowych linii, usunąłem również com.
z każdej domeny (jest to zamiast tego dodane w przypisaniu do PN
).
Zauważ, że cały powyższy kod działałby nawet dla wartości wieloznakowej w $CODE
(jeśli istniałyby dla nich małe litery w domain
tablicy).
Jeśli $CODE
zamiast tego byłby indeks numeryczny (zero), to nieco uprościłoby kod:
CODE=0
domain=( com.tencent.ig com.vng.pubgmobile com.pubg.krmobile com.rekoo.pubgm )
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
Ułatwi to dodatkowo odczyt domain
tablicy z pliku pomocniczego zawierającego jeden wpis w wierszu:
CODE=0
readarray -t domain <domains.txt
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
bash
kod? Czy masz na myśli jakąś inną powłokę?