भावों का संयोजन
अधिक जटिल मूल्यांकन बनाने के लिए अभिव्यक्तियों को संयोजित करना भी संभव है। तार्किक ऑपरेटरों का उपयोग करके अभिव्यक्तियों को संयोजित किया जाता है। हमने इन्हें अध्याय 17 में देखा, जब हमें इसके बारे में पता चला खोज आज्ञा। इसके लिए तीन तार्किक ऑपरेशन हैं परीक्षण और [[]]. वे AND, OR और NOT हैं। परीक्षण और [[]] इन परिचालनों को दर्शाने के लिए विभिन्न ऑपरेटरों का उपयोग करें:
तालिका 27-4: तार्किक संचालक
आपरेशन tesटी [[ ]] और (( ))
आपरेशन tesटी [[ ]] और (( ))
और -ए &&
OR -ओ ||
नहीं ! !
यहां AND ऑपरेशन का एक उदाहरण दिया गया है. निम्नलिखित स्क्रिप्ट यह निर्धारित करती है कि कोई पूर्णांक मानों की सीमा के भीतर है या नहीं:
#! / Bin / bash
# परीक्षण-पूर्णांक3: निर्धारित करें कि कोई पूर्णांक a के भीतर है या नहीं
# मानों की निर्दिष्ट सीमा.
MIN_VAL=1 MAX_VAL=100
आईएनटी=50
#! / Bin / bash
# परीक्षण-पूर्णांक3: निर्धारित करें कि कोई पूर्णांक a के भीतर है या नहीं
# मानों की निर्दिष्ट सीमा.
MIN_VAL=1 MAX_VAL=100
आईएनटी=50
यदि [[ "$INT" =~ ^-?[0-9]+$ ]]; तब
यदि [[INT -ge MIN_VAL && INT -le MAX_VAL ]]; फिर प्रतिध्वनि करें "$INT $MIN_VAL से $MAX_VAL के भीतर है।"
अन्य
प्रतिध्वनि "$INT सीमा से बाहर है।"
फाई अन्य
प्रतिध्वनि "INT एक पूर्णांक नहीं है।" >&2 निकास 1
fi
यदि [[ "$INT" =~ ^-?[0-9]+$ ]]; तब
यदि [[INT -ge MIN_VAL && INT -le MAX_VAL ]]; फिर प्रतिध्वनि करें "$INT $MIN_VAL से $MAX_VAL के भीतर है।"
अन्य
प्रतिध्वनि "$INT सीमा से बाहर है।"
फाई अन्य
प्रतिध्वनि "INT एक पूर्णांक नहीं है।" >&2 निकास 1
fi
इस स्क्रिप्ट में, हम पूर्णांक का मान निर्धारित करते हैं INT के मूल्यों के बीच स्थित है MIN_VAL और MAX_VAL. यह एक ही प्रयोग द्वारा किया जाता है [[]], जिसमें से अलग किए गए दो भाव शामिल हैं && ऑपरेटर। हम इसका उपयोग करके कोड भी कर सकते थे परीक्षण:
if [ $INT -ge $MIN_VAL -a $INT -le $MAX_VAL ]; फिर प्रतिध्वनि करें "$INT $MIN_VAL से $MAX_VAL के भीतर है।"
अन्य
प्रतिध्वनि "$INT सीमा से बाहर है।"
fi
if [ $INT -ge $MIN_VAL -a $INT -le $MAX_VAL ]; फिर प्रतिध्वनि करें "$INT $MIN_VAL से $MAX_VAL के भीतर है।"
अन्य
प्रतिध्वनि "$INT सीमा से बाहर है।"
fi
RSI ! निषेध संचालिका किसी अभिव्यक्ति के परिणाम को उलट देती है। यदि कोई अभिव्यक्ति गलत है तो यह सत्य लौटाता है, और यदि कोई अभिव्यक्ति सत्य है तो यह गलत लौटाता है। निम्नलिखित स्क्रिप्ट में, हम मूल्यों को खोजने के लिए अपने मूल्यांकन के तर्क को संशोधित करते हैं INT जो निर्दिष्ट सीमा से बाहर हैं:
#! / Bin / bash
# परीक्षण-पूर्णांक4: निर्धारित करें कि कोई पूर्णांक a के बाहर है या नहीं
# मानों की निर्दिष्ट सीमा.
MIN_VAL=1 MAX_VAL=100
आईएनटी=50
यदि [[ "$INT" =~ ^-?[0-9]+$ ]]; तब
अगर [[ ! (INT -ge MIN_VAL && INT -le MAX_VAL) ]]; फिर प्रतिध्वनि करें "$INT $MIN_VAL से $MAX_VAL के बाहर है।"
अन्य
प्रतिध्वनि "$INT सीमा में है।"
#! / Bin / bash
# परीक्षण-पूर्णांक4: निर्धारित करें कि कोई पूर्णांक a के बाहर है या नहीं
# मानों की निर्दिष्ट सीमा.
MIN_VAL=1 MAX_VAL=100
आईएनटी=50
यदि [[ "$INT" =~ ^-?[0-9]+$ ]]; तब
अगर [[ ! (INT -ge MIN_VAL && INT -le MAX_VAL) ]]; फिर प्रतिध्वनि करें "$INT $MIN_VAL से $MAX_VAL के बाहर है।"
अन्य
प्रतिध्वनि "$INT सीमा में है।"
प्रतिध्वनि "INT एक पूर्णांक नहीं है।" >&2 निकास 1
fi
प्रतिध्वनि "INT एक पूर्णांक नहीं है।" >&2 निकास 1
fi
समूहीकरण के लिए हम अभिव्यक्ति के चारों ओर कोष्ठक भी शामिल करते हैं। यदि इन्हें शामिल नहीं किया गया, तो निषेध केवल पहली अभिव्यक्ति पर लागू होगा, न कि दोनों के संयोजन पर। इसके साथ कोडिंग करें परीक्षण इस प्रकार किया जाएगा:
अगर [ ! \( $INT -ge $MIN_VAL -a $INT -le $MAX_VAL \) ]; फिर प्रतिध्वनि करें "$INT $MIN_VAL से $MAX_VAL के बाहर है।"
अन्य
प्रतिध्वनि "$INT सीमा में है।"
fi
अगर [ ! \( $INT -ge $MIN_VAL -a $INT -le $MAX_VAL \) ]; फिर प्रतिध्वनि करें "$INT $MIN_VAL से $MAX_VAL के बाहर है।"
अन्य
प्रतिध्वनि "$INT सीमा में है।"
fi
चूँकि सभी अभिव्यक्तियाँ और ऑपरेटर्स द्वारा उपयोग किया जाता है परीक्षण शेल द्वारा कमांड तर्क के रूप में माना जाता है (इसके विपरीत)। [[]] और (( )) ), ऐसे अक्षर जिनका विशेष अर्थ है खूब जोर से पीटनाइस तरह के रूप में, <, >, (, तथा ), उद्धृत किया जाना चाहिए या बच जाना चाहिए।
वह देख कर परीक्षण और [[]] लगभग वही कार्य करें, जो बेहतर हो? परीक्षण पारंपरिक है (और POSIX का हिस्सा), जबकि [[]] के लिए विशिष्ट है खूब जोर से पीटना. यह जानना महत्वपूर्ण है कि उपयोग कैसे करें परीक्षण, क्योंकि यह बहुत व्यापक रूप से उपयोग किया जाता है, लेकिन [[]] यह स्पष्ट रूप से अधिक उपयोगी है और कोड करना आसान है, इसलिए इसे आधुनिक लिपियों के लिए प्राथमिकता दी जाती है।
पोर्टेबिलिटी छोटे दिमागों का शौक है
यदि आप "वास्तविक" यूनिक्स लोगों से बात करते हैं, तो आपको तुरंत पता चलता है कि उनमें से कई लोग लिनक्स को बहुत पसंद नहीं करते हैं। वे इसे अपवित्र और अशुद्ध मानते हैं। यूनिक्स उपयोगकर्ताओं का एक सिद्धांत यह है कि सब कुछ "पोर्टेबल" होना चाहिए। इसका मतलब यह है कि आपके द्वारा लिखी गई कोई भी स्क्रिप्ट किसी भी यूनिक्स-जैसी प्रणाली पर बिना किसी बदलाव के चलने में सक्षम होनी चाहिए।
यूनिक्स लोगों के पास इस पर विश्वास करने का अच्छा कारण है। यह देखने के बाद कि POSIX से पहले कमांड और शेल्स के मालिकाना विस्तार ने यूनिक्स दुनिया में क्या किया, वे स्वाभाविक रूप से अपने प्रिय ओएस पर लिनक्स के प्रभाव से सावधान हैं।
लेकिन पोर्टेबिलिटी का एक गंभीर नकारात्मक पहलू है। यह प्रगति को रोकता है. इसके लिए आवश्यक है कि चीजें हमेशा "न्यूनतम सामान्य विभाजक" तकनीकों का उपयोग करके की जाएं। शेल प्रोग्रामिंग के मामले में, इसका अर्थ है हर चीज़ को संगत बनाना sh, मूल बॉर्न शेल।
यह नकारात्मक पक्ष वह बहाना है जिसका उपयोग स्वामित्व सॉफ़्टवेयर विक्रेता अपने स्वामित्व एक्सटेंशन को उचित ठहराने के लिए करते हैं, केवल वे उन्हें "नवाचार" कहते हैं। लेकिन वे वास्तव में अपने ग्राहकों के लिए केवल लॉक-इन डिवाइस हैं।
जीएनयू उपकरण, जैसे खूब जोर से पीटना, ऐसा कोई प्रतिबंध नहीं है। वे मानकों का समर्थन करके और सार्वभौमिक रूप से उपलब्ध होकर पोर्टेबिलिटी को प्रोत्साहित करते हैं। आप इंस्टॉल कर सकते हैं खूब जोर से पीटना और अन्य जीएनयू उपकरण लगभग किसी भी प्रकार के सिस्टम पर, यहां तक कि विंडोज़ पर, बिना किसी लागत के। इसलिए बेझिझक सभी सुविधाओं का उपयोग करें खूब जोर से पीटना। आईटी इस वास्तव में पोर्टेबल।