मान लें कि आप 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
कोड है? या आपके मन में कोई और खोल है?