Suponiendo que está utilizando la bash
versión 4.0 o posterior ...
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}
En el código, defino una matriz asociativa que contiene todos los nombres de dominio, cada uno asociado con una sola letra minúscula.
A la $PN
variable se le asigna el nombre de dominio correspondiente al valor en minúsculas $CODE
(solo ${CODE,,}
devuelve el valor $CODE
convertido en letras minúsculas) de esta matriz, pero si $CODE
no corresponde a una entrada válida en la domain
lista, sale del script con un error.
La ${variable:?error message}
sustitución de parámetros se expandiría al valor de $variable
(el dominio apropiado en el código) pero saldría del script con el mensaje de error si el valor está vacío no disponible. No obtiene exactamente el mismo formato del mensaje de error que en su código, pero esencialmente se comportaría igual si $CODE
no es válido:
$ bash script.sh
script.sh: line 12: domain[${CODE,,}]: ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS
Si te importa el recuento de personajes, podemos acortar esto aún más:
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}
Además de eliminar nuevas líneas innecesarias, también he eliminado com.
de cada dominio (esto se agrega en la asignación a PN
).
Tenga en cuenta que todo el código anterior funcionaría incluso para un valor de varios caracteres en $CODE
(si existieran claves en minúsculas para estos en la domain
matriz).
Si $CODE
se tratara de un índice numérico (basado en cero), esto simplificaría un poco el código:
CODE=0
domain=( com.tencent.ig com.vng.pubgmobile com.pubg.krmobile com.rekoo.pubgm )
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
Esto también facilitaría la lectura de la domain
matriz desde un archivo auxiliar que contiene una entrada por línea:
CODE=0
readarray -t domain <domains.txt
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
bash
código? ¿O tienes algún otro caparazón en mente?