शेल स्क्रिप्टिंग के लिए बिगिनर गाइड 4 स्थितियां और यदि-तब विवरण
हमने शेल स्क्रिप्टिंग पर अपने गाइड में पर्याप्त मूल बातें कवर की हैं जिन्हें आपको सहज प्रयोग करना चाहिए। इस सप्ताह की किस्त में, हम कुछ और मज़ेदार चीज़ों से निपटेंगे, जैसे हालात और "अगर-तब" बयान.
शर्तें क्या हैं?
रोजमर्रा की भाषा में, हम कहते हैं कि परिस्थितियाँ ऐसी आवश्यकताएँ हैं जो किसी चीज़ के घटित होने के लिए पूरी होनी चाहिए। मेरे लैपटॉप को इंटरनेट से कनेक्ट करने में सक्षम होने के लिए, कई शर्तें हैं जो पूरी होनी चाहिए, जैसे कि ISP, मॉडेम और / या राउटर चालू होना, मेरा लैपटॉप चालू होना, आदि। यह बहुत आसान है, और यदि कोई हो उन आवश्यकताओं को पूरा नहीं किया जाता है, परिणाम - मेरा लैपटॉप इंटरनेट से कनेक्ट हो रहा है - ऐसा नहीं होता है.
कंप्यूटिंग के दायरे में स्थितियां समान रूप से काम करती हैं। हम परीक्षण कर सकते हैं कि क्या एक स्ट्रिंग किसी अन्य स्ट्रिंग से मेल खाती है, चाहे वह किसी अन्य स्ट्रिंग से मेल न खाती हो, या यहां तक कि अगर यह बिल्कुल भी मौजूद है। इसी प्रकार, हम यह देखने के लिए संख्यात्मक तर्कों का परीक्षण कर सकते हैं कि क्या कोई दूसरे की तुलना में महान है, कम है, या उसके बराबर है। परीक्षण की शर्तों के पूरा होने के बाद कुछ होने के लिए, हम "if-then" कथनों का उपयोग करते हैं। उनका प्रारूप बहुत सरल है.
अगर धारणा
फिर
command1
command2
...
commandn
फाई
यदि विवरण
चलो एक त्वरित छोटी परीक्षण स्क्रिप्ट चलाते हैं, हम करेंगे?
यदि परीक्षण $ 1 -gt $ 2 है
फिर
गूंज "$ 1 $ 2 से अधिक है"
फाई
आप देखेंगे कि केवल तभी जब यह शर्त सही होगी, स्क्रिप्ट निम्नलिखित कमांड को निष्पादित करेगी। अन्यथा, "यदि" कथन बाहर निकल जाएगा। यदि "अगर" कथन के बाद कोई कमांड है, तो उन्हें सामान्य रूप से चलाया जाएगा। मैंने इसकी व्याख्या करने के लिए हमारी उपरोक्त स्क्रिप्ट के अंत में निम्नलिखित पंक्ति जोड़ी:
गूंज "यह बयान के बाद आता है"
यहाँ कुछ अन्य संख्यात्मक ऑपरेटर हैं जिन्हें आप आज़माना चाहते हैं:
- -eq: के बराबर
- -ne: के बराबर नहीं
- -लेफ्टिनेंट: से कम
- -le: से कम या बराबर
- -gt: से अधिक
- -ge: से अधिक या बराबर
परीक्षण स्ट्रिंग्स
अब, यदि हम अपनी लिपि की पहली पंक्ति को संशोधित करते हैं:
यदि परीक्षण $ 1 = $ 2 है
अगर दोनों समान हैं तो स्थिति का परीक्षण किया जाएगा। हालांकि यहाँ एक पकड़ है !! बराबर चिह्न (=) के उपयोग से दो तारों की तुलना होती है, न कि संख्याओं की। यदि आप संख्याओं की तुलना करना चाहते हैं, तो आपको "-eq" ऑपरेटर का उपयोग उसी तरह करना होगा जैसे हमने "-tt" का उपयोग किया था।.
अब, एक और संशोधन करते हैं:
अगर परीक्षण $ 1! = $ 2
विस्मयादिबोधक बिंदु (!) का समावेश एक "नहीं" संशोधक के रूप में कार्य करता है। यही है, यह केवल निम्न कमांड चलाता है जब दो तार मेल नहीं खाते हैं.
यहां कुछ और स्ट्रिंग-आधारित परीक्षणों की सूची दी गई है जिनका आप उपयोग कर सकते हैं:
- स्ट्रिंग: यदि स्ट्रिंग रिक्त (अशक्त) नहीं है या किसी तरह से परिभाषित नहीं है, तो केवल स्वयं के तर्क द्वारा परीक्षण का उपयोग करना
- -n स्ट्रिंग: यह परीक्षण करेगा यदि स्ट्रिंग रिक्त नहीं है और परिभाषित है
- -z string: यह परीक्षण करेगा यदि स्ट्रिंग रिक्त है और इसे इस तरह परिभाषित किया गया है
अगर इसके बारे में क्या?
मैं मानता हूँ, कि धारा शीर्षक निश्चित रूप से एक बुरा वाक्य था। ठीक है, हम जानते हैं कि यदि कोई परीक्षण सत्य है, तो किसी कमांड को कैसे निष्पादित किया जाए, लेकिन अगर हम किसी अन्य कमांड को गलत तरीके से निष्पादित करना चाहते हैं, तो क्या होगा? हम अपने "if-then" स्टेटमेंट्स में एक सेक्शन जोड़कर दोनों को आसानी से जोड़ सकते हैं - "a"!
अगर धारणा
फिर
command1
command2
...
commandn
अन्य
command1
command2
...
commandn
फाई
चलो एक साथ एक साधारण स्क्रिप्ट डालते हैं.
उचित इंडेंटेशन के साथ सब कुछ है। यदि आप बारीकी से देखते हैं, तो आप देखेंगे कि हमने परीक्षण कमांड के बजाय चौकोर कोष्ठक ([और]) का उपयोग किया है। वे हमारे उद्देश्यों के लिए कार्यात्मक रूप से समतुल्य हैं, और आप विभिन्न कारणों से वर्ग कोष्ठक को देखने की अधिक संभावना रखते हैं, इसलिए हम अभी से उनका उपयोग करेंगे.
यहाँ क्या उत्पादन की तरह दिखेगा:
इट्स दैट ईजी!
अब मैं क्या करू?
अब जब आप जानते हैं कि "if-then-अन्यथा" स्टेटमेंट्स का उपयोग कैसे करें, तो आप स्क्रिप्ट चला सकते हैं जो परीक्षण कर सकते हैं। उदाहरण के लिए, आप एक स्क्रिप्ट चला सकते हैं जो किसी फ़ाइल के md5 हैश की गणना करेगा और फिर उसकी तुलना एक फ़ाइल में डाउनलोड की गई फ़ाइल से कर सकता है, यह देखने के लिए कि क्या वे मेल खाते हैं.
कुछ बोनस बिंदुओं के लिए, आप एक स्क्रिप्ट बना सकते हैं जिसमें "for" लूप होता है, लेकिन किसी सूची फ़ाइल से बाहर लाइनों को पढ़ने के बजाय परीक्षण स्थितियों का उपयोग करता है ...
हम अपने शुरुआती गाइड में शेल स्क्रिप्टिंग के लिए कुछ और दिलचस्प हिस्सों को ले रहे हैं। यदि आप पिछले पाठों से चूक गए हैं, तो यहां एक त्वरित सूची की जाँच करें:
- शैल स्क्रिप्टिंग की मूल बातें
- लूप्स के लिए उपयोग करना
- अधिक बुनियादी आज्ञाएँ
- लिनक्स गोले के बीच अंतर क्या हैं?
- बेसिक रेगुलर एक्सप्रेशंस का उपयोग कैसे करें
यदि आपने ऐसी स्क्रिप्ट बनाई या उपयोग की हैं जो परीक्षण स्थितियों का उपयोग करती हैं, यदि-तब-तब और "लूप्स" के लिए, टिप्पणियों में हमारे साथ साझा करें!