En supposant que vous utilisez la bash
version 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 $PN
variable se voit attribuer le nom de domaine correspondant à la $CODE
valeur en minuscules ( ${CODE,,}
renvoie la valeur de $CODE
transformée en lettres minuscules uniquement) à partir de ce tableau, mais si le $CODE
ne correspond pas à une entrée valide dans la domain
liste, 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 $CODE
n'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 domain
tableau).
Si $CODE
c'é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 domain
tableau à 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}
bash
code? Ou avez-vous un autre obus en tête?