बैश WHILE-Loops कैसे लिखें

आदेश, सिंटेक्स, और उदाहरण

आप उन्हें स्क्रिप्ट फ़ाइल में लिखकर और फिर इसे चलाकर आदेशों का अनुक्रम निष्पादित कर सकते हैं।

एक स्क्रिप्ट फ़ाइल बस एक टेक्स्ट फ़ाइल होती है, आमतौर पर एसएच फ़ाइल एक्सटेंशन के साथ, जिसमें निर्देशों का अनुक्रम होता है जिसे कमांड लाइन ( खोल ) से भी निष्पादित किया जा सकता है।

जबकि लूप उदाहरण

नीचे थोड़ी देर लूप का एक उदाहरण है। निष्पादित होने पर, यह स्क्रिप्ट फ़ाइल स्क्रीन पर नंबर 1 से 9 मुद्रित करेगी। जबकि-स्टेटमेंट आपको फॉर-लूप की तुलना में समाप्ति की स्थिति निर्दिष्ट करने के लिए अधिक लचीलापन देता है।

#! / bin / bash count = 1 जबकि [$ count -le 9] echo "$ count" नींद 1 ((गिनती ++) करें) किया

उदाहरण के लिए, आप पिछली स्क्रिप्ट को वृद्धि विवरण को छोड़कर एक अनंत लूप बना सकते हैं "((गिनती ++))":

#! / bin / bash count = 1 जबकि [$ count -le 9] echo "$ count" नींद 1 किया है

"नींद 1" कथन प्रत्येक पुनरावृत्ति पर 1 सेकंड के लिए निष्पादन रोकता है। प्रक्रिया को समाप्त करने के लिए Ctrl + C कीबोर्ड शॉर्टकट का उपयोग करें।

आप एक कोलन को स्थिति के रूप में डालकर एक अनंत लूप भी बना सकते हैं:

#! / bin / bash count = 1 जबकि: echo "$ count" नींद 1 ((गिनती ++)) करें

जबकि-लूप में कई स्थितियों का उपयोग करने के लिए, आपको डबल स्क्वायर ब्रैकेट नोटेशन का उपयोग करना होगा:

गिनती = 1 किया = 0 जबकि [[$ गिनती -9 9] && [$ किया == 0]] गूंज करें "$ गिनती" नींद 1 ((गिनती ++)) यदि [$ count == 5]; फिर $ किया = 1 एफ किया

इस स्क्रिप्ट में, परिवर्तनीय "किया गया" 0 पर शुरू किया गया है और फिर गिनती तक पहुंचने पर 1 पर सेट किया गया है। लूप स्थिति बताती है कि जब तक "गिनती" नौ से कम है और "किया" बराबर है तब तक लूप जारी रहेगा शून्य करने के लिए। इसलिए जब गिनती 5 बराबर होती है तो लूप बाहर निकलते हैं।

"&&" का तार्किक अर्थ है "और" और "||" तार्किक "या" का मतलब है।

संयोजनों के लिए एक वैकल्पिक संकेत "और" और "या" शर्तों में "-a" और "-o" एकल वर्ग ब्रैकेट के साथ है। उपरोक्त शर्त:

[[$ गिनती 9] && [$ किया == 0]]

... के रूप में फिर से लिखा जा सकता है:

[$ गिनती 9] -ए [$ किया == 0]

एक पाठ फ़ाइल पढ़ना आम तौर पर थोड़ी देर के साथ किया जाता है। निम्न उदाहरण में, बैश स्क्रिप्ट सामग्री सूची को "inventory.txt:" नामक फ़ाइल की रेखा से पढ़ती है।

FILE = inventory.txt exec 6

पहली पंक्ति इनपुट फ़ाइल नाम को "फ़ाइल" चर में निर्दिष्ट करती है। दूसरी पंक्ति फ़ाइल डिस्क्रिप्टर "6" में "मानक इनपुट" बचाती है (यह 3 और 9 के बीच कोई मान हो सकती है)। ऐसा किया जाता है ताकि स्क्रिप्ट के अंत में फ़ाइल डिस्क्रिप्टर "0" फ़ाइल में "मानक इनपुट" को पुनर्स्थापित किया जा सके (कथन देखें "exec 0 तीसरी पंक्ति में इनपुट फ़ाइल फ़ाइल डिस्क्रिप्टर को सौंपी गई है" 0, "जिसका प्रयोग किया जाता है मानक इनपुट के लिए। "पढ़ा" कथन तब प्रत्येक पुनरावृत्ति पर फ़ाइल से एक पंक्ति पढ़ता है और इसे "line1" चर में निर्दिष्ट करता है।

समय-समय पर लूप से बाहर निकलने के लिए, आप इस तरह के ब्रेक स्टेटमेंट का उपयोग कर सकते हैं:

गिनती = 1 किया गया = 0 जबकि [$ गिनती-9 9] गूंज करें "$ गिनती" नींद 1 ((गिनती ++)) यदि [$ count == 5] तो समाप्त हो गया इको समाप्त

ब्रेक स्टेटमेंट प्रोग्राम निष्पादन को अंत तक छोड़ देता है जबकि लूप और उसके बाद किसी भी कथन को निष्पादित करता है। इस मामले में, बयान "echo समाप्त हो गया।"

दूसरी तरफ जारी बयान, वर्तमान पुनरावृत्ति के बाकी लूप स्टेटमेंट को छोड़ देता है और सीधे अगले पुनरावृत्ति पर कूदता है:

गिनती = 1 किया गया = 0 जबकि [$ गिनती 9] नींद 1 ((गिनती ++)) अगर [$ गिनती == 5] फिर जारी करें "$ count" किया echo समाप्त हो गया

इस मामले में, "जारी रखें" कथन निष्पादित किया जाता है जब चर "गणना" पहुंचता है 5. इसका मतलब है कि बाद के कथन (गूंज "$ गिनती") इस पुनरावृत्ति पर निष्पादित नहीं किया जाता है (जब "गिनती" का मान 5 होता है)।