En supposant que vous utilisez la bashversion 4.0 ou plus récente ...
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}
Dans le code, je définis un tableau associatif contenant tous les noms de domaine, chacun associé à une clé minuscule à une seule lettre.
La $PNvariable se voit attribuer le nom de domaine correspondant à la $CODEvaleur en minuscules ( ${CODE,,}renvoie la valeur de $CODEtransformée en lettres minuscules uniquement) à partir de ce tableau, mais si le $CODEne correspond pas à une entrée valide dans la domainliste, il quitte le script avec un Erreur.
La ${variable:?error message}substitution de paramètres s'étendrait à la valeur de $variable(le domaine approprié dans le code) mais quitterait le script avec le message d'erreur si la valeur est vide non disponible. Vous n'obtenez pas exactement le même formatage du message d'erreur que dans votre code, mais il se comporterait essentiellement de la même manière s'il $CODEn'est pas valide:
$ bash script.sh
script.sh: line 12: domain[${CODE,,}]: ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS
Si vous vous souciez du nombre de caractères, nous pouvons le raccourcir davantage:
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}
Outre la suppression des sauts de ligne inutiles, j'ai également supprimé com.de chaque domaine (cela est ajouté à la place dans l'affectation à PN).
Notez que tout le code ci-dessus fonctionnerait même pour une valeur à plusieurs caractères dans $CODE(si des clés en bas de casse existaient pour celles-ci dans le domaintableau).
Si $CODEc'était un index numérique (basé sur zéro) à la place, cela simplifierait un peu le code:
CODE=0
domain=( com.tencent.ig com.vng.pubgmobile com.pubg.krmobile com.rekoo.pubgm )
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
De plus, cela faciliterait la lecture du domaintableau à partir d'un fichier auxiliaire contenant une entrée par ligne:
CODE=0
readarray -t domain <domains.txt
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
bashcode? Ou avez-vous un autre obus en tête?