Supponendo che tu stia utilizzando la bashversione 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 $PNvariabile viene assegnato il nome di dominio corrispondente al $CODEvalore minuscolo ( ${CODE,,}restituisce il valore di $CODEsolo lettere minuscole trasformate) da questo array, ma se $CODEnon corrisponde a una voce valida domainnell'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 $CODEnon è 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 domainnell'array).
Se invece $CODEfosse 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 domaindell'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}
bashcodice? O hai in mente qualche altra shell?