शेल ऑपरेटिंग सिस्टम के लिए कमांड दुभाषिया है। बैश मेरा पसंदीदा शेल है, लेकिन प्रत्येक लिनक्स शेल उपयोगकर्ता या sysadmin द्वारा टाइप किए गए कमांड को उस रूप में व्याख्या करता है जिसे ऑपरेटिंग सिस्टम उपयोग कर सकता है। जब परिणाम शेल प्रोग्राम में वापस आते हैं, तो यह उन्हें STDOUT को भेजता है, जो डिफ़ॉल्ट रूप से, उन्हें टर्मिनल में प्रदर्शित करता है। जिन शेल्स से मैं परिचित हूं वे सभी प्रोग्रामिंग लैंग्वेज भी हैं।
टैब पूर्णता, कमांड-लाइन रिकॉल और संपादन जैसी सुविधाएँ, और उपनाम जैसे शॉर्टकट सभी एक शक्तिशाली शेल के रूप में इसके मूल्य में योगदान करते हैं। इसका डिफ़ॉल्ट कमांड-लाइन संपादन मोड Emacs का उपयोग करता है, लेकिन मेरी पसंदीदा बैश सुविधाओं में से एक यह है कि मैं इसे संपादन कमांड का उपयोग करने के लिए Vi मोड में बदल सकता हूं जो पहले से ही मेरी मांसपेशी मेमोरी का हिस्सा हैं।
हालाँकि, यदि आप बैश को केवल एक खोल के रूप में सोचते हैं, तो आप इसकी वास्तविक शक्ति को बहुत याद करते हैं। अपने तीन-खंड वाले लिनक्स स्व-अध्ययन पाठ्यक्रम (जिस पर लेखों की यह श्रृंखला आधारित है) पर शोध करते हुए, मैंने बैश के बारे में ऐसी बातें सीखीं जो मैं लिनक्स के साथ काम करने के 20 वर्षों में कभी नहीं जान पाया। ज्ञान के इन नए बिट्स में से कुछ प्रोग्रामिंग भाषा के रूप में इसके उपयोग से संबंधित हैं। बैश एक शक्तिशाली प्रोग्रामिंग भाषा है, जिसे कमांड लाइन और शेल स्क्रिप्ट में उपयोग के लिए पूरी तरह से डिज़ाइन किया गया है।
यह तीन-भाग श्रृंखला बैश का उपयोग कमांड-लाइन इंटरफ़ेस (सीएलआई) प्रोग्रामिंग भाषा के रूप में करती है। यह पहला लेख बैश, चर और नियंत्रण ऑपरेटरों के साथ कुछ सरल कमांड-लाइन प्रोग्रामिंग को देखता है। अन्य लेख बैश फ़ाइलों के प्रकारों को एक्सप्लोर करते हैं; स्ट्रिंग, संख्यात्मक, और विविध तार्किक ऑपरेटर जो निष्पादन-प्रवाह नियंत्रण तर्क प्रदान करते हैं; विभिन्न प्रकार के खोल विस्तार; और के लिए , जबकि , और तक लूप जो दोहराए जाने वाले संचालन को सक्षम करते हैं। वे कुछ ऐसे आदेशों को भी देखेंगे जो इन उपकरणों के उपयोग को सरल और समर्थन करते हैं।
खोल
शेल ऑपरेटिंग सिस्टम के लिए कमांड दुभाषिया है। बैश मेरा पसंदीदा शेल है, लेकिन प्रत्येक लिनक्स शेल उपयोगकर्ता या sysadmin द्वारा टाइप किए गए कमांड को उस रूप में व्याख्या करता है जिसे ऑपरेटिंग सिस्टम उपयोग कर सकता है। जब परिणाम शेल प्रोग्राम में वापस आते हैं, तो यह उन्हें टर्मिनल में प्रदर्शित करता है। जिन शेल्स से मैं परिचित हूं वे सभी प्रोग्रामिंग लैंग्वेज भी हैं।
बैश बॉर्न अगेन शेल के लिए खड़ा है क्योंकि बैश शेल पुराने बॉर्न शेल पर आधारित है जिसे स्टीवन बॉर्न ने 1977 में लिखा था। कई अन्य शेल उपलब्ध हैं, लेकिन ये चार हैं जिनका मैं सबसे अधिक बार सामना करता हूं:
- csh: उन प्रोग्रामर्स के लिए C शेल जो C भाषा के सिंटैक्स को पसंद करते हैं
- ksh: द कॉर्न शेल, डेविड कॉर्न द्वारा लिखित और यूनिक्स उपयोगकर्ताओं के बीच लोकप्रिय
- टीसीएसएच: उपयोग में आसान सुविधाओं के साथ csh का एक संस्करण
- zsh: Z शेल, जो अन्य लोकप्रिय शेल की कई विशेषताओं को जोड़ती है
सभी शेल में बिल्ट-इन कमांड होते हैं जो कोर यूटिलिटीज द्वारा प्रदान किए गए लोगों को पूरक या प्रतिस्थापित करते हैं। शेल का मैन पेज खोलें और इसके द्वारा प्रदान किए गए आदेशों को देखने के लिए "BUILT-INS" अनुभाग खोजें।
प्रत्येक खोल का अपना व्यक्तित्व और वाक्यविन्यास होता है। कुछ आपके लिए दूसरों की तुलना में बेहतर काम करेंगे। मैंने C शेल, कॉर्न शेल और Z शेल का उपयोग किया है। मुझे अभी भी उनमें से किसी से भी ज्यादा बैश शेल पसंद है। जो आपके लिए सबसे अच्छा काम करता है उसका उपयोग करें, हालांकि इसके लिए आपको कुछ अन्य को आजमाने की आवश्यकता हो सकती है। सौभाग्य से, शेल को बदलना काफी आसान है।
ये सभी शेल प्रोग्रामिंग भाषाएं हैं, साथ ही कमांड दुभाषिए भी हैं। यहां कुछ प्रोग्रामिंग कंस्ट्रक्शंस और टूल्स का एक त्वरित दौरा है जो बैश के अभिन्न अंग हैं।
प्रोग्रामिंग भाषा के रूप में बैश करें
अधिकांश sysadmins ने कमांड जारी करने के लिए बैश का उपयोग किया है जो आमतौर पर काफी सरल और सीधे होते हैं। लेकिन बैश एकल कमांड दर्ज करने से परे जा सकता है, और कई sysadmins कार्यों की एक श्रृंखला को करने के लिए सरल कमांड-लाइन प्रोग्राम बनाते हैं। ये प्रोग्राम सामान्य उपकरण हैं जो समय और मेहनत बचा सकते हैं।
सीएलआई कार्यक्रम लिखते समय मेरा उद्देश्य समय और प्रयास को बचाना है (अर्थात, आलसी सिसडमिन बनना)। सीएलआई प्रोग्राम एक विशिष्ट क्रम में कई कमांडों को सूचीबद्ध करके इसका समर्थन करते हैं जो एक के बाद एक निष्पादित होते हैं, इसलिए आपको एक कमांड की प्रगति देखने की जरूरत नहीं है और पहली कमांड खत्म होने पर अगली कमांड टाइप करने की आवश्यकता नहीं है। आप अन्य काम कर सकते हैं और प्रत्येक कमांड की प्रगति की लगातार निगरानी करने की आवश्यकता नहीं है।
"एक प्रोग्राम" क्या है?
फ्री ऑन-लाइन डिक्शनरी ऑफ कंप्यूटिंग (एफओएलडीओसी) एक प्रोग्राम को इस प्रकार परिभाषित करता है:"कंप्यूटर द्वारा निष्पादित निर्देश, भौतिक डिवाइस के विपरीत जिस पर वे चलते हैं।" प्रिंसटन यूनिवर्सिटी का वर्डनेट एक प्रोग्राम को इस प्रकार परिभाषित करता है:"... निर्देशों का एक क्रम जिसे कंप्यूटर व्याख्या और निष्पादित कर सकता है..." विकिपीडिया में कंप्यूटर प्रोग्राम के बारे में भी अच्छी प्रविष्टि है।
इसलिए, एक प्रोग्राम में एक या अधिक निर्देश शामिल हो सकते हैं जो एक विशिष्ट, संबंधित कार्य करते हैं। कंप्यूटर प्रोग्राम निर्देश को प्रोग्राम स्टेटमेंट भी कहा जाता है। Sysadmins के लिए, एक प्रोग्राम आमतौर पर शेल कमांड का एक क्रम होता है। लिनक्स के लिए उपलब्ध सभी शेल, कम से कम जिनसे मैं परिचित हूं, कम से कम प्रोग्रामिंग क्षमता का एक बुनियादी रूप है, और अधिकांश लिनक्स वितरण के लिए डिफ़ॉल्ट शेल बैश कोई अपवाद नहीं है।
जबकि यह श्रृंखला बैश का उपयोग करती है (क्योंकि यह बहुत सर्वव्यापी है), यदि आप एक अलग शेल का उपयोग करते हैं, तो सामान्य प्रोग्रामिंग अवधारणाएं समान होंगी, हालांकि निर्माण और वाक्यविन्यास कुछ भिन्न हो सकते हैं। कुछ गोले कुछ सुविधाओं का समर्थन कर सकते हैं जो अन्य नहीं करते हैं, लेकिन वे सभी कुछ प्रोग्रामिंग क्षमता प्रदान करते हैं। शेल प्रोग्राम को बार-बार उपयोग के लिए एक फ़ाइल में संग्रहीत किया जा सकता है, या उन्हें आवश्यकतानुसार कमांड लाइन पर बनाया जा सकता है।
साधारण CLI प्रोग्राम
सबसे सरल कमांड-लाइन प्रोग्राम एक या दो लगातार प्रोग्राम स्टेटमेंट होते हैं, जो संबंधित हो सकते हैं या नहीं, जो कमांड लाइन पर Enter से पहले दर्ज किए जाते हैं। कुंजी दबाई जाती है। किसी कार्यक्रम में दूसरा कथन, यदि कोई है, तो पहले के कार्यों पर निर्भर हो सकता है, लेकिन ऐसा होने की आवश्यकता नहीं है।
एक वाक्यात्मक विराम चिह्न भी है जिसे स्पष्ट रूप से कहा जाना चाहिए। कमांड लाइन पर सिंगल कमांड दर्ज करते समय, Enter . दबाएं key एक निहित अर्धविराम के साथ कमांड को समाप्त करता है (; ) जब कमांड लाइन पर सिंगल लाइन के रूप में दर्ज किए गए सीएलआई शेल प्रोग्राम में उपयोग किया जाता है, तो अर्धविराम का उपयोग प्रत्येक स्टेटमेंट को समाप्त करने और अगले एक से अलग करने के लिए किया जाना चाहिए। CLI शेल प्रोग्राम में अंतिम स्टेटमेंट एक स्पष्ट या निहित अर्धविराम का उपयोग कर सकता है।
कुछ बुनियादी सिंटैक्स
निम्नलिखित उदाहरण इस सिंटैक्स को स्पष्ट करेंगे। इस प्रोग्राम में एक स्पष्ट टर्मिनेटर के साथ एक कमांड होता है:
[student@studentvm1 ~]$ इको "हैलो वर्ल्ड।";
नमस्ते दुनिया।
यह एक कार्यक्रम की तरह नहीं लग सकता है, लेकिन यह पहला कार्यक्रम है जिसका सामना मैं हर नई प्रोग्रामिंग भाषा से करता हूं जो मैं सीखता हूं। प्रत्येक भाषा के लिए वाक्य-विन्यास थोड़ा भिन्न हो सकता है, लेकिन परिणाम समान होता है।
आइए इस तुच्छ लेकिन सर्वव्यापी कार्यक्रम पर थोड़ा विस्तार करें। आपके परिणाम मेरे से भिन्न होंगे क्योंकि मैंने अन्य प्रयोग किए हैं, जबकि आपके पास केवल डिफ़ॉल्ट निर्देशिकाएं और फ़ाइलें हो सकती हैं जो पहली बार GUI डेस्कटॉप के माध्यम से किसी खाते में लॉग इन करने पर खाता होम निर्देशिका में बनाई जाती हैं।
[student@studentvm1 ~]$ इको "माई होम डाइरेक्टरी।"; ls;
मेरी होम निर्देशिका। txt link3 सार्वजनिक testdir वीडियो
TestFile1.dos dmesg1.txt दस्तावेज़ संगीत random.txt testdir1
यह थोड़ा और समझ में आता है। परिणाम संबंधित हैं, लेकिन व्यक्तिगत कार्यक्रम विवरण एक दूसरे से स्वतंत्र हैं। ध्यान दें कि मैं अर्धविराम से पहले और बाद में रिक्त स्थान रखना पसंद करता हूं क्योंकि यह कोड को पढ़ने में थोड़ा आसान बनाता है। अंत में स्पष्ट अर्धविराम के बिना उस छोटे से CLI प्रोग्राम को फिर से आज़माएं:
[student@studentvm1 ~]$ echo "My home directory." ; ls
आउटपुट में कोई अंतर नहीं है।
चर के बारे में कुछ
सभी प्रोग्रामिंग भाषाओं की तरह, बैश शेल चर से निपट सकता है। एक चर एक प्रतीकात्मक नाम है जो स्मृति में एक विशिष्ट स्थान को संदर्भित करता है जिसमें किसी प्रकार का मान होता है। चर का मान परिवर्तनशील होता है, अर्थात यह परिवर्तनशील होता है।
बैश सी और संबंधित भाषाओं जैसे चर टाइप नहीं करता है, उन्हें पूर्णांक, फ़्लोटिंग पॉइंट या स्ट्रिंग प्रकार के रूप में परिभाषित करता है। बैश में, सभी चर तार हैं। एक स्ट्रिंग जो एक पूर्णांक है, का उपयोग पूर्णांक अंकगणित में किया जा सकता है, जो कि गणित का एकमात्र प्रकार है जो बैश करने में सक्षम है। यदि अधिक जटिल गणित की आवश्यकता है, तो bc कमांड का उपयोग CLI प्रोग्राम और स्क्रिप्ट में किया जा सकता है।
चर असाइन किए गए मान हैं और CLI प्रोग्राम और स्क्रिप्ट में उन मानों को संदर्भित करने के लिए उपयोग किया जा सकता है। किसी वैरिएबल का मान उसके नाम का उपयोग करके सेट किया जाता है लेकिन उसके पहले $ . नहीं होता है संकेत। असाइनमेंट VAR=10 वेरिएबल VAR का मान 10 पर सेट करता है। वेरिएबल के मान को प्रिंट करने के लिए, आप echo $VAR स्टेटमेंट का उपयोग कर सकते हैं . टेक्स्ट (अर्थात, गैर-संख्यात्मक) चर से प्रारंभ करें।
बैश वैरिएबल तब तक शेल वातावरण का हिस्सा बन जाते हैं जब तक कि वे सेट न हो जाएं।
एक चर के प्रारंभिक मान की जाँच करें जिसे असाइन नहीं किया गया है; यह शून्य होना चाहिए। फिर वेरिएबल के लिए एक मान निर्दिष्ट करें और इसके मूल्य को सत्यापित करने के लिए इसे प्रिंट करें। आप यह सब एक ही सीएलआई कार्यक्रम में कर सकते हैं:
[student@studentvm1 ~]$ echo $MyVar; MyVar ="हैलो वर्ल्ड"; इको $MyVar;
नमस्ते दुनिया
[student@studentvm1 ~]$
नोट:वेरिएबल असाइनमेंट का सिंटैक्स बहुत सख्त है। बराबर के दोनों ओर कोई स्थान नहीं होना चाहिए (= ) असाइनमेंट स्टेटमेंट में साइन इन करें।
खाली रेखा इंगित करती है कि MyVar . का प्रारंभिक मान शून्य है। एक वेरिएबल के मान को बदलना और सेट करना उसी तरह किया जाता है। यह उदाहरण मूल और नया दोनों मान दिखाता है।
जैसा कि उल्लेख किया गया है, बैश पूर्णांक अंकगणितीय गणना कर सकता है, जो किसी सरणी में किसी तत्व के स्थान के संदर्भ की गणना करने या साधारण गणित की समस्याओं को करने के लिए उपयोगी है। यह वैज्ञानिक कंप्यूटिंग या ऐसी किसी भी चीज़ के लिए उपयुक्त नहीं है जिसके लिए दशमलव की आवश्यकता होती है, जैसे कि वित्तीय गणना। उन प्रकार की गणनाओं के लिए बहुत बेहतर उपकरण हैं।
यहाँ एक सरल गणना है:
[student@studentvm1 ~]$ Var1="7"; Var2="9"; गूंज "परिणाम =$((Var1*Var2))"
परिणाम =63
क्या होता है जब आप एक गणित ऑपरेशन करते हैं जिसके परिणामस्वरूप फ्लोटिंग-पॉइंट नंबर होता है?
[student@studentvm1 ~]$ Var1="7"; Var2="9"; इको "रिजल्ट =$((Var1/Var2))"
Result =0
[student@studentvm1 ~]$ Var1="7"; Var2="9"; इको "रिजल्ट =$((Var2/Var1))"
Result =1
[student@studentvm1 ~]$
परिणाम निकटतम पूर्णांक है। ध्यान दें कि गणना गूंज . के भाग के रूप में की गई थी बयान। वरीयता के बैश क्रम के कारण संलग्न इको कमांड से पहले गणित का प्रदर्शन किया जाता है। विवरण के लिए बैश मैन पेज देखें और "प्राथमिकता" खोजें।
कंट्रोल ऑपरेटर
कुछ दिलचस्प कमांड-लाइन प्रोग्राम आसानी से बनाने के लिए शेल कंट्रोल ऑपरेटर सिंटैक्टिकल ऑपरेटरों में से एक हैं। CLI प्रोग्राम का सबसे सरल रूप कमांड लाइन पर एक क्रम में कई कमांड को एक साथ स्ट्रिंग करना है:
command1 ; command2 ; command3 ; command4 ; . . . ; etc. ;
वे सभी आदेश बिना किसी समस्या के चलते हैं, जब तक कि कोई त्रुटि न हो। लेकिन क्या होता है जब कोई त्रुटि होती है? आप अंतर्निहित && . का उपयोग करके अनुमान लगा सकते हैं और त्रुटियों की अनुमति दे सकते हैं और || बैश नियंत्रण ऑपरेटरों। ये दो नियंत्रण ऑपरेटर कुछ प्रवाह नियंत्रण प्रदान करते हैं और आपको कोड निष्पादन के अनुक्रम को बदलने में सक्षम बनाते हैं। अर्धविराम को बैश कंट्रोल ऑपरेटर भी माना जाता है, जैसा कि न्यूलाइन कैरेक्टर है।
&& ऑपरेटर बस कहता है, "यदि कमांड 1 सफल है, तो कमांड 2 चलाएँ। यदि कमांड 1 किसी भी कारण से विफल हो जाता है, तो कमांड 2 को छोड़ दिया जाता है।" वह सिंटैक्स इस तरह दिखता है:
command1 && command2
अब, कुछ कमांड देखें जो एक नई निर्देशिका बनाएगी और—यदि यह सफल होती है—तो इसे वर्तमान कार्यशील निर्देशिका (पीडब्ल्यूडी) बनाएं। सुनिश्चित करें कि आपकी होम निर्देशिका (~ ) पीडब्ल्यूडी है। इसे पहले /root . में आजमाएं , एक निर्देशिका जिस तक आपकी पहुंच नहीं है:
[student@studentvm1 ~]$ Dir=/root/testdir; mkdir $Dir/ &&cd $Dir
mkdir:निर्देशिका '/root/testdir/' नहीं बना सकता:अनुमति अस्वीकृत
[student@studentvm1 ~]$
त्रुटि mkdir . द्वारा उत्सर्जित की गई थी आज्ञा। आपको यह इंगित करने वाली त्रुटि प्राप्त नहीं हुई कि फ़ाइल नहीं बनाई जा सकती क्योंकि निर्देशिका का निर्माण विफल रहा। && नियंत्रण ऑपरेटर ने गैर-शून्य रिटर्न कोड को भांप लिया, इसलिए स्पर्श आदेश छोड़ दिया गया था। && . का उपयोग करना नियंत्रण ऑपरेटर स्पर्श . को रोकता है कमांड चलाने से रोकता है क्योंकि निर्देशिका बनाने में त्रुटि हुई थी। इस प्रकार के कमांड-लाइन प्रोग्राम फ्लो कंट्रोल त्रुटियों को कंपाउंडिंग और चीजों की वास्तविक गड़बड़ी करने से रोक सकते हैं। लेकिन यह थोड़ा और जटिल होने का समय है।
|| कंट्रोल ऑपरेटर आपको एक और प्रोग्राम स्टेटमेंट जोड़ने की अनुमति देता है जो तब निष्पादित होता है जब प्रारंभिक प्रोग्राम स्टेटमेंट शून्य से अधिक कोड लौटाता है। मूल सिंटैक्स इस तरह दिखता है:
command1 || command2
यह सिंटैक्स पढ़ता है, "यदि कमांड 1 विफल रहता है, तो कमांड 2 निष्पादित करें।" इसका तात्पर्य है कि यदि कमांड 1 सफल होता है, तो कमांड 2 को छोड़ दिया जाता है। एक नई निर्देशिका बनाने का प्रयास करके इसे आज़माएं:
[student@studentvm1 ~]$ Dir=/root/testdir; एमकेडीआईआर $डीआईआर || इको "$Dir नहीं बनाया गया था।"
mkdir:निर्देशिका '/root/testdir' नहीं बना सकता:अनुमति अस्वीकृत
/root/testdir नहीं बनाया गया था।
[student@studentvm1 ~]$
ठीक यही आप उम्मीद करेंगे। क्योंकि नई निर्देशिका नहीं बनाई जा सकी, पहली कमांड विफल रही, जिसके परिणामस्वरूप दूसरी कमांड का निष्पादन हुआ।
इन दोनों ऑपरेटरों का संयोजन दोनों का सर्वश्रेष्ठ प्रदान करता है। कुछ प्रवाह नियंत्रण का उपयोग करते हुए नियंत्रण ऑपरेटर सिंटैक्स यह सामान्य रूप लेता है जब && और || नियंत्रण ऑपरेटरों का उपयोग किया जाता है:
preceding commands ; command1 && command2 || command3 ; following commands
इस सिंटैक्स को इस प्रकार कहा जा सकता है:"यदि कमांड 1 0 के रिटर्न कोड के साथ बाहर निकलता है, तो कमांड 2 निष्पादित करें, अन्यथा कमांड 3 निष्पादित करें।" इसे आज़माएं:
[student@studentvm1 ~]$ Dir=/root/testdir; mkdir $Dir &&cd $Dir || इको "$Dir नहीं बनाया गया था।"
mkdir:निर्देशिका '/root/testdir' नहीं बना सकता:अनुमति अस्वीकृत
/root/testdir नहीं बनाया गया था।
[student@studentvm1 ~]$
अब /root . के बजाय अपनी होम निर्देशिका का उपयोग करके अंतिम कमांड को फिर से आज़माएं निर्देशिका। आपको यह निर्देशिका बनाने की अनुमति होगी:
[student@studentvm1 ~]$ Dir=~/testdir; mkdir $Dir &&cd $Dir || इको "$Dir नहीं बनाया गया था।"
[student@studentvm1 testdir]$
कंट्रोल ऑपरेटर सिंटैक्स, जैसे कमांड1 &&कमांड2 , काम करता है क्योंकि प्रत्येक कमांड शेल को एक रिटर्न कोड (RC) भेजता है जो इंगित करता है कि क्या यह सफलतापूर्वक पूरा हुआ या निष्पादन के दौरान किसी प्रकार की विफलता थी या नहीं। परंपरा के अनुसार, शून्य (0) का आरसी सफलता को इंगित करता है, और कोई भी सकारात्मक संख्या किसी प्रकार की विफलता को इंगित करती है। कुछ उपकरण sysadmins विफलता को इंगित करने के लिए केवल एक (1) लौटाते हैं, लेकिन कई अन्य कोड का उपयोग विफलता के प्रकार को इंगित करने के लिए करते हैं।
बैश शेल वैरिएबल $? अंतिम आदेश से आरसी शामिल है। इस RC को एक स्क्रिप्ट, कमांड की सूची में अगला कमांड या सीधे sysadmin द्वारा बहुत आसानी से चेक किया जा सकता है। एक साधारण कमांड चलाकर शुरू करें और तुरंत आरसी की जांच करें। RC आपके द्वारा देखे जाने से पहले चलने वाले अंतिम कमांड के लिए हमेशा रहेगा।
[student@studentvm1 testdir]$ ll; इको "आरसी =$?"
कुल 1264
drwxrwxr-x 2 छात्र छात्र 4096 मार्च 2 08:21 अध्याय25
drwxrwxr-x 2 छात्र छात्र 4096 मार्च 21 15:27 अध्याय26
-rwxr-xr-x 1 छात्र छात्र 92 मार्च 20 15:53 TestFile1
drwxrwxr-x. 2 छात्र छात्र 663552 फरवरी 21 14:12 परीक्षणदिर
drwxr-xr-x। 2 छात्र छात्र 4096 दिसंबर 22 13:15 वीडियो
RC =0
[student@studentvm1 testdir]$
आरसी, इस मामले में, शून्य है, जिसका अर्थ है कि आदेश सफलतापूर्वक पूरा हुआ। अब रूट की होम डायरेक्टरी पर उसी कमांड को आज़माएं, एक ऐसी निर्देशिका जिसके लिए आपके पास अनुमति नहीं है:
[student@studentvm1 testdir]$ ll /root; इको "आरसी =$?"इस मामले में, RC दो है; इसका मतलब है कि गैर-रूट उपयोगकर्ता के लिए उस निर्देशिका तक पहुंचने की अनुमति अस्वीकार कर दी गई थी जिसमें उपयोगकर्ता को पहुंच की अनुमति नहीं है। कंट्रोल ऑपरेटर इन RC का उपयोग आपको प्रोग्राम निष्पादन के क्रम को बदलने में सक्षम बनाने के लिए करते हैं।
सारांश
इस लेख ने बैश को एक प्रोग्रामिंग भाषा के रूप में देखा और इसके मूल सिंटैक्स के साथ-साथ कुछ बुनियादी उपकरणों की खोज की। यह दिखाता है कि डेटा को STDOUT में कैसे प्रिंट किया जाता है और चर और नियंत्रण ऑपरेटरों का उपयोग कैसे किया जाता है। इस श्रृंखला का अगला लेख कई बैश लॉजिकल ऑपरेटरों में से कुछ को देखता है जो निर्देश निष्पादन के प्रवाह को नियंत्रित करते हैं।