इस पाठ में, हम देखेंगे कि हम बैश पर्यावरण स्क्रिप्ट में इफ-तब-अन्य कथनों का उपयोग कैसे कर सकते हैं जो हम लिखते हैं। यदि-तब-अन्य कथन कुछ शर्तों के पूरा होने पर किसी स्क्रिप्ट की कार्रवाई के पथ को परिभाषित करने का एक तरीका प्रदान करने के लिए एक उपयोगी उपकरण हैं। आइए देखें कि इफ-तब-अन्य कथनों का सिंटैक्स क्या है:
अगरकुछ-आदेश;फिरतब-आदेश;
अन्यथाअन्य-आदेश;
होना
दिखाए गए उपरोक्त आदेश में, यदि SOME-COMMANDS सही पाए जाते हैं या इसकी वापसी की स्थिति 0 पाई जाती है, तो THEN-COMMANDS को निष्पादित किया जाएगा। यदि ऐसा नहीं है, तो ELSE-COMMANDS निष्पादित किए जाते हैं। SOME-COMMANDS में, हम आमतौर पर पूर्णांकों के रूप में कुछ स्ट्रिंग तुलना या मूल्य तुलना करते हैं। हम बहुत सारे ऑपरेशन भी कर सकते हैं जिसमें फाइलें शामिल हैं। आइए कुछ उदाहरण प्राथमिक कमांड देखें जो मुख्य रूप से फ़ाइल-आधारित स्थितियों के साथ काम करते समय उपयोग किए जाते हैं:
मुख्य | अर्थ |
---|---|
[ -प्रति ] | फ़ाइल मौजूद होने पर सत्य लौटाता है। |
[-बी] | जब FILE मौजूद होता है और एक ब्लॉक स्पेशल फाइल होती है, तो यह सच हो जाता है। |
[-सी] | जब FILE मौजूद होता है और एक वर्ण विशेष फ़ाइल होती है, तो यह सही हो जाता है। |
[ -डी ] | जब FILE मौजूद होता है और एक निर्देशिका होती है, तो यह सही होता है। |
[ -और ] | फ़ाइल मौजूद होने पर सत्य लौटाता है। |
[ -एफ ] | जब FILE मौजूद होता है और एक नियमित फ़ाइल होती है, तो यह सही हो जाता है। |
[ -जी ] | जब FILE मौजूद होता है और इसका SGID बिट सेट होता है, तो यह सही हो जाता है। |
[ -एच ] | जब FILE मौजूद होता है और एक सांकेतिक लिंक होता है, तो यह सही हो जाता है। |
[-क] | जब FILE मौजूद होता है और उसका स्टिकी बिट सेट होता है, तो यह सही हो जाता है। |
[ -पी ] | जब FILE मौजूद होता है और एक नामित पाइप (FIFO) होता है, तो यह सही होता है। |
[ -आर ] | जब FILE मौजूद होता है और पढ़ने योग्य होता है, तो यह सच हो जाता है। |
[ -एस ] | जब FILE मौजूद होता है और उसका आकार शून्य से बड़ा होता है, तो यह सही होता है। |
[ -टी ] | जब फ़ाइल डिस्क्रिप्टर FD खुला होता है और एक टर्मिनल को संदर्भित करता है, तो यह सही हो जाता है। |
[-यू] | जब FILE मौजूद होता है और उसका SUID (सेट यूजर आईडी) बिट सेट हो जाता है, तो यह सही हो जाता है। |
[ -में ] | जब FILE मौजूद होता है और लिखने योग्य होता है तो सत्य वापस आ जाता है। |
[-एक्स] | जब FILE मौजूद होता है और निष्पादन योग्य होता है तो सत्य वापस आ जाता है। |
[-ओ] | जब FILE मौजूद होता है और प्रभावी यूजर आईडी के स्वामित्व में होता है, तो यह सच हो जाता है। |
[ -जी ] | जब FILE मौजूद होता है और प्रभावी समूह आईडी के स्वामित्व में होता है, तो यह सही होता है। |
[ -NS ] | जब FILE मौजूद होता है और एक सांकेतिक लिंक होता है, तो यह सही हो जाता है। |
[ -एन ] | FILE के मौजूद होने पर सत्य लौटाता है और इसे पिछली बार पढ़े जाने के बाद से संशोधित किया गया है। |
[ -एस ] | जब FILE मौजूद होता है और एक सॉकेट होता है, तो यह सही होता है। |
THEN-COMMANDS और ELSE-COMMANDS कोई भी मान्य UNIX संचालन या कोई निष्पादन योग्य प्रोग्राम हो सकता है। ध्यान दें कि फिर तथा होना कमांड को सेमी-कोलन द्वारा अलग किया जाता है क्योंकि उन्हें एक स्क्रिप्ट के पूरी तरह से अलग तत्व माना जाता है।
अगर-तब-अन्य सरल उदाहरण
आइए हम अपने पाठ की शुरुआत एक बहुत ही सरल उदाहरण के साथ करते हैं यदि-तब-अन्य कथन।
यहाँ एक नमूना कार्यक्रम है:
जब हम अपनी स्क्रिप्ट चलाते हैं तो हम यहां आउटपुट देखते हैं:
$. ifelse1.shमान समान हैं!
$
कमांड-लाइन तर्कों का उपयोग करना
हम अपनी स्क्रिप्ट में कमांड-लाइन तर्कों का भी उपयोग कर सकते हैं और हमारे द्वारा परिभाषित IF स्टेटमेंट में एक शर्त के रूप में तर्कों की संख्या और मूल्यों का उपयोग कर सकते हैं। हम पहले निम्नलिखित सामग्री के साथ एक टेक्स्ट फ़ाइल को परिभाषित करते हैं:
मेरा नाम लिनक्सहिंट है। मुझे सर्वर पसंद हैं, खासकर उबंटू वाले। वह ऐसे ही है
टर्मिनलिश!
अब, हम एक स्क्रिप्ट लिख सकते हैं जो यह पता लगाती है कि टेक्स्ट फ़ाइल में कोई शब्द आता है या नहीं। आइए अब स्क्रिप्ट को परिभाषित करें:
फेंक दिया '$2 में $1 ढूँढना'पकड़ $ 1 $ 2
अगर [ $? -जन्म 0 ]
फिर
फेंक दिया '$1 फ़ाइल $2 में नहीं मिला।'
अन्यथा
फेंक दिया '$1 फ़ाइल $2 में मिला।'
होना
फेंक दिया 'स्क्रिप्ट पूरी हुई।'
यह स्क्रिप्ट बहुत गतिशील है। यह खोजने के लिए शब्द और कमांड-लाइन से ही फ़ाइल को खोजने पर विचार करता है। अब, हम अपनी स्क्रिप्ट चलाने के लिए तैयार हैं:
. ifelse2.sh प्यार hello.txtहम एक आउटपुट देखेंगे जैसे:
प्यार ढूँढनामेंhello.txtप्यार मिलामें फ़ाइलhello.txt।
स्क्रिप्ट पूरी हुई।
कमांड-लाइन तर्कों की संख्या की जाँच करना
एक IF स्टेटमेंट के अंदर, हम यह भी देख सकते हैं कि कमांड को कितने कमांड-लाइन तर्क दिए गए थे ताकि हम उसी पर कार्य कर सकें:
गिनती=$#अगर [ ! $गिनती -जीटी 1 ]
फिर
फेंक दिया 'पर्याप्त तर्क नहीं'
अन्यथा
फेंक दिया 'बहुत बढ़िया!'
होना
आइए अब इस स्क्रिप्ट को चलाते हैं, हम निम्नलिखित आउटपुट देखेंगे:
अगर-तब-एलिफ-अन्य कथन
हमारे द्वारा परिभाषित कमांड को निष्पादित करने के लिए हमारे प्रोग्राम द्वारा लिए जाने वाले निर्णय पथ को कम करने के लिए हमारे पास एक ही ब्लॉक में कई IF स्टेटमेंट भी हो सकते हैं। हमारी स्क्रिप्ट में कई IF स्टेटमेंट को परिभाषित करने के लिए सिंटैक्स है:
अगरपरीक्षण-आदेश;फिर
परिणाम-आदेश;
एलिफ
अन्य-आदेश;
फिर
अन्य-परिणाम-आदेश;
अन्यथा
वैकल्पिक-आदेश;
होना
हालांकि यह काफी परिचित लगता है और साथ ही साथ फॉलो अप करना भी आसान है। आइए हम यह स्थापित करने के लिए एक सरल उदाहरण परिभाषित करें कि पेड़ कैसे काम करता है:
गिनती=$#अगर [ $गिनती -ईक्यू 1 ]
फिर
फेंक दिया 'केवल एक तर्क मिला।'
एलिफ [ $गिनती -ईक्यू 2 ]
फिर
फेंक दिया 'बेहतर, दो तर्क मिले।'
अन्यथा
फेंक दिया 'अच्छा काम, कई तर्क मिले!'
होना
यहाँ हम इस आदेश के साथ वापस प्राप्त करते हैं:
केस स्टैमेंट का उपयोग करना
IF-ELSE कथन तब उपयोगी होते हैं जब आपके पास विकल्पों की एक बड़ी सूची होती है, जिन पर आपको निर्णय लेने की आवश्यकता होती है। लेकिन अगर आप परिणाम के साथ सटीक मिलान के कुछ मामलों में ही कार्रवाई करना चाहते हैं, तो हम बैश स्क्रिप्ट में भी केस स्टेटमेंट का उपयोग कर सकते हैं। इसका सिंटैक्स इस तरह दिखता है:
मामलाअभिव्यक्तिमेंमामला एक)आदेश-से-निष्पादित;CASE2)आदेश-से-निष्पादित;
CASE2)आदेश-से-निष्पादित;
...)आदेश-से-निष्पादित;
*)आदेश-से-निष्पादित;
esac
* के साथ अंतिम मामला डिफ़ॉल्ट मामले के रूप में कार्य करता है और जब उपरोक्त परिभाषित मामलों में से कोई भी मेल नहीं मिलता है तो निष्पादित किया जाएगा।
आइए हम जल्दी से CASE कथनों का उपयोग करके एक सरल उदाहरण का निर्माण करें:
मामला '$ 1' में1)
फेंक दिया 'मान 1 है।'
;;
2)
फेंक दिया 'मान 2 है।'
;;
3)
फेंक दिया 'मान 3 है'
;;
*)
फेंक दिया 'अन्य मूल्य पारित।'
esac
प्रत्येक केस स्टेटमेंट को ;; (डबल सेमी-कोलन मार्क्स)। यहाँ हम इस आदेश के साथ वापस प्राप्त करते हैं:
निष्कर्ष
इस पाठ में, हमने देखा कि हम बैश स्क्रिप्ट में IF-ELSE, IF-THEN-ELIF और CASE स्टेटमेंट का उपयोग कैसे कर सकते हैं, जिसे हम अपने प्रोग्राम में मौजूद मूल्यों के आधार पर विशिष्ट कार्रवाई करने के लिए परिभाषित करते हैं या उपयोगकर्ता द्वारा पोजिशनल का उपयोग करके पारित किया जाता है। पैरामीटर।