Якщо ви користуєтеся bashверсією 4.0 або новішою версією ...
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}
У коді я визначаю асоціативний масив, що містить усі доменні імена, кожне з яких пов'язане з однією літерою малої літери.
$PNЗмінної присвоюється доменне ім'я , відповідне нижнього регістру $CODEзначення ( ${CODE,,}повертає значення $CODEперетворилися в малі літери тільки) з цього масиву, але якщо $CODEне відповідає дійсній записи в domainсписку, він виходить зі сценарію з помилка.
${variable:?error message}Підстановки параметрів буде розширюватися до значення $variable(відповідного домену в коді) , але було б вийти зі сценарію з повідомленням про помилку , якщо значення порожнім не доступно. Ви не отримуєте точно таке ж форматування повідомлення про помилку, як у вашому коді, але воно, по суті, поводиться так само, якщо $CODEнедійсне:
$ bash script.sh
script.sh: line 12: domain[${CODE,,}]: ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS
Якщо ви дбаєте про кількість символів, ми можемо це ще більше скоротити:
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}
Крім видалення зайвих нових рядків, я також видаляв com.з кожного домену (це замість цього додається у призначенні до PN).
Зверніть увагу, що весь код вище буде працювати навіть для багатозначного значення в $CODE(якщо в domainмасиві існували ключі з нижчими регістрами ).
Якщо $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}
Це додатково полегшить зчитування domainмасиву з допоміжного файлу, що містить один запис у рядку:
CODE=0
readarray -t domain <domains.txt
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
bashкод? Або ви маєте на увазі якусь іншу оболонку?