बैश एक्सप्रेशन एक बैश कंडीशनल स्टेटमेंट बनाने के लिए उपयोग किए जाने वाले ऑपरेटरों, सुविधाओं या मूल्यों का संयोजन है। कंडीशनल एक्सप्रेशन बाइनरी या यूनरी एक्सप्रेशन हो सकता है जिसमें न्यूमेरिक, स्ट्रिंग या कोई भी कमांड शामिल होता है जिसकी सफलता के समय वापसी की स्थिति शून्य होती है।
कई सशर्त अभिव्यक्तियां हैं जिनका उपयोग फाइलों के साथ परीक्षण करने के लिए किया जा सकता है। निम्नलिखित कुछ सशर्त अभिव्यक्तियाँ हैं जो सहायक हैं।
- [ -e filepath ] अगर फ़ाइल मौजूद है तो सही है।
- [ -x filepath ] यदि फ़ाइल मौजूद है और निष्पादन योग्य है तो सही है।
- [ -S filepath ] यदि फ़ाइल मौजूद है और यह एक सॉकेट फ़ाइल है तो सत्य लौटाता है।
- [ expr1 -a expr2 ] यदि दोनों व्यंजक सत्य हैं तो सत्य लौटता है।
- [ expr1 -o expr2 ] यदि व्यंजक1 या 2 में से कोई एक सत्य है, तो सत्य लौटाता है।
फाइलों, स्ट्रिंग्स और न्यूमेरिक्स की जांच के लिए अधिक सशर्त अभिव्यक्ति के लिए कृपया बैश मैन पेज देखें।
बैश उदाहरण 1. फ़ाइल अस्तित्व की जाँच करें
निम्नलिखित बैश शेल स्क्रिप्ट कोड-स्निपेट फ़ाइल नाम को उसके पूर्ण पथ के साथ प्राप्त करता है, और जांचता है कि फ़ाइल मौजूद है या नहीं और यह उचित जानकारी फेंकता है।
$ cat exist.sh #! /bin/bash file=$1 if [ -e $file ] then echo -e "File $file exists" else echo -e "File $file doesnt exists" fi $ ./exist.sh /usr/bin/boot.ini File /usr/bin/boot.ini exists
विभिन्न प्रकार के बैश को समझने के लिए हमारे पिछले लेख को देखें।
बैश उदाहरण 2. संख्याओं की तुलना करें
नीचे दी गई स्क्रिप्ट उपयोगकर्ता से दो पूर्णांक संख्याएं पढ़ती है, और जांचती है कि दोनों संख्याएं एक दूसरे के बराबर या अधिक या कम हैं या नहीं।
$ cat numbers.sh #!/bin/bash echo "Please enter first number" read first echo "Please enter second number" read second if [ $first -eq 0 ] && [ $second -eq 0 ] then echo "Num1 and Num2 are zero" elif [ $first -eq $second ] then echo "Both Values are equal" elif [ $first -gt $second ] then echo "$first is greater than $second" else echo "$first is lesser than $second" fi $ ./numbers.sh Please enter first number 1 Please enter second number 1 Both Values are equal $ ./numbers.sh Please enter first number 3 Please enter second number 12 3 is lesser than 12
यदि आप स्क्रिप्टिंग को बैश करने के लिए नए हैं, तो हमारे बैश परिचय ट्यूटोरियल को देखें।
<केंद्र> केंद्र>बैश उदाहरण 3. मूल अंकगणित कैलकुलेटर
यह उदाहरण इनपुट पढ़ता है, जो एक प्रकार का अंकगणितीय ऑपरेशन है जो बैश चर (inp1 और inp2) पर प्रदर्शन करना चाहता है। अंकगणितीय संक्रिया जोड़, घटाव या गुणा हो सकती है..
$ cat calculator.sh #!/bin/bash inp1=12 inp2=11 echo "1. Addition" echo "2. Subtraction" echo "3. Multiplication" echo -n "Please choose a word [1,2 or 3]? " read oper if [ $oper -eq 1 ] then echo "Addition Result " $(($inp1 + $inp2)) else if [ $oper -eq 2 ] then echo "Subtraction Result " $(($inp1 - $inp2)) else if [ $oper -eq 3 ] then echo "Multiplication Result " $(($inp1 * $inp2)) else echo "Invalid input" fi fi fi $ ./calculator.sh 1. Addition 2. Subtraction 3. Multiplication Please choose a word [1,2 or 3]? 4 Invalid input
बैश विशेष मापदंडों ( $*, $@, $#, $$, $!, $?, $-, $_ ) का उपयोग करने का तरीका जानने से आपकी स्क्रिप्टिंग का जीवन आसान हो जाएगा।
बैश उदाहरण 4. IP पता पढ़ें और पिंग करें
निम्न स्क्रिप्ट का उपयोग आईपी पते को पढ़ने और यह जांचने के लिए किया जाता है कि क्या आईपी पता पहुंच योग्य है, और उपयुक्त संदेश प्रिंट करता है।
$ cat ipaddr.sh #!/bin/bash echo "Enter the Ipaddress" read ip if [ ! -z $ip ] then ping -c 1 $ip if [ $? -eq 0 ] ; then echo "Machine is giving ping response" else echo "Machine is not pinging" fi else echo "IP Address is empty" fi $ ./ipaddr.sh Enter the Ipaddress 10.176.191.106 Pinging 10.176.191.106 with 32 bytes of data: Reply from 10.176.191.106: bytes=32 time<1ms TTL=128 Ping statistics for 10.176.191.106: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Machine is giving ping response
इस उदाहरण में, -z सही लौटाता है यदि ipaddress की लंबाई शून्य है, जब शर्त से पहले ! (नकारात्मक) ऑपरेटर, यदि अभिव्यक्ति झूठी है, तो यह भाग में प्रवेश करती है और निष्पादित होती है। इसलिए जब आईपी पता शून्य नहीं होता है, तो यह प्रवेश करता है और जांचता है कि आईपी पता पहुंच योग्य है या नहीं।
बैश उदाहरण 5. इंस्टॉलर स्क्रिप्ट
अधिकांश पैकेजों की इंस्टालर स्क्रिप्ट उन्हें रूट उपयोगकर्ता के रूप में निष्पादित करने की अनुमति नहीं देगी। स्क्रिप्ट उस उपयोगकर्ता की जांच करती है जो निष्पादित कर रहा है और त्रुटि फेंकता है।
निम्न स्क्रिप्ट, आपको केवल ओरेकल इंस्टॉलर स्क्रिप्ट को निष्पादित करने की अनुमति देती है यदि निष्पादित करने वाला उपयोगकर्ता गैर रूट है।
$ cat preinstaller.sh #!/bin/bash if [ `whoami` != 'root' ]; then echo "Executing the installer script" ./home/oracle/databases/runInstaller.sh else echo "Root is not allowed to execute the installer script" fi Executing the script as a root user, # ./preinstaller.sh Root is not allowed to execute the installer script
इस उदाहरण में whoami कमांड के आउटपुट की तुलना "रूट" शब्द से की जाती है। स्ट्रिंग तुलना के लिए ==,!=, < और इस्तेमाल किया जाना चाहिए और संख्यात्मक तुलना के लिए eq, ne, lt और gt का उपयोग किया जाना चाहिए।
बैश उदाहरण 6. उन्नत कोष्ठक
उपरोक्त सभी उदाहरणों में, हमने सशर्त अभिव्यक्ति को संलग्न करने के लिए केवल एकल कोष्ठक का उपयोग किया है, लेकिन बैश दोहरे कोष्ठक की अनुमति देता है जो एकल-ब्रैकेट सिंटैक्स के उन्नत संस्करण के रूप में कार्य करता है।
$ cat enhanced.sh #!/bin/bash echo "Enter the string" read str if [[ $str == *condition* ]] then echo "String "$str has the word \"condition\" fi $ ./enhanced.sh Enter the string conditionalstatement String conditionalstatement has the word "condition"
- [ टेस्ट कमांड का पर्याय है। भले ही इसे शेल में बनाया गया हो, यह एक नई प्रक्रिया बनाता है।
- [[ इसका एक नया उन्नत संस्करण है, जो एक कीवर्ड है, प्रोग्राम नहीं।
- [[ कोर्न और बैश समझते हैं।
- उपरोक्त उदाहरण में, यदि चर $str में कहीं भी "कंडीशन" वाक्यांश शामिल है, तो शर्त सत्य है।
- यह शेल ग्लोबिंग फीचर है, जो केवल तभी समर्थित होगा जब आप [[ (डबल ब्रैकेट्स) का उपयोग करेंगे और इसलिए कई तर्कों को उद्धृत करने की आवश्यकता नहीं है।