bashSürüm 4.0 veya daha yenisini kullandığınızı varsayarsak ...
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}
Kodda, her biri tek harfli küçük harf anahtarıyla ilişkili tüm etki alanı adlarını içeren ilişkilendirilebilir bir dizi tanımlarım.
$PNDeğişken alt kasalı tekabül alan adı atanır $CODE(değer ${CODE,,}döndürür değerini $CODEsadece küçük harfler dönüştü) bu diziden ama eğer $CODEgeçerli bir girişe karşılık gelmiyor domainlistede, bir komut dosyasını çıkar hata.
${variable:?error message}Parametre ikame değerine artıracağı $variable(kodda uygun etki) ama değeri mevcut boş değilse, hata iletisi ile komut çıkış olacaktır. Hata iletisinin kodunuzdaki biçimiyle tam olarak aynı biçimlendirmesini almazsınız, ancak geçersizse esasen aynı davranır$CODE :
$ bash script.sh
script.sh: line 12: domain[${CODE,,}]: ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS
Karakter sayısını önemsiyorsanız, bunu daha da kısaltabiliriz:
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}
Gereksiz yeni satırları silmenin yanı sıra, com.her alan adından da kaldırdım (bunun yerine, atamaya eklenir PN).
Yukarıdaki tüm kodların çok karakterli bir değer için bile çalışacağını unutmayın $CODE( domaindizide bunlar için daha düşük kasalı anahtarlar varsa ).
Eğer $CODE(sıfır tabanlı) dizin yerine sayısal oldu bu kodu biraz basitleştirmek olacaktır:
CODE=0
domain=( com.tencent.ig com.vng.pubgmobile com.pubg.krmobile com.rekoo.pubgm )
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
Bu, domaindiziyi her satırda bir giriş içeren yardımcı bir dosyadan okumayı gerçekten kolaylaştıracaktır :
CODE=0
readarray -t domain <domains.txt
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
bashkod mu? Yoksa aklınızda başka bir kabuk var mı?