Supponendo che tu stia utilizzando la bash
versione 4.0 o successiva ...
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}
Nel codice, definisco un array associativo che contiene tutti i nomi di dominio, ciascuno associato a una singola lettera minuscola.
Alla $PN
variabile viene assegnato il nome di dominio corrispondente al $CODE
valore minuscolo ( ${CODE,,}
restituisce il valore di $CODE
solo lettere minuscole trasformate) da questo array, ma se $CODE
non corrisponde a una voce valida domain
nell'elenco, esce dallo script con un errore.
La ${variable:?error message}
sostituzione dei parametri si espanderebbe al valore di $variable
(il dominio appropriato nel codice) ma uscirebbe dallo script con il messaggio di errore se il valore è vuoto non disponibile. Non ottieni esattamente la stessa formattazione del messaggio di errore del codice, ma sostanzialmente si comporterebbe lo stesso se $CODE
non è valido:
$ bash script.sh
script.sh: line 12: domain[${CODE,,}]: ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS
Se ti interessa il conteggio dei personaggi, possiamo accorciare ulteriormente questo:
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}
Oltre all'eliminazione di newline non necessarie, ho anche rimosso com.
da ciascun dominio (questo viene invece aggiunto nell'assegnazione a PN
).
Si noti che tutto il codice sopra funzionerebbe anche per un valore composto da più caratteri $CODE
(se esistevano chiavi con lettere minuscole per questi domain
nell'array).
Se invece $CODE
fosse un indice numerico (a base zero), questo semplificherebbe un po 'il codice:
CODE=0
domain=( com.tencent.ig com.vng.pubgmobile com.pubg.krmobile com.rekoo.pubgm )
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
Ciò renderebbe inoltre più semplice la lettura domain
dell'array da un file ausiliario contenente una voce per riga:
CODE=0
readarray -t domain <domains.txt
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
bash
codice? O hai in mente qualche altra shell?