नाम
श - कमांड दुभाषिया (खोल)
SYNOPSIS
श -/ + ACefnuvxIimqsVEbc -ओ लंबा नाम -वर्ड्स लक्ष्य …
विवरण
एस सिस्टम के लिए मानक कमांड दुभाषिया है। का वर्तमान संस्करणश के अनुरूप होने की प्रक्रिया में हैPOSIX खोल के लिए 1003.2 और 1003.2 ए विनिर्देश। इस संस्करण में कई विशेषताएं हैं जो इसे कॉर्न शैल के कुछ मामलों में समान दिखती हैं, लेकिन यह कॉर्न शैल क्लोन नहीं है (देखें ksh (1))। केवल नामित विशेषताएंPOSIX इसके अलावा कुछ बर्कले एक्सटेंशन, इस खोल में शामिल किए जा रहे हैं। हमें उम्मीद हैPOSIX समय बीएसडी जारी किया गया है द्वारा अनुरूपता। यह मैन पेज ट्यूटोरियल या खोल का पूर्ण विनिर्देश नहीं है।
अवलोकन
खोल एक आदेश है जो किसी फ़ाइल या टर्मिनल से लाइनों को पढ़ता है, उन्हें व्याख्या करता है, और आमतौर पर अन्य आदेश निष्पादित करता है। यह वह प्रोग्राम है जो उपयोगकर्ता द्वारा सिस्टम में लॉग इन करते समय चल रहा है (हालांकि कोई उपयोगकर्ता chsh (1) कमांड के साथ एक अलग खोल का चयन कर सकता है)। खोल एक ऐसी भाषा लागू करता है जिसमें प्रवाह नियंत्रण संरचनाएं हों, एक मैक्रो सुविधा जो डेटा स्टोरेज के अतिरिक्त, इतिहास और लाइन संपादन क्षमताओं के साथ-साथ विभिन्न प्रकार की सुविधाएं प्रदान करती है। इसमें इंटरैक्टिव उपयोग की सहायता के लिए कई सुविधाएं शामिल हैं और इसका लाभ यह है कि व्याख्यात्मक भाषा इंटरैक्टिव और गैर-इंटरैक्टिव उपयोग (शैल स्क्रिप्ट) दोनों के लिए आम है। यही है, कमांड को सीधे चलने वाले खोल पर टाइप किया जा सकता है या फ़ाइल में रखा जा सकता है और फ़ाइल को सीधे खोल द्वारा निष्पादित किया जा सकता है।
मंगलाचरण
यदि कोई तर्क मौजूद नहीं है और यदि खोल का मानक इनपुट टर्मिनल से जुड़ा हुआ है (या यदि -मैंझंडा सेट है), और -सी विकल्प मौजूद नहीं है, खोल को एक इंटरैक्टिव खोल माना जाता है। एक इंटरेक्टिव शैल आम तौर पर प्रत्येक कमांड से पहले संकेत देता है और प्रोग्रामिंग और कमांड त्रुटियों को अलग-अलग करता है (जैसा कि नीचे वर्णित है)। जब पहली बार शुरू होता है, तो खोल तर्क 0 का निरीक्षण करता है, और यदि यह एक डैश '-' खोल से शुरू होता है तो खोल को लॉगिन खोल भी माना जाता है। यह आमतौर पर सिस्टम द्वारा स्वचालित रूप से किया जाता है जब उपयोगकर्ता पहले लॉग इन करता है। एक लॉगिन खोल पहले फाइलों / etc / profile से कमांड पढ़ता है और यदि वे मौजूद हैं तो प्रोफाइल। अगर पर्यावरण चरENV एक खोल में प्रवेश पर सेट है, या एक लॉगिन खोल के प्रोफाइल में सेट है, तो खोल अगला नाम में फ़ाइल से कमांड पढ़ता हैENVइसलिए, उपयोगकर्ता को उन आदेशों को रखना चाहिए जिन्हें केवल .profile फ़ाइल में लॉगिन समय पर निष्पादित किया जाना है, और कमांड जो प्रत्येक खोल के लिए निष्पादित किए जाते हैंENV फ़ाइल। सेट करने के लिएENV कुछ फ़ाइल में परिवर्तनीय, अपनी होम निर्देशिका के अपने .profile में निम्न पंक्ति रखें
ENV = $ घर / .shinit; निर्यात ENV
आपके द्वारा इच्छित किसी भी फ़ाइल नाम ``shinit '' के लिए प्रतिस्थापन। के बाद सेENV शेल स्क्रिप्ट्स और गैर-इंटरैक्टिव शैल समेत खोल के प्रत्येक आमंत्रण के लिए फ़ाइल पढ़ी जाती है, निम्नलिखित प्रतिमान कमांड को प्रतिबंधित करने के लिए उपयोगी हैENV इंटरैक्टिव इनवोकेशन के लिए फ़ाइल। नीचे दिए गए `` case '' और 'esac' 'के भीतर आदेश रखें (इन आदेशों को बाद में वर्णित किया गया है):
मामले $ - में * i *)
# केवल इंटरैक्टिव उपयोग के लिए आदेश
…
esac
यदि विकल्पों के अलावा कमांड लाइन तर्क निर्दिष्ट किए गए हैं, तो खोल पहले तर्क को फ़ाइल के नाम के रूप में मानता है जिसमें से कमांड (एक खोल स्क्रिप्ट) पढ़ने के लिए, और शेष तर्क खोल के स्थितित्मक पैरामीटर के रूप में सेट किए जाते हैं ($ 1 , $ 2, आदि)। अन्यथा, खोल अपने मानक इनपुट से कमांड पढ़ता है।
तर्क सूची प्रसंस्करण
सभी एकल अक्षरों के विकल्पों में एक समान नाम होता है जिसे तर्क के रूप में उपयोग किया जा सकता है -ओ विकल्प। सेट -ओ नीचे दिए गए विवरण में एकल अक्षर विकल्प के बगल में नाम प्रदान किया गया है। प्लस `` + 'का उपयोग करते समय विकल्प को अक्षम करता है,' '' - '' विकल्प को बदलता है। निम्न विकल्पों को कमांड लाइन से या सेट (1) बिल्टिन (बाद में वर्णित) से सेट किया जा सकता है।
-ए allexport
असाइन किए गए सभी चर निर्यात करें। (4.4alpha के लिए संयुक्त)
-सी
कमांड लाइन से कमांड पढ़ें। मानक इनपुट से कोई आदेश नहीं पढ़ा जाएगा।
-सी noclobber
मौजूदा फाइलों को '`>' के साथ ओवरराइट न करें (4.4alpha के लिए संयुक्त)
-e errexit
यदि इंटरैक्टिव नहीं है, तो कोई अनचाहे कमांड विफल होने पर तुरंत बाहर निकलें। आदेश को निकालने के लिए कमांड का उपयोग किया जाता है, तो कमांड की निकास स्थिति को स्पष्ट रूप से परीक्षण किया जाता हैअगर elifwhile याजब तक या यदि आदेश '`&&' 'या` `||' ऑपरेटर का बायां हाथ ऑपरेंड है।
-f noglob
पथनाम विस्तार अक्षम करें।
-n noexec
यदि इंटरैक्टिव नहीं है, तो आदेश पढ़ें लेकिन उन्हें निष्पादित न करें। यह शैल स्क्रिप्ट के वाक्यविन्यास की जांच के लिए उपयोगी है।
-u nounset
सेट किए गए चर को विस्तारित करने का प्रयास करते समय मानक त्रुटि के लिए एक संदेश लिखें, और यदि खोल इंटरैक्टिव नहीं है, तो तत्काल बाहर निकलें। (4.4alpha के लिए संयुक्त)
-v वाचाल
शेल मानक इनपुट में अपना इनपुट लिखता है क्योंकि इसे पढ़ा जाता है। डिबगिंग के लिए उपयोगी।
-एक्स xtrace
प्रत्येक आदेश को मानक त्रुटि में लिखें (पहले इसे निष्पादित करने से पहले '+' से पहले। डीबगिंग के लिए उपयोगी।
-q quietprofile
अगर -v या -एक्स विकल्प सेट किए गए हैं, प्रारंभिक फ़ाइलों को पढ़ने के दौरान उन्हें लागू न करें, ये / etc / profile .profile और फ़ाइल द्वारा निर्दिष्ट फ़ाइलENV वातावरण विविधता।
-मैं ignoreeof
इंटरैक्टिव होने पर इनपुट से ईओएफ को अनदेखा करें।
-मैं इंटरैक्टिव
खोल को बलपूर्वक व्यवहार करने के लिए मजबूर करें।
-m मॉनिटर
नौकरी नियंत्रण चालू करें (इंटरैक्टिव होने पर स्वचालित रूप से सेट करें)।
-s stdin
मानक इनपुट से कमांड पढ़ें (यदि कोई फ़ाइल तर्क मौजूद नहीं है तो स्वचालित रूप से सेट करें)। इस विकल्प का कोई प्रभाव नहीं पड़ता है जब खोल खोलने के बाद सेट हो चुका है (यानी सेट (1) के साथ)।
-वी vi
अंतर्निर्मित vi (1) कमांड लाइन संपादक सक्षम करें (अक्षम करता है -ए अगर यह सेट किया गया है)।
-E Emacs
अंतर्निहित emacs (1) कमांड लाइन संपादक सक्षम करें (अक्षम करता है -वी अगर यह सेट किया गया है)।
बी सूचित करें
पृष्ठभूमि नौकरी पूर्ण होने की एसिंक्रोनस अधिसूचना सक्षम करें। (4.4alpha के लिए संयुक्त)
लेक्सिकल संरचना
खोल फ़ाइल से लाइनों के संदर्भ में इनपुट पढ़ता है और इसे व्हाइटस्पेस (रिक्त स्थान और टैब) पर शब्दों में विभाजित करता है, और 'ऑपरेटर' नामक खोल के लिए विशेष वर्णों के कुछ अनुक्रमों पर तोड़ता है, दो प्रकार के ऑपरेटर होते हैं: नियंत्रण ऑपरेटर और पुनर्निर्देशन ऑपरेटर (उनके अर्थ बाद में चर्चा की जाती है)। ऑपरेटरों की एक सूची निम्नलिखित है:
"नियंत्रण ऑपरेटर:"
& && ( ) ; ;; | || "पुनर्निर्देशन ऑपरेटर:" < > >| << >> <& >& <<- <>
क्वोटिंग का प्रयोग शैल को कुछ वर्णों या शब्दों के विशेष अर्थ को हटाने के लिए किया जाता है, जैसे ऑपरेटर, व्हाइटस्पेस या कीवर्ड। तीन प्रकार के उद्धरण हैं: मिलान एकल एकल उद्धरण, मिलान डबल कोट्स, और बैकस्लैश। एसी न्यूलाइन के अपवाद के साथ, बैकस्लैश निम्न वर्ण के शाब्दिक अर्थ को संरक्षित करता है। एक एसीसी न्यूलाइन से पहले एक बैकस्लैश को लाइन निरंतरता के रूप में माना जाता है। एकल उद्धरणों में वर्णों को घेरना सभी पात्रों के शाब्दिक अर्थ को संरक्षित करता है (एकल उद्धरण को छोड़कर, एकल-उद्धरण वाली स्ट्रिंग में सिंगल-कोट्स रखना असंभव बना देता है)। डबल कोट्स के भीतर वर्णों को बंद करने से डॉलररिन ($) बैकक्वोट (`) और बैकस्लैश () को छोड़कर सभी वर्णों के शाब्दिक अर्थ को संरक्षित किया जाता है। डबल कोट्स के अंदर बैकस्लैश ऐतिहासिक रूप से अजीब है, और केवल निम्न वर्णों को उद्धृत करने में कार्य करता है: $ ` अन्यथा यह शाब्दिक रहता है। आरक्षित शब्द ऐसे शब्द होते हैं जिनके पास खोल के लिए विशेष अर्थ होता है और एक लाइन की शुरुआत में और नियंत्रण ऑपरेटर के बाद पहचाने जाते हैं। निम्नलिखित आरक्षित शब्द हैं: ! टाताइ मामले के दौरान elif ता फा Ta अन्यथा ताता तो ता ता ता के लिए ता करोTa esac Ta ता Ta तक किया उनके अर्थ पर बाद में चर्चा की गई है। उपनाम उपनाम (1) बिल्टिन कमांड का उपयोग कर एक नाम और संबंधित मान सेट है। जब भी एक आरक्षित शब्द हो सकता है (ऊपर देखें), और आरक्षित शब्दों की जांच करने के बाद, खोल शब्द को जांचता है कि यह उपनाम से मेल खाता है या नहीं। यदि ऐसा होता है, तो यह इनपुट प्रवाह में इसके मूल्य के साथ बदल देता है। उदाहरण के लिए, यदि `` ls -F 'मान के साथ' `lf '' नामक उपनाम है तो इनपुट: एलएफ foobar बन जाएगा एलएस-एफ foobar एलियंस बेवकूफ उपयोगकर्ताओं के लिए तर्कों के साथ कार्यों को बनाने के तरीके सीखने के बिना आदेशों के लिए शॉर्टेंड बनाने के लिए एक सुविधाजनक तरीका प्रदान करता है। इन्हें शब्दावली अस्पष्ट कोड बनाने के लिए भी इस्तेमाल किया जा सकता है। यह उपयोग निराश है। शेल शब्दों को एक भाषा के अनुसार पढ़ता है, जिसका विनिर्देश इस मैन पेज के दायरे से बाहर है (बीएनएफ को देखेंPOSIX 1003.2 दस्तावेज़)। अनिवार्य रूप से, एक पंक्ति पढ़ी जाती है और यदि रेखा का पहला शब्द (या नियंत्रण ऑपरेटर के बाद) एक आरक्षित शब्द नहीं है, तो खोल ने एक साधारण कमांड को पहचाना है। अन्यथा, एक जटिल कमांड या कुछ अन्य विशेष निर्माण को पहचाना जा सकता है। यदि एक साधारण आदेश पहचाना गया है, तो खोल निम्नलिखित क्रियाएं करता है: '`Name = value' 'फ़ॉर्म के प्रमुख शब्द छीन दिए गए हैं और सरल कमांड के वातावरण को सौंपा गया है। पुनर्निर्देशन ऑपरेटर और उनके तर्क (जैसा कि नीचे वर्णित है) को हटा दिया गया है और प्रसंस्करण के लिए सहेजा गया है। शेष शब्द का विस्तार '' विस्तार '' नामक अनुभाग में वर्णित किया गया है और पहले शेष शब्द को कमांड नाम माना जाता है और कमांड स्थित होता है। शेष शब्दों को कमांड के तर्क माना जाता है। यदि कोई कमांड नाम नहीं हुआ है, तो आइटम 1 में पहचाने गए `` name = value '' वेरिएबल असाइनमेंट वर्तमान खोल को प्रभावित करते हैं। अगले खंड में वर्णित अनुसार पुनर्निर्देशन किए जाते हैं। पुनर्निर्देशन पुनर्निर्देशन का उपयोग उस स्थान को बदलने के लिए किया जाता है जहां कोई आदेश अपना इनपुट पढ़ता है या उसका आउटपुट भेजता है। सामान्य रूप से, पुनर्निर्देशन फ़ाइल के मौजूदा संदर्भ को खोलें, बंद करें या डुप्लिकेट करें। पुनर्निर्देशन के लिए उपयोग किया जाने वाला समग्र प्रारूप है: एन redir-op फ़ाइल कहा पे REDIR-op पहले वर्णित पुनर्निर्देशन ऑपरेटरों में से एक है। संभावित पुनर्निर्देशन की एक सूची निम्नलिखित है। बीक एन एक वैकल्पिक संख्या है, जैसा कि '3' ('बीक 3' नहीं है जो फ़ाइल डिस्क्रिप्टर को संदर्भित करता है। एन> फाइल फ़ाइल आउटपुट (या एन) को रीडायरेक्ट करने के लिए। एन> | फ़ाइल वही, लेकिन ओवरराइड -सी विकल्प। एन >> फाइल फाइल करने के लिए मानक आउटपुट (या एन) संलग्न करें। एन <फाइल फ़ाइल से मानक इनपुट (या एन) को पुनर्निर्देशित करें। एन 1 <& n2 फ़ाइल डिस्क्रिप्टर n2 से डुप्लिकेट मानक इनपुट (या n1)। एन <& - मानक इनपुट बंद करें (या एन)। एन 1> और एन 2 एन 2 से मानक आउटपुट (या एन 1) डुप्लिकेट करें। एन> और - मानक आउटपुट बंद करें (या एन)। एन <> फ़ाइल मानक इनपुट (या एन) पर पढ़ने और लिखने के लिए फ़ाइल खोलें। निम्नलिखित पुनर्निर्देशन को अक्सर 'यहां दस्तावेज़' कहा जाता है। एन << डेलीमीटर यहां-डॉक-पाठ … सीमांकक डेलीमीटर तक लगातार लाइनों पर सभी पाठ को बचाया जाता है और मानक इनपुट पर कमांड के लिए उपलब्ध कराया जाता है, या फ़ाइल निर्दिष्टकर्ता एन को निर्दिष्ट किया जाता है।यदि प्रारंभिक रेखा पर निर्दिष्ट डिलीमीटर को उद्धृत किया गया है, तो यहां-दस्तावेज़-पाठ का शाब्दिक रूप से व्यवहार किया जाता है, अन्यथा पाठ पैरामीटर विस्तार, कमांड प्रतिस्थापन, और अंकगणितीय विस्तार (जैसा कि 'विस्तार' पर अनुभाग में वर्णित है) के अधीन है। 'अगर ऑपरेटर' `<< '' के बजाय` `<< - 'है तो यहां-डॉक-टेक्स्ट में अग्रणी टैब छीन दिए जाते हैं। तीन प्रकार के कमांड हैं: शैल फ़ंक्शंस, बिल्टिन कमांड, और सामान्य प्रोग्राम - और आदेश उस क्रम में (नाम से) के लिए खोजा जाता है। वे प्रत्येक एक अलग तरीके से निष्पादित होते हैं। जब एक शेल फ़ंक्शन निष्पादित किया जाता है, तो सभी खोल स्थितित्मक पैरामीटर ($ 0 को छोड़कर, जो अपरिवर्तित बनी हुई है) शैल फ़ंक्शन के तर्कों पर सेट होते हैं। वेरिएबल्स जिन्हें कमांड के पर्यावरण में स्पष्ट रूप से रखा गया है (फ़ंक्शन नाम से पहले उन्हें असाइनमेंट करके) फ़ंक्शन में स्थानीय बनाए जाते हैं और दिए गए मानों पर सेट होते हैं। फिर फ़ंक्शन परिभाषा में दिए गए आदेश को निष्पादित किया जाता है। आदेश पूर्ण होने पर स्थितित्मक पैरामीटर उनके मूल मानों पर पुनर्स्थापित किए जाते हैं। यह सब वर्तमान खोल के भीतर होता है। शैल बिल्टिन को एक नई प्रक्रिया के बिना आंतरिक रूप से खोल में निष्पादित किया जाता है। अन्यथा, यदि कमांड नाम किसी फ़ंक्शन या बिल्टिन से मेल नहीं खाता है, तो कमांड को फाइल सिस्टम में सामान्य प्रोग्राम के रूप में खोजा जाता है (जैसा कि अगले खंड में वर्णित है)। जब एक सामान्य प्रोग्राम निष्पादित किया जाता है, तो शैल कार्यक्रम चलाता है, कार्यक्रम के लिए तर्क और पर्यावरण को पारित करता है। यदि कार्यक्रम सामान्य निष्पादन योग्य फ़ाइल नहीं है (यानी, यदि यह "जादू संख्या" से शुरू नहीं होता हैASCII प्रतिनिधित्व "#!" है, इसलिए निष्पादित करें (2) एर ENOEXEC लौटाता है) खोल शेल में प्रोग्राम की व्याख्या करेगा। बच्चे के खोल इस मामले में खुद को फिर से शुरू कर देंगे, ताकि प्रभाव इस तरह होगा जैसे विज्ञापन-शॉक स्क्रिप्ट स्क्रिप्ट को संभालने के लिए एक नया खोल लगाया गया था, सिवाय इसके कि पैरेंट खोल में स्थित हैश किए गए आदेशों का स्थान याद किया जाएगा बच्चे। ध्यान दें कि इस दस्तावेज़ के पिछले संस्करण और स्रोत कोड स्वयं भ्रामक रूप से और स्पोरैडिक रूप से "शैल प्रक्रिया" के रूप में जादू संख्या के बिना एक शेल स्क्रिप्ट का संदर्भ लेते हैं। कमांड का पता लगाने पर, शेल सबसे पहले देखता है कि उसके नाम पर एक शेल फ़ंक्शन है या नहीं। फिर यह उस नाम से एक निर्मित कमांड की तलाश में है। यदि एक बिल्टिन कमांड नहीं मिला है, तो दो चीजों में से एक होता है: स्लैश युक्त कमांड नामों को बिना किसी खोज किए निष्पादित किया जाता है। खोल प्रत्येक प्रविष्टि में खोज करता हैपथ कमांड के बदले में। का मूल्यपथपरिवर्तनीय कोलन द्वारा अलग प्रविष्टियों की एक श्रृंखला होना चाहिए। प्रत्येक प्रविष्टि में एक निर्देशिका नाम होता है। वर्तमान निर्देशिका को खाली निर्देशिका नाम से स्पष्ट रूप से इंगित किया जा सकता है, या स्पष्ट रूप से एक अवधि के द्वारा। आदेश से बाहर निकलें स्थिति प्रत्येक कमांड में बाहर निकलने की स्थिति होती है जो अन्य खोल कमांड के व्यवहार को प्रभावित कर सकती है। प्रतिमान यह है कि एक आदेश सामान्य या सफलता के लिए शून्य के साथ निकलता है, और विफलता, त्रुटि, या झूठी संकेत के लिए शून्य नहीं है। प्रत्येक कमांड के लिए मैन पेज को विभिन्न निकास कोड और उनका क्या मतलब इंगित करना चाहिए। इसके अतिरिक्त, अंतर्निहित शेल फ़ंक्शन के रूप में, अंतर्निहित आदेश निकास कोड लौटाते हैं। कॉम्प्लेक्स कमांड कंट्रोल ऑपरेटर या आरक्षित शब्दों के साथ सरल कमांड के संयोजन होते हैं, साथ ही साथ एक बड़ा जटिल कमांड बनाते हैं। अधिक आम तौर पर, कमांड निम्न में से एक है: जब तक अन्यथा कहा न जाए, तो आदेश के बाहर निकलने की स्थिति कमांड द्वारा निष्पादित अंतिम सरल आदेश का है। एक पाइपलाइन नियंत्रण ऑपरेटर द्वारा अलग किए गए एक या अधिक कमांड का अनुक्रम है। अंतिम आदेश के अलावा सभी का मानक आउटपुट अगले कमांड के मानक इनपुट से जुड़ा हुआ है। अंतिम आदेश का मानक आउटपुट शेल से सामान्य रूप से विरासत में मिलता है। पाइपलाइन के लिए प्रारूप है: ! कमांड 1 | कमांड 2 … कमांड 1 का मानक आउटपुट कमांड 2 के मानक इनपुट से जुड़ा हुआ है। मानक इनपुट, मानक आउटपुट, या दोनों कमांड को पाइपलाइन द्वारा असाइन किया जाता है, जो कि आदेश के भाग वाले पुनर्निर्देशन ऑपरेटरों द्वारा निर्दिष्ट किसी भी पुनर्निर्देशन से पहले होता है। यदि पाइपलाइन पृष्ठभूमि में नहीं है (बाद में चर्चा की गई है), खोल सभी आदेशों को पूरा करने के लिए प्रतीक्षा करता है। अगर आरक्षित शब्द! पाइपलाइन से पहले नहीं है, बाहर निकलने की स्थिति पाइपलाइन में निर्दिष्ट अंतिम आदेश की निकास स्थिति है। अन्यथा, निकास स्थिति अंतिम आदेश की निकास स्थिति का तार्किक नहीं है। यही है, यदि अंतिम आदेश शून्य लौटाता है, तो निकास स्थिति 1 है; यदि अंतिम आदेश शून्य से अधिक लौटाता है, तो निकास स्थिति शून्य है। चूंकि मानक इनपुट या मानक आउटपुट की पाइपलाइन असाइनमेंट या दोनों पुनर्निर्देशन से पहले होती हैं, इसे पुनर्निर्देशन द्वारा संशोधित किया जा सकता है। उदाहरण के लिए: $ कमांड 1 2> और 1 | command2 कमांड 1 के मानक इनपुट और कमांड 1 की मानक त्रुटि दोनों को कमांड 2 के मानक इनपुट में भेजता है। ए ; या ध्यान दें कि कुछ अन्य गोले के विपरीत, पाइपलाइन में प्रत्येक प्रक्रिया आक्रमणकारी खोल का एक बच्चा है (जब तक कि यह एक शेल बिल्टिन न हो, जिस स्थिति में यह वर्तमान खोल में निष्पादित होता है - लेकिन पर्यावरण पर इसका कोई भी प्रभाव मिटा दिया जाता है)। यदि नियंत्रण ऑपरेटर ampersand (&) द्वारा कमांड को समाप्त कर दिया जाता है, तो खोल कमांड को अतुल्यकालिक रूप से निष्पादित करता है - यानी, खोल अगले आदेश को निष्पादित करने से पहले कमांड को समाप्त करने की प्रतीक्षा नहीं करता है। पृष्ठभूमि में कमांड चलाने के लिए प्रारूप है: कमांड 1 और कमांड 2 और … यदि खोल इंटरैक्टिव नहीं है, तो एसिंक्रोनस कमांड का मानक इनपुट / dev / null पर सेट होता है एक सूची शून्य या अधिक कमांड का अनुक्रम है जो न्यूलाइन, अर्धविराम, या एम्परसैंड द्वारा अलग किया गया है, और वैकल्पिक रूप से इन तीन वर्णों में से एक द्वारा समाप्त किया गया है। सूची में दिए गए आदेशों को उनके द्वारा लिखे गए क्रम में निष्पादित किया जाता है। यदि आदेश एम्पर्सेंड द्वारा पीछा किया जाता है, तो खोल कमांड शुरू करता है और तुरंत अगले आदेश पर आगे बढ़ता है; अन्यथा यह अगले के लिए आगे बढ़ने से पहले समाप्त करने के लिए आदेश की प्रतीक्षा करता है। `` && '' और `` || '' एंड-ओआर सूची ऑपरेटर हैं। `'&&' 'पहले कमांड को निष्पादित करता है, और उसके बाद दूसरा आदेश निष्पादित करता है अगर पहले कमांड की निकास स्थिति शून्य है। `` || '' समान है, लेकिन दूसरे कमांड को निष्पादित करता है अगर पहले कमांड की निकास स्थिति nonzero है। `` && '' और '`||' 'दोनों की समान प्राथमिकता है। अगर आदेश का वाक्यविन्यास है अगर सूची है फिर सूची elif सूची फिर सूची … अन्य सूची फाई जबकि कमांड का वाक्यविन्यास है जबकि सूची सूची करो किया हुआ पहली सूची की निकास स्थिति शून्य होने पर दो सूचियों को बार-बार निष्पादित किया जाता है। जब तक कमांड समान नहीं होता है, लेकिन उस समय तक शब्द होता है, जो इसे तब तक दोहराने का कारण बनता है जब तक कि पहली सूची की निकास स्थिति शून्य न हो। आदेश के लिए वाक्यविन्यास है शब्द में परिवर्तनीय के लिए … सूची करो किया हुआ शब्दों का विस्तार किया जाता है, और फिर सूची को बदले में प्रत्येक शब्द को परिवर्तनीय सेट के साथ निष्पादित किया जाता है। क्या करें और किया जा सकता है `` {'' और '`}' ' ब्रेक का सिंटैक्स और जारी रखें कमांड है ब्रेक num जारी रखें संख्या ब्रेक के लिए या लूप के दौरान संख्या को शून्य से समाप्त कर देता है। निरंतर लूप के अगले पुनरावृत्ति के साथ जारी रखें। इन्हें बिल्टिन कमांड के रूप में कार्यान्वित किया जाता है। केस कमांड का सिंटैक्स है मामले में शब्द पैटर्न) सूची ;; … esac पैटर्न वास्तव में एक या अधिक पैटर्न हो सकता है (बाद में वर्णित शैल पैटर्न देखें), '`' वर्णों से अलग किया गया है। कमांड को या तो लिखकर समूहीकृत किया जा सकता है (सूची) या { सूची; इनमें से पहला कमांड में कमांड निष्पादित करता है। एक सूची (सूची) में समूहित बिल्टिन कमांड वर्तमान खोल को प्रभावित नहीं करेंगे। दूसरा रूप किसी अन्य खोल को फोर्क नहीं करता है, इसलिए थोड़ा अधिक कुशल है। ग्रुपिंग कमांड इस तरह से आपको अपने आउटपुट को रीडायरेक्ट करने की इजाजत देता है जैसे कि वे एक प्रोग्राम थे: {printf हैलो; printf दुनिया n ";}> ग्रीटिंग कार्य फ़ंक्शन परिभाषा का वाक्यविन्यास है नाम () कमांड एक फ़ंक्शन परिभाषा निष्पादन योग्य कथन है; निष्पादित होने पर यह नाम का नाम स्थापित करता है और शून्य की निकास स्थिति देता है। आदेश आमतौर पर '`{' 'और` `}' के बीच संलग्न एक सूची है। स्थानीय कमांड का उपयोग कर चर को किसी फ़ंक्शन में स्थानीय घोषित किया जा सकता है। यह किसी फ़ंक्शन के पहले कथन के रूप में दिखाई देना चाहिए, और वाक्यविन्यास है स्थानीय चर | - … स्थानीय को बिल्टिन कमांड के रूप में कार्यान्वित किया जाता है। जब एक चर को स्थानीय बनाया जाता है, तो यह प्रारंभिक मान और आसपास के दायरे में समान नाम के साथ वैरिएबल से निर्यात और रीडोनली झंडे प्राप्त करता है, यदि कोई है। अन्यथा, चर प्रारंभ में अनसेट है। खोल गतिशील स्कोपिंग का उपयोग करता है, ताकि यदि आप चर एक्स को स्थानीय फ़ंक्शन करने के लिए बनाते हैं, जो फ़ंक्शन जी को कॉल करता है, तो जी के अंदर बनाए गए चर x के संदर्भ संदर्भित एफ के अंदर घोषित वेरिएबल एक्स का संदर्भ लेंगे, न कि वैश्विक चर नामक x । स्थानीय बनाया जा सकता है की तुलना में एकमात्र विशेष पैरामीटर '`-' 'बनाना'` - '' स्थानीय किसी भी शेल विकल्प को फ़ंक्शन के अंदर सेट कमांड के माध्यम से बदल दिया जाता है ताकि फ़ंक्शन लौटने पर उनके मूल मानों पर पुनर्स्थापित किया जा सके। रिटर्न कमांड का वाक्यविन्यास है वापसी निकासस्टैटस यह वर्तमान में निष्पादन समारोह को समाप्त करता है। वापसी एक अंतर्निहित कमांड के रूप में लागू किया जाता है। खोल पैरामीटर का एक सेट बनाए रखता है। किसी नाम से निर्दिष्ट पैरामीटर को चर कहा जाता है। प्रारंभ करते समय, खोल सभी परिवेश चर को खोल चर में बदल देता है। नए चर को फॉर्म का उपयोग करके सेट किया जा सकता है नाम = मूल्य उपयोगकर्ता द्वारा निर्धारित चर के पास एक वर्ण होना चाहिए जिसमें केवल वर्णमाला, संख्यात्मक, और अंडरस्कोर शामिल हैं - जिनमें से पहला संख्यात्मक नहीं होना चाहिए। नीचे वर्णित अनुसार एक पैरामीटर को किसी संख्या या विशेष वर्ण द्वारा भी इंगित किया जा सकता है। एक स्थितित्मक पैरामीटर एक संख्या (एन> 0) द्वारा निर्दिष्ट पैरामीटर है। खोल इन प्रारंभिक रूप से इसके कमांड लाइन तर्कों के मानों को सेट करता है जो शैल स्क्रिप्ट के नाम का पालन करते हैं। सेट (1) बिल्टिन का उपयोग उन्हें सेट या रीसेट करने के लिए भी किया जा सकता है। एक विशेष पैरामीटर एक पैरामीटर है जो निम्नलिखित विशेष वर्णों में से एक द्वारा दर्शाया गया है। पैरामीटर का मान उसके चरित्र के बगल में सूचीबद्ध है। * एक से शुरू, स्थितित्मक मानकों में फैलता है। जब विस्तार डबल-उद्धृत स्ट्रिंग के भीतर होता है तो यह प्रत्येक फ़ील्ड के मान के साथ एक फ़ील्ड तक फैलता है जिसमें पहले पैरामीटर से अलग होता हैभारतीय विदेश सेवा परिवर्तनीय, या एक द्वारा @ एक से शुरू, स्थितित्मक मानकों में फैलता है।जब विस्तार डबल-कोट्स के भीतर होता है, तो प्रत्येक स्थितित्मक पैरामीटर एक अलग तर्क के रूप में फैलता है। यदि कोई पोजीशनल पैरामीटर नहीं है, तो @ का विस्तार शून्य तर्क उत्पन्न करता है, भले ही @ डबल-कोट किया गया हो। इसका मूल अर्थ क्या है, उदाहरण के लिए, यदि $ 1 `` abc 'है और $ 2 `def ghi' है तो Qq $ @ दो तर्कों तक फैलता है: एबीसी डीफ जीएच # स्थितित्मक मानकों की संख्या में फैलता है। ? सबसे हालिया पाइपलाइन की निकास स्थिति में विस्तार करता है। - (हाइफ़न।) वर्तमान विकल्प झंडे (एकल-अक्षर विकल्प नामों को एक स्ट्रिंग में सम्मिलित किया गया है) जैसा कि आमंत्रण पर निर्दिष्ट है, सेट बिल्टिन कमांड द्वारा, या शेल द्वारा स्पष्ट रूप से विस्तारित किया गया है। $ आवंटित खोल की प्रक्रिया आईडी में फैलता है। एक सबहेल अपने माता-पिता के रूप में $ के समान मूल्य को बरकरार रखता है। ! वर्तमान खोल से निष्पादित सबसे हालिया पृष्ठभूमि कमांड की प्रक्रिया आईडी में विस्तारित करता है। पाइपलाइन के लिए, प्रक्रिया आईडी पाइपलाइन में अंतिम आदेश की है। 0 (शून्य।) खोल या खोल स्क्रिप्ट के नाम पर विस्तारित करता है। शब्द विस्तार यह खंड शब्दों पर किए गए विभिन्न विस्तारों का वर्णन करता है। जैसा कि बाद में समझाया गया है, हर शब्द पर सभी विस्तार नहीं किए जाते हैं। टिल्ड विस्तार, पैरामीटर विस्तार, कमांड प्रतिस्थापन, अंकगणितीय विस्तार, और एक शब्द के भीतर होने वाले उद्धरण निष्कासन एक ही क्षेत्र में विस्तारित होते हैं। यह केवल फ़ील्ड विभाजन या पथनाम विस्तार है जो एक शब्द से कई फ़ील्ड बना सकता है। इस नियम का एक अपवाद ऊपर वर्णित जैसा कि डबल-कोट्स के भीतर @ विशेष पैरामीटर का विस्तार है। शब्द विस्तार का क्रम है: टिल्ड विस्तार, पैरामीटर विस्तार, कमांड प्रतिस्थापन, अंकगणितीय विस्तार (ये सभी एक ही समय में होते हैं)। फ़ील्ड स्प्लिटिंग चरण (1) द्वारा उत्पन्न फ़ील्ड पर तब तक की जाती है जब तक किभारतीय विदेश सेवा परिवर्तनीय शून्य है। पथनाम विस्तार (जब तक सेट -च प्रभाव में है)। उद्धरण हटाने $ वर्ण का उपयोग पैरामीटर विस्तार, कमांड प्रतिस्थापन, या अंकगणितीय मूल्यांकन को पेश करने के लिए किया जाता है। एक अज्ञात tilde चरित्र (~) से शुरू एक शब्द tilde विस्तार के अधीन है। स्लैश (/) या शब्द के अंत तक के सभी वर्ण उपयोगकर्ता नाम के रूप में माना जाता है और उपयोगकर्ता की होम निर्देशिका के साथ प्रतिस्थापित किया जाता है। यदि उपयोगकर्ता नाम गुम है (जैसा कि ~ / foobar में) tilde को इसके मान के साथ बदल दिया गया है होम परिवर्तनीय (वर्तमान उपयोगकर्ता की होम निर्देशिका)। पैरामीटर विस्तार के लिए प्रारूप निम्नानुसार है: $ {} अभिव्यक्ति जहां अभिव्यक्ति में सभी वर्ण होते हैं, जब तक कि '`}' ''` `} '' किसी भी बैकस्लैश से या किसी उद्धृत स्ट्रिंग के भीतर से बच निकले, और एम्बेडेड अंकगणितीय विस्तार, कमांड प्रतिस्थापन और परिवर्तनीय विस्तार में वर्णों की जांच नहीं की जाती है, मिलान ``} '' पैरामीटर विस्तार के लिए सबसे सरल रूप है: $ {} पैरामीटर मानदंड का मान, यदि कोई है, प्रतिस्थापित किया गया है। पैरामीटर नाम या प्रतीक ब्रेसिज़ में संलग्न किया जा सकता है, जो एक से अधिक अंकों के साथ स्थितित्मक पैरामीटर को छोड़कर वैकल्पिक होता है या जब पैरामीटर का पालन उस चरित्र के द्वारा किया जाता है जिसे नाम के हिस्से के रूप में व्याख्या किया जा सकता है। यदि डबल-कोट्स के अंदर पैरामीटर विस्तार होता है: विस्तार के परिणामों पर पथनाम विस्तार नहीं किया जाता है। @ के अपवाद के साथ विस्तार के परिणामों पर फील्ड विभाजन नहीं किया जाता है। इसके अतिरिक्त, पैरामीटर विस्तार को निम्नलिखित प्रारूपों में से एक का उपयोग करके संशोधित किया जा सकता है। $ {पैरामीटर: निर्धारित की शब्द} डिफ़ॉल्ट मान का प्रयोग करें। यदि पैरामीटर अनसेट या शून्य है, तो शब्द का विस्तार प्रतिस्थापित किया जाता है;
का हवाला देते हुए
बैकस्लैश
एकल कोट
डबल उद्धरण
सुरक्षित शब्द
उपनाम
आदेश
सरल आदेश
खोज और निष्पादन
पथ खोज
कॉम्प्लेक्स कमांड्स
पाइपलाइन
पृष्ठभूमि कमांड -
सूची - आम तौर पर बोलते हुए
शॉर्ट सर्किट सूची ऑपरेटर
फ्लो-कंट्रोल कंस्ट्रक्शन - अगर, मामले के लिए, जबकि
समूह को एक साथ समूहीकृत करना
चर और पैरामीटर्स
स्थितित्मक पैरामीटर्स
विशेष पैरामीटर्स
टिल्ड विस्तार (उपयोगकर्ता की होम निर्देशिका को प्रतिस्थापित करना)
पैरामीटर विस्तार




