शैल स्क्रिप्ट: Difference between revisions
No edit summary |
No edit summary |
||
(4 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{short description|Script written for the shell, or command line interpreter, of an operating system}} | {{short description|Script written for the shell, or command line interpreter, of an operating system}} | ||
[[File:FreeBSD 10 vi RC Firewall.png|thumb|[[ipfirewall|आईपीफायर दीवार]] को कॉन्फ़िगर करने के लिए [[FreeBSD]] शैल स्क्रिप्ट का संपादन]]'''शैल स्क्रिप्ट''' ऐसा [[कंप्यूटर प्रोग्राम]] है जिसे यूनिक्स शैल, कमांड-लाइन दुभाषिया द्वारा चलाने के लिए डिज़ाइन किया गया है।<ref>{{ citation | last1 = Kernighan | first1 = Brian W. | author-link = Brian Kernighan | last2 = Pike | first2 = Rob | author2-link = Rob Pike | title = The UNIX Programming Environment | publisher = Prentice Hall, Inc. | year = 1984 | chapter = 3. Using the Shell | page = 94 | quote = The shell is actually a programming language: it has variables, loops, decision-making, and so on. | isbn = 0-13-937699-2 }}</ref> शैल स्क्रिप्ट की विभिन्न भाषाओँ को स्क्रिप्टिंग भाषा माना जाता है। शैल स्क्रिप्ट द्वारा किए गए विशिष्ट संचालन में फ़ाइल आदान-प्रदान, प्रोग्राम निष्पादन और प्रिंटिंग टेक्स्ट सम्मिलित हैं। स्क्रिप्ट जो पर्यावरण को संग्रह करती है, प्रोग्राम चलाती है, और आवश्यक सफाई या लॉगिंग करती है, वह रैपर कहलाती है। | |||
[[File:FreeBSD 10 vi RC Firewall.png|thumb|[[ipfirewall|आईपीफायर दीवार]] को कॉन्फ़िगर करने के लिए [[FreeBSD]] | |||
ऑपरेटिंग प्रणाली | ऑपरेटिंग प्रणाली शैल चलाने के स्वचालित मोड का अर्थ करने के लिए शब्द का प्रयोग सामान्यतः भी किया जाता है; प्रत्येक ऑपरेटिंग प्रणाली इन कार्यों के लिए विशेष नाम का उपयोग करता है जिसमें बैच फ़ाइलें (एमएसडॉस-विन95 भाप, ओएस/2), कमांड प्रक्रियाएँ (वीएमएस), और शैल स्क्रिप्ट्स ([[Windows NT|विंडोज एनटी]] भाप और तृतीय-पक्ष डेरिवेटिव जैसे 4एनटी—लेख cmd.exe), और मेनफ्रेम ऑपरेटिंग प्रणाली कई नियमो से जुड़े हैं। | ||
सामान्यतः यूनिक्स और यूनिक्स जैसी प्रणालियों में उपस्थित | सामान्यतः यूनिक्स और यूनिक्स जैसी प्रणालियों में उपस्थित शैल में [[कॉर्न शेल]], [[बॉर्न शेल|बॉर्न]] शैल और [[जीएनयू बैश]] सम्मिलित हैं। जबकि यूनिक्स ऑपरेटिंग प्रणाली में भिन्न त्रुटिपूर्ण शैल हो सकता है, जैसे कि [[macOS|मैक ओएस]] पर [[Zsh]], ये शैल सामान्यतः पश्चगामी संगतता के लिए उपस्थित होते हैं। | ||
== क्षमताएं == | == क्षमताएं == | ||
=== टिप्पणियाँ === | === टिप्पणियाँ === | ||
[[टिप्पणी (कंप्यूटर प्रोग्रामिंग)]] को | [[टिप्पणी (कंप्यूटर प्रोग्रामिंग)]] को शैल द्वारा अप्रत्यक्ष किया जाता है। वे सामान्यतः हैश (<code>#</code>) प्रतीक से प्रारम्भ होते हैं, और पंक्ति के अंत तक निरंतर रहते हैं।<ref name="Pro_Bash_Programming">जॉनसन, क्रिस (2009)। | ||
[https://books.google.com/books?id=NJmhi6T0nGMC&q=comment] प्रो बैश प्रोग्रामिंग: लिनक्स शेल की स्क्रिप्टिंग, Apress, 27 सितंबर, 2019 को पुनः प्राप्त। {{ISBN|9781430219989}}</ref> | [https://books.google.com/books?id=NJmhi6T0nGMC&q=comment] प्रो बैश प्रोग्रामिंग: लिनक्स शेल की स्क्रिप्टिंग, Apress, 27 सितंबर, 2019 को पुनः प्राप्त। {{ISBN|9781430219989}}</ref> | ||
Line 21: | Line 15: | ||
शेबैंग (यूनिक्स), या हैश-बैंग, विशेष प्रकार की टिप्पणी है जिसका उपयोग प्रणाली यह निर्धारित करने के लिए करता है कि फ़ाइल को निष्पादित करने के लिए किस दुभाषिया का उपयोग किया जाए। शेबैंग फ़ाइल की प्रथम पंक्ति होनी चाहिए और <code>#!</code> प्रारम्भ होनी चाहिए।<ref name=Pro_Bash_Programming />यूनिक्स-जैसे ऑपरेटिंग प्रणाली में, निम्नलिखित वर्ण<code>#!</code>उपसर्ग की व्याख्या निष्पादन योग्य प्रोग्राम के पथ के रूप में की जाती है जो स्क्रिप्ट की व्याख्या करेगा।<ref>{{Cite web|url=https://linux.die.net/man/3/execve|title=exec(3p) – POSIX Programmer's Manual|access-date=2020-07-24}}</ref> | शेबैंग (यूनिक्स), या हैश-बैंग, विशेष प्रकार की टिप्पणी है जिसका उपयोग प्रणाली यह निर्धारित करने के लिए करता है कि फ़ाइल को निष्पादित करने के लिए किस दुभाषिया का उपयोग किया जाए। शेबैंग फ़ाइल की प्रथम पंक्ति होनी चाहिए और <code>#!</code> प्रारम्भ होनी चाहिए।<ref name=Pro_Bash_Programming />यूनिक्स-जैसे ऑपरेटिंग प्रणाली में, निम्नलिखित वर्ण<code>#!</code>उपसर्ग की व्याख्या निष्पादन योग्य प्रोग्राम के पथ के रूप में की जाती है जो स्क्रिप्ट की व्याख्या करेगा।<ref>{{Cite web|url=https://linux.die.net/man/3/execve|title=exec(3p) – POSIX Programmer's Manual|access-date=2020-07-24}}</ref> | ||
=== शॉर्टकट === | === शॉर्टकट === | ||
शैल स्क्रिप्ट प्रणाली कमांड का सुविधाजनक परिवर्तन प्रदान कर सकती है जहां विशेष पर्यावरण समायोजन, कमांड विकल्प, या पोस्ट-प्रोसेसिंग स्वचालित रूप से प्रारम्भ होती है, किन्तु इस प्रकार से जो नई स्क्रिप्ट को पूर्ण रूप से सामान्य [[यूनिक्स कमांड]] के रूप में कार्य करने की अनुमति देती है। | |||
उदाहरण[[ रास | एलएस]] का संस्करण बनाना होगा, फाइलों को सूचीबद्ध करने का आदेश, इसे <code>l</code> का अल्प कमांड नाम देना होगा , जो सामान्यतः रूप से उपयोगकर्ता की <code>bin</code> निर्देशिका में <code>/home/''username''/bin/l</code> निर्देशिका के रूप में, त्रुटिपूर्ण सेट के रूप में सहेजा जाएगा और कमांड विकल्पों की पूर्व-आपूर्ति है। | उदाहरण[[ रास | एलएस]] का संस्करण बनाना होगा, फाइलों को सूचीबद्ध करने का आदेश, इसे <code>l</code> का अल्प कमांड नाम देना होगा , जो सामान्यतः रूप से उपयोगकर्ता की <code>bin</code> निर्देशिका में <code>/home/''username''/bin/l</code> निर्देशिका के रूप में, त्रुटिपूर्ण सेट के रूप में सहेजा जाएगा और कमांड विकल्पों की पूर्व-आपूर्ति है। | ||
Line 36: | Line 28: | ||
उपयोगकर्ता तब सबसे अधिक उपयोग की जाने वाली शॉर्ट लिस्टिंग के लिए <code>l</code> का उपयोग कर सकता था। | उपयोगकर्ता तब सबसे अधिक उपयोग की जाने वाली शॉर्ट लिस्टिंग के लिए <code>l</code> का उपयोग कर सकता था। | ||
शैल स्क्रिप्ट का उदाहरण जिसे शॉर्टकट के रूप में उपयोग किया जा सकता है, किसी दिए गए निर्देशिका के अंदर सभी फाइलों और निर्देशिकाओं की सूची को प्रिंट करना होगा। | |||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Line 44: | Line 36: | ||
ls -al | ls -al | ||
</syntaxhighlight> | </syntaxhighlight> | ||
इस विषय में, | इस विषय में, शैल स्क्रिप्ट <span style= font-family:courier >#!/bin/sh</span> की अपनी सामान्य प्रारंभिक लाइन से प्रारम्भ होगी। इसके पश्चात, स्क्रिप्ट <span style= font-family:courier>clear</span> कमांड निष्पादित करती है जो आगामी लाइन पर जाने से पूर्व सभी टेक्स्ट के टर्मिनल को क्लियर करती है। निम्न पंक्ति स्क्रिप्ट का मुख्य कार्य प्रदान करती है। <span style= font-family:courier >ls -al</span> कमांड उन फाइलों और डाइरेक्टरी को सूचीबद्ध करता है जो उस डायरेक्टरी में हैं जहां से स्क्रिप्ट चलाई जा रही है। उपयोगकर्ता की जरूरतों को दर्शाने के लिए <span style= font-family:courier>ls</span> कमांड विशेषताओं को परिवर्तित किया जा सकता है। | ||
ध्यान दें: यदि कार्यान्वयन में <span style= font-family:courier >clear</span> कमांड नहीं है, तो इसके अतिरिक्त <span style= font-family:courier >clr</span> कमांड का उपयोग करने का प्रयत्न करें। | ध्यान दें: यदि कार्यान्वयन में <span style= font-family:courier >clear</span> कमांड नहीं है, तो इसके अतिरिक्त <span style= font-family:courier >clr</span> कमांड का उपयोग करने का प्रयत्न करें। | ||
=== बैच जॉब्स === | === बैच जॉब्स === | ||
शैल स्क्रिप्ट कई कमांड की अनुमति देती है जो मैन्युअल रूप से कमांड-लाइन इंटरफ़ेस पर स्वचालित रूप से निष्पादित होने के लिए अंकित की जाएगी, और उपयोगकर्ता द्वारा अनुक्रम के प्रत्येक चरण को ट्रिगर करने के लिए प्रतीक्षा किए बिना उदाहरण के लिए, तीन सी स्रोत कोड फ़ाइलों वाली निर्देशिका में, उनमें से अंतिम प्रोग्राम बनाने के लिए आवश्यक चार आदेशों को मैन्युअल रूप से चलाने के अतिरिक्त, कोई इसके अतिरिक्त [[POSIX|पॉज़िक्स]]- संगत शैल के लिए स्क्रिप्ट बना सकता है, जिसका नाम यहां दिया गया है <code>build</code> और उनके साथ निर्देशिका में रखा गया, जो उन्हें स्वचालित रूप से संकलित करेगा। | |||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Line 63: | Line 55: | ||
=== सामान्यीकरण === | === सामान्यीकरण === | ||
भिन्न-भिन्न कार्यों के लिए सरल बैच कार्य असामान्य नहीं हैं, किन्तु | भिन्न-भिन्न कार्यों के लिए सरल बैच कार्य असामान्य नहीं हैं, किन्तु शैल लूप, परीक्षण और चर का उपयोग करने से उपयोगकर्ताओं को अधिक लचीलापन मिलता है। जेपीईजी छवियों को पीएनजी छवियों में कनवर्ट करने के लिए पॉज़िक्स एसएच स्क्रिप्ट, जहां छवि नाम कमांड लाइन पर प्रदान किए जाते हैं-संभवतः वाइल्डकार्ड के माध्यम से- स्क्रिप्ट के अंदर सूचीबद्ध होने के अतिरिक्त, इस फ़ाइल के साथ बनाया जा सकता है, सामान्यतः फ़ाइल में सहेजा जाता है। | ||
<code>/home/''username''/bin/jpg2png</code> | <code>/home/''username''/bin/jpg2png</code> | ||
Line 83: | Line 75: | ||
<code>jpg2png</code> e> कमांड को केवल<code>/home/''username''/bin/jpg2png *.jpg के साथ JPEG</code>छवियों से भरी संपूर्ण निर्देशिका पर चलाया जा सकता है। | <code>jpg2png</code> e> कमांड को केवल<code>/home/''username''/bin/jpg2png *.jpg के साथ JPEG</code>छवियों से भरी संपूर्ण निर्देशिका पर चलाया जा सकता है। | ||
=== प्रोग्रामिंग === | === प्रोग्रामिंग === | ||
कई आधुनिक | कई आधुनिक शैल भी विभिन्न विशेषताओं की आपूर्ति करते हैं जो सामान्यतः केवल अधिक परिष्कृत सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषाओं में पाई जाती हैं, जैसे नियंत्रण-प्रवाह निर्माण, चर, टिप्पणी (कंप्यूटर प्रोग्रामिंग), सरणियाँ, [[सबरूटीन]] और इसी प्रकार उपलब्ध सुविधाओं के इस प्रकार के साथ, शैल स्क्रिप्ट के रूप में यथोचित परिष्कृत अनुप्रयोगों को लिखना संभव है। चूंकि, वे अभी भी इस तथ्य से सीमित हैं कि अधिकांश शैल भाषाओं में डेटा टाइपिंग प्रणाली, क्लासेस, थ्रेडिंग, जटिल गणित और अन्य सामान्य पूर्ण भाषा सुविधाओं के लिए अधिक अर्घ्य या कोई समर्थन नहीं है, और सामान्यतः संकलित कोड या व्याख्या की गई भाषाओं की तुलना में प्रदर्शन लक्ष्य के रूप में गति के साथ अधिक मंद होती हैं। | ||
मानक यूनिक्स उपकरण [[sed]] और [[awk]] | मानक यूनिक्स उपकरण [[sed]] और [[awk]] शैल प्रोग्रामिंग के लिए अतिरिक्त क्षमताएं प्रदान करते हैं; [[पर्ल]] को शैल स्क्रिप्ट में भी एम्बेड किया जा सकता है जैसे कि अन्य स्क्रिप्टिंग भाषाओं जैसे [[टीसीएल]] पर्ल और टीसीएल ग्राफिक्स उपकरण के साथ भी आते हैं। | ||
== विशिष्ट पॉज़िक्स स्क्रिप्टिंग भाषाएँ == | == विशिष्ट पॉज़िक्स स्क्रिप्टिंग भाषाएँ == | ||
Line 94: | Line 84: | ||
सामान्यतः यूनिक्स, लिनक्स, और पॉज़िक्स- संगत ऑपरेटिंग प्रणाली इंस्टॉलेशन पर पाई जाने वाली स्क्रिप्टिंग भाषाओं में सम्मिलित हैं। | सामान्यतः यूनिक्स, लिनक्स, और पॉज़िक्स- संगत ऑपरेटिंग प्रणाली इंस्टॉलेशन पर पाई जाने वाली स्क्रिप्टिंग भाषाओं में सम्मिलित हैं। | ||
* [[के शेल]] (<code>ksh</code>) कई संभावित संस्करणों जैसे ksh88, Korn Shell '93 और अन्य में। | * [[के शेल|के]] शैल (<code>ksh</code>) कई संभावित संस्करणों जैसे ksh88, Korn Shell '93 और अन्य में। | ||
* बॉर्न | * बॉर्न शैल (<code>sh</code>), उपयोग में आने वाले सबसे पूर्व वृत्त में से हैं। | ||
* [[सी खोल|सी | * [[सी खोल|सी]] शैल (<code>csh</code>) | ||
* [[बैश (यूनिक्स शेल)]] (<code>bash</code>) | * [[बैश (यूनिक्स शेल)]] (<code>bash</code>) | ||
* <code>[[tclsh]]</code>, | * <code>[[tclsh]]</code>, शैल जो Tcl/Tk प्रोग्रामिंग भाषा का मुख्य घटक है। | ||
* [[इच्छा (खोल)|इच्छा (शेल)]] जीयूआई-आधारित टीसीएल/टीसी | * [[इच्छा (खोल)|इच्छा (शेल)]] जीयूआई-आधारित टीसीएल/टीसी शैल है। | ||
C और Tcl शेल्स का सिंटैक्स उक्त प्रोग्रामिंग भाषाओं के समान है, और कॉर्न शेल्स और बैश बॉर्न | C और Tcl शेल्स का सिंटैक्स उक्त प्रोग्रामिंग भाषाओं के समान है, और कॉर्न शेल्स और बैश बॉर्न शैल के विकास हैं, जो [[ALGOL|ऐल्गॉल]] भाषा पर आधारित है, जिसमें कई अन्य तत्वों को भी जोड़ा गया है।<ref>Unix Shells By Example, pp 7-10,</ref> दूसरी ओर, विभिन्न शैल प्लस उपकरण जैसे awk, sed, [[grep]], और [[BASIC|बेसिक]], लिस्प (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा) और आगे पर्ल प्रोग्रामिंग भाषा में योगदान दिया।<ref>Programming Perl, 5th Edition, preface</ref> अन्य वृत्त जो मशीन पर या डाउनलोड के लिए उपलब्ध हो सकते हैं उनमें सम्मिलित हैं। | ||
* [[अल्मक्विस्ट खोल|अल्मक्विस्ट | * [[अल्मक्विस्ट खोल|अल्मक्विस्ट]] शैल (<code>ash</code>) | ||
* [[पावरशेल]] (<code>msh</code>) | * [[पावरशेल|पावर]]शैल (<code>msh</code>) | ||
* [[जेड खोल|जेड | * [[जेड खोल|जेड]] शैल (<code>zsh</code>, विशेष रूप से सामान्य उन्नत कोर्नशेल) | ||
* [[टेनेक्स सी शेल]] (<code>tcsh</code>) | * [[टेनेक्स सी शेल|टेनेक्स सी]] शैल (<code>tcsh</code>) | ||
पायथन (प्रोग्रामिंग भाषा), [[ रूबी (प्रोग्रामिंग भाषा) ]], सी (प्रोग्रामिंग भाषा), [[ जावा (प्रोग्रामिंग भाषा) | जावा (प्रोग्रामिंग भाषा)]], पर्ल, [[ पास्कल (प्रोग्रामिंग भाषा) | पास्कल (प्रोग्रामिंग भाषा)]], [[Rexx|रेक्स]] आदि पर आधारित संबंधित प्रोग्राम भी विभिन्न रूपों में व्यापक रूप से उपलब्ध हैं। अन्य सामान्य | पायथन (प्रोग्रामिंग भाषा), [[ रूबी (प्रोग्रामिंग भाषा) ]], सी (प्रोग्रामिंग भाषा), [[ जावा (प्रोग्रामिंग भाषा) | जावा (प्रोग्रामिंग भाषा)]], पर्ल, [[ पास्कल (प्रोग्रामिंग भाषा) | पास्कल (प्रोग्रामिंग भाषा)]], [[Rexx|रेक्स]] आदि पर आधारित संबंधित प्रोग्राम भी विभिन्न रूपों में व्यापक रूप से उपलब्ध हैं। अन्य सामान्य शैल है [[पुराना खोल|पूर्व]] शैल (<code>osh</code>), जिसका मैनुअल पेज बताता है कि यह छठे संस्करण यूनिक्स से मानक कमांड दुभाषिया का उन्नत, पिछड़ा-संगत पोर्ट है।<ref>{{Cite web|url=https://manned.org/osh/f30afb07|title=डिश - manned.org|website=manned.org|access-date=2019-01-16}}</ref> तथाकथित दूरस्थ वृत्त जैसे | ||
* [[रिमोट शेल]] (<code>rsh</code>) | * [[रिमोट शेल|रिमोट]] शैल (<code>rsh</code>) | ||
* [[सुरक्षित खोल|सुरक्षित | * [[सुरक्षित खोल|सुरक्षित]] शैल (<code>ssh</code>) | ||
रिमोट प्रणाली पर अधिक जटिल | रिमोट प्रणाली पर अधिक जटिल शैल चलाने के लिए वास्तव में केवल उपकरण हैं और विशेषताओं की प्रकार कोई 'शेल' नहीं है। | ||
== अन्य स्क्रिप्टिंग भाषाएं == | == अन्य स्क्रिप्टिंग भाषाएं == | ||
Line 117: | Line 107: | ||
भाषा का अंकन}} | भाषा का अंकन}} | ||
कई शक्तिशाली स्क्रिप्टिंग भाषाओं को उन कार्यों के लिए प्रस्तुत किया गया है जो अधिक बड़े या जटिल हैं जिन्हें साधारण | कई शक्तिशाली स्क्रिप्टिंग भाषाओं को उन कार्यों के लिए प्रस्तुत किया गया है जो अधिक बड़े या जटिल हैं जिन्हें साधारण शैल स्क्रिप्ट के साथ आराम से संरक्षित किया जा सकता है, किन्तु जिसके लिए स्क्रिप्ट के लाभ वांछनीय हैं और पूर्ण विकसित, संकलित प्रोग्रामिंग भाषा का विकास हानिकारक होगा। स्क्रिप्टिंग भाषाओं को उच्च-स्तरीय प्रोग्रामिंग भाषाओं से भिन्न करने वाले सूक्ष्म पर वादविवाद का निरंतर स्रोत है, किन्तु, सामान्यतः बोलना, स्क्रिप्टिंग भाषा वह है जिसके लिए दुभाषिया की आवश्यकता होती है। | ||
== जीवन चक्र == | == जीवन चक्र == | ||
शैल स्क्रिप्ट प्रायः सॉफ्टवेयर विकास में प्रारंभिक चरण के रूप में कार्य करते हैं, और पश्चात में भिन्न अंतर्निहित कार्यान्वयन के लिए रूपांतरण के अधीन होते हैं, सामान्यतः पर्ल, पायथन (प्रोग्रामिंग भाषा), या सी (प्रोग्रामिंग भाषा) में परिवर्तित हो जाते हैं। [[दुभाषिया निर्देश]] फ़ाइल नाम व्याप्ति के रूप में उजागर होने के अतिरिक्त कार्यान्वयन विवरण को स्क्रिप्ट के अंदर पूर्ण रूप से लुप्त करने की अनुमति देता है, और अंतिम उपयोगकर्ताओं पर कोई प्रभाव डाले बिना विभिन्न भाषाओं में निर्बाध पुनर्कार्यान्वयन प्रदान करता है। | |||
जबकि, sh [[फाइल एक्सटेंशन]] वाली फ़ाइलें सामान्यतः किसी प्रकार की | जबकि, sh [[फाइल एक्सटेंशन]] वाली फ़ाइलें सामान्यतः किसी प्रकार की शैल स्क्रिप्ट होती हैं, अधिकांश शैल स्क्रिप्ट में कोई फ़ाइल नाम एक्सटेंशन नहीं होता है।<ref>{{cite book | ||
|last1=Robbins |first1=Arnold |last2=Hannah |first2=Elbert |last3=Lamb |first3=Linda | |last1=Robbins |first1=Arnold |last2=Hannah |first2=Elbert |last3=Lamb |first3=Linda | ||
|url=https://books.google.com/books?id=J5nKVVg5YHAC |title=Learning the vi and Vim Editors | |url=https://books.google.com/books?id=J5nKVVg5YHAC |title=Learning the vi and Vim Editors | ||
Line 156: | Line 146: | ||
| access-date = May 7, 2017 | | access-date = May 7, 2017 | ||
}}</ref> | }}</ref> | ||
== लाभ और हानि == | == लाभ और हानि == | ||
शैल स्क्रिप्ट लिखने का संभवता सबसे बड़ा लाभ यह है कि कमांड और सिंटैक्स वही होते हैं जो सीधे कमांड-लाइन पर अंकित किए जाते हैं। प्रोग्रामर को पूर्ण रूप से भिन्न सिंटैक्स पर स्विच करने की ज़रूरत नहीं है, क्योंकि यदि स्क्रिप्ट किसी दूसरी भाषा में लिखी गई थी, या यदि संकलित भाषा का उपयोग किया गया था। | |||
प्रायः अन्य प्रोग्रामिंग भाषाओं में समतुल्य कोड लिखने की तुलना में | प्रायः अन्य प्रोग्रामिंग भाषाओं में समतुल्य कोड लिखने की तुलना में शैल स्क्रिप्ट लिखना अत्यधिक तीव्र होता है। कई लाभों में सरल प्रोग्राम या फ़ाइल चयन, त्वरित प्रारंभ और इंटरैक्टिव डिबगिंग सम्मिलित हैं। शैल स्क्रिप्ट का उपयोग उपस्थिता कार्यक्रमों के निकटतम अनुक्रमण और निर्णय लेने की कड़ी प्रदान करने के लिए किया जा सकता है, और मध्यम आकार की स्क्रिप्ट के लिए संकलन कदम की अनुपस्थिति लाभ है। इंटरप्रिटेटिव रनिंग डिबगिंग कोड को स्क्रिप्ट में लिखना सरल बनाता है और बग्स की जानकारी प्राप्त करने और उन्हें ठीक करने के लिए इसे तत्पश्चात से चलाता है। गैर-विशेषज्ञ उपयोगकर्ता प्रोग्राम के व्यवहार को अनुकूलित करने के लिए स्क्रिप्टिंग का उपयोग कर सकते हैं, और शैल स्क्रिप्टिंग बहु प्रसंस्करण के लिए कुछ सीमित स्थान प्रदान करती है। | ||
दूसरी ओर, | दूसरी ओर, शैल स्क्रिप्टिंग महंगी त्रुटियों से ग्रस्त है। असावधानीवश टंकण त्रुटियाँ जैसे <code>[[rm (Unix)|rm]] -rf * /</code> इच्छित <code>rm -rf */</code> के अतिरिक्त) यूनिक्स समुदाय में लोककथाएँ हैं, अतिरिक्त स्थान कमांड को परिवर्तित करता है जो वर्तमान निर्देशिका में निहित सभी उपनिर्देशिकाओं को विस्थापित कर देता है, जो फ़ाइल प्रणाली की रूट निर्देशिका से सब कुछ विस्थापित कर देता है। इसी प्रकार की समस्याएं <code>[[cp (Unix)|cp]]</code> और <code>[[mv (Unix)|mv]]</code> को खतरनाक हथियारों में रूपांतरित कर सकती हैं, और <code>></code> रीडायरेक्ट का दुरुपयोग फ़ाइल की सामग्री को विस्थापित कर सकता है। यह इस तथ्य से और अधिक समस्याग्रस्त हो जाता है कि कई यूनिक्स आदेश केवल अक्षर से नाम में भिन्न होते हैं: <code>cp</code>, <code>[[cd (command)|cd]]</code>, <code>[[dd (Unix)|dd]]</code>, <code>[[df (Unix)|df]]</code>, आदि। | ||
महत्वपूर्ण हानि मंद गति से निष्पादन की गति और निष्पादित लगभग प्रत्येक | महत्वपूर्ण हानि मंद गति से निष्पादन की गति और निष्पादित लगभग प्रत्येक शैल कमांड के लिए नई प्रक्रिया प्रारम्भ करने की आवश्यकता है। जब [[पाइपलाइन (कंप्यूटिंग)]] स्थापित करके स्क्रिप्ट का कार्य पूर्ण किया जा सकता है जिसमें कुशल फ़िल्टर (सॉफ़्टवेयर) कमांड अधिकांश कार्य करते हैं, तो मंदी कम हो जाती है, किन्तु जटिल स्क्रिप्ट सामान्यतः पारंपरिक संकलित प्रोग्राम की तुलना में मंद परिमाण के कई आदेश होते हैं। जो समान कार्य करता है। | ||
विभिन्न प्लेटफॉर्मों के मध्य अनुकूलता संबंधी समस्याएं भी हैं। पर्ल के निर्माता [[लैरी वॉल]] ने प्रसिद्ध रूप से लिखा है कि | विभिन्न प्लेटफॉर्मों के मध्य अनुकूलता संबंधी समस्याएं भी हैं। पर्ल के निर्माता [[लैरी वॉल]] ने प्रसिद्ध रूप से लिखा है कि शैल स्क्रिप्ट की तुलना में शैल को पोर्ट करना सरल है।<ref>{{cite newsgroup |title=अंतिम तर्क ढूँढना|author=[[Larry Wall]] |date=January 4, 1991 |newsgroup=comp.unix.shell |url=https://www.tuhs.org/Usenet/comp.unix.shell/1991-January/002464.html |access-date=January 5, 2023}}</ref> इसी प्रकार, अधिक जटिल स्क्रिप्ट स्वयं शैल स्क्रिप्टिंग भाषा की सीमाओं में चल सकती हैं; सीमाएँ गुणवत्ता कोड लिखना कठिन बनाती हैं, और मूल शैल भाषा के साथ समस्याओं को सुधारने के लिए विभिन्न शेल्स द्वारा एक्सटेंशन समस्या को क्षति बना सकते हैं।<ref>{{cite web|url=https://www.ooblick.com/text/CshProgrammingConsideredHarmful.html|title=सीएसएच प्रोग्रामिंग को हानिकारक माना जाता है|author=Christiansen, Tom}}</ref> कुछ स्क्रिप्ट भाषाओं का उपयोग करने के कई हानि प्रोग्रामिंग भाषा सिंटैक्स या कार्यान्वयन के अंदर डिज़ाइन की खामियों के कारण होते हैं, और आवश्यक नहीं कि पाठ-आधारित कमांड-लाइन के उपयोग से लगाए गए हों, ऐसे कई वृत्त हैं जो अन्य शैल प्रोग्रामिंग भाषाओं का उपयोग करते हैं या यहाँ तक कि [[Scsh]] (जो [[योजना (प्रोग्रामिंग भाषा)]] का उपयोग करता है) जैसी पूर्ण विकसित भाषाओं का उपयोग करते हैं। | ||
== स्क्रिप्टिंग भाषाओं के मध्य अंतर स्थायित्व == | == स्क्रिप्टिंग भाषाओं के मध्य अंतर स्थायित्व == | ||
विभिन्न स्क्रिप्टिंग भाषाएं कई सामान्य तत्वों को विचार कर सकती हैं, मुख्य रूप से पॉज़िक्स आधारित होने के कारण, और कुछ शैल विभिन्न शैलों का अनुकरण करने के लिए मोड प्रदान करते हैं। यह स्क्रिप्टिंग भाषा में लिखी गई | विभिन्न स्क्रिप्टिंग भाषाएं कई सामान्य तत्वों को विचार कर सकती हैं, मुख्य रूप से पॉज़िक्स आधारित होने के कारण, और कुछ शैल विभिन्न शैलों का अनुकरण करने के लिए मोड प्रदान करते हैं। यह स्क्रिप्टिंग भाषा में लिखी गई शैल स्क्रिप्ट को दूसरे में अनुकूलित करने की अनुमति देता है। | ||
इसका उदाहरण बैश है, जो बॉर्न | इसका उदाहरण बैश है, जो बॉर्न शैल के समान व्याकरण और सिंटैक्स प्रदान करता है, और जो पॉज़िक्स-अनुपालन मोड भी प्रदान करता है।<ref>{{Cite web|url=https://www.gnu.org/software/bash/manual/html_node/Major-Differences-From-The-Bourne-Shell.html|title=Major Differences From The Bourne Shell}}</ref> जैसे, बॉर्न शैल के लिए लिखी गई अधिकांश शैल स्क्रिप्ट्स को बैश में चलाया जा सकता है, किन्तु हो सकता है कि इसका उल्टा सही न हो क्योंकि बैश के एक्सटेंशन हैं जो बॉर्न शैल में उपस्थित नहीं हैं। जैसे, इन विशेषताओं को विक्ट बैशिज्म के रूप में जाना जाता है।<ref>{{Cite web|url=https://betterprogramming.pub/24-bashism-to-avoid-for-posix-compliant-shell-scripts-8e7c09e0f49a|title=24 Bashism To Avoid for POSIX-Compliant Shell Scripts|date=18 May 2022 }}</ref> | ||
== अन्य ऑपरेटिंग प्रणाली पर शैल स्क्रिप्टिंग == | |||
सिग्विन, [[एमकेएस टूलकिट|एमकेएस उपकरण]], [[इंटरिक्स]] (जो कि यूनिक्स के लिए माइक्रोसॉफ्ट विंडोज सेवाओं में उपलब्ध है), [[ हैमिल्टन सी खोल | हैमिल्टन सी]] शैल , यूडब्ल्यूआईएन (विंडोज़ के लिए एटी एंड टी यूनिक्स) और अन्य जैसे इंटरऑपरेबिलिटी सॉफ़्टवेयर विंडोज़ एनटी चलाने वाली मशीनों पर यूनिक्स शैल प्रोग्राम चलाने की अनुमति देते हैं। इसके उत्तराधिकारी, [[MS-DOS|एमएस-डॉस-विंडोज]] [[Windows 95|95]] शाखा पर कार्यक्षमता की कुछ हानि के साथ-साथ OS/2 के लिए पूर्व के एम केएस उपकरण संस्करण, विंडोज प्रकार के ऑपरेटिंग प्रणाली के लिए कम से कम तीन डीसीएल कार्यान्वयन [[एक्सएलएनटी]] के अतिरिक्त, बहु-उपयोग वाली स्क्रिप्टिंग भाषा पैकेज जो कमांड शेल, [[विंडोज स्क्रिप्ट होस्ट]] और [[ कॉमन गेटवे इंटरफ़ेस ]] प्रोग्रामिंग के साथ प्रयोग किया जाता है, इन प्रणालीों के लिए भी उपलब्ध हैं। मैक ओएस एक्स और उसके पश्चात के संस्करण भी यूनिक्स जैसे हैं।<ref>MSDN{{nonspecific|date=May 2017}}</ref> पूर्वोक्त उपकरणों के अतिरिक्त, कुछ पॉज़िक्स और OS/2 कार्यक्षमता का उपयोग विंडोज एनटी ऑपरेटिंग प्रणाली श्रृंखला के संबंधित पर्यावरणीय उप-प्रणालियों के साथ-साथ विंडोज 2000 तक भी किया जा सकता है। तीसरा, [[16-बिट कंप्यूटिंग]] जिसे प्रायः एमएस-डॉस सबप्रणाली कहा जाता है, उपरोक्त एमएस-डॉस बैच फ़ाइलों को चलाने के लिए इन ऑपरेटिंग प्रणालीों के साथ प्रदान किए गए कमांड डॉट कॉम का उपयोग करता है।<ref>Windows NT 4 Workstation Resource Kit</ref> कंसोल विकल्प [[4DOS]], [[4OS2]], [[FreeDOS]], [[पीटर नॉर्टन]] का [[NDOS]] और टेक कमांड कंसोल) 4NT / टेक कमांड जो विंडोज एनटी-शैली cmd.exe, एमएस-डॉस/विंडोज़ 95 बैच फ़ाइलों (कमांड डॉट कॉम द्वारा संचालित) में कार्यक्षमता जोड़ता है। OS/2 के cmd.exe, और 4NT क्रमशः उन शैल के समान हैं जो वे बढ़ाते हैं और विंडोज़ स्क्रिप्ट होस्ट के साथ अधिक एकीकृत होते हैं, जो तीन पूर्व-स्थापित इंजनों, [[VBScript|वीबीस्क्रिप्ट, जेस्क्रिप्ट]] और अनुप्रयोगों के लिए मूल दृश्य के साथ आता है और जिसके लिए रेक्स, पर्ल, पायथन, रूबी, और टीसीएल के साथ कई तृतीय-पक्ष इंजन जोड़े जा सकते हैं, जिनके 4NT और संबंधित कार्यक्रमों में पूर्व-निर्धारित कार्य हैं। [[PC DOS]] अत्यधिक सीमा तक MS-DOS के समान है, जबकि [[DR DOS]] अधिक भिन्न है। विंडोज एनटी के पूर्व संस्करण OS/2 सबप्रणाली द्वारा 4OS2 के समकालीन संस्करणों को चलाने में सक्षम हैं। | |||
परिभाषा के अनुसार, स्क्रिप्टिंग भाषाएँ विस्तारित की जा सकती हैं; उदाहरण के लिए, एमएस-डॉस/विंडोज़ 95/98 और विंडोज एनटी प्रकार के प्रणाली शेल/बैच प्रोग्राम को [[KiXtart|किएक्सटार्ट, क्यूबेसिक]], विभिन्न बेसिक, रेक्स, पर्ल, और पायथन (प्रोग्रामिंग भाषा) कार्यान्वयन, विंडोज़ स्क्रिप्ट होस्ट जैसे उपकरण आह्वान करने की अनुमति देते हैं। और इसके स्थापित इंजन यूनिक्स और अन्य पॉज़िक्स-संगत प्रणाली पर, शैल स्क्रिप्ट की स्ट्रिंग और न्यूमेरिक प्रोसेसिंग क्षमता को बढ़ाने के लिए awk और sed का उपयोग किया जाता है। टीसीएल, पर्ल, रेक्स और पायथन में ग्राफिक्स उपकरण हैं और शैल स्क्रिप्ट के लिए फ़ंक्शन और प्रक्रियाओं को कोड करने के लिए उपयोग किया जा सकता है जो गति बाधा उत्पन्न करता है (C, फोरट्रान, असेंबली भाषा और c अभी भी अत्यधिक तीव्र हैं) और कार्यक्षमता जोड़ने के लिए जो शैल में उपलब्ध नहीं है भाषा जैसे सॉकेट और अन्य कनेक्टिविटी फ़ंक्शंस, हेवी-ड्यूटी टेक्स्ट प्रोसेसिंग, यदि कॉलिंग स्क्रिप्ट में वे क्षमताएं नहीं हैं, तो नंबरों के साथ कार्य करना, स्व-लेखन और स्व-संशोधित कोड, [[ प्रत्यावर्तन ]] जैसी प्रविधि, डायरेक्ट मेमोरी एक्सेस, विभिन्न प्रकार की [[छँटाई]] और अधिक, जो मुख्य लिपि में कठिन या असंभव हैं, इत्यादि। एप्लिकेशन और वीबीस्क्रिप्ट के लिए विजुअल बेसिक का उपयोग स्प्रेडशीट, डेटाबेस, सभी प्रकार के स्क्रिप्ट योग्य प्रोग्राम, दूरसंचार सॉफ़्टवेयर, विकास उपकरण, ग्राफ़िक्स उपकरण और अन्य सॉफ़्टवेयर जैसी वस्तुओं को नियंत्रित करने और संचार करने के लिए किया जा सकता है, जिन्हें [[ घटक वस्तु मॉडल ]] के माध्यम से एक्सेस किया जा सकता है। | |||
परिभाषा के अनुसार, स्क्रिप्टिंग भाषाएँ विस्तारित की जा सकती हैं; उदाहरण के लिए, एमएस-डॉस/विंडोज़ 95/98 और विंडोज एनटी प्रकार के प्रणाली शेल/बैच प्रोग्राम को [[KiXtart|किएक्सटार्ट, क्यूबेसिक]], विभिन्न बेसिक, रेक्स, पर्ल, और पायथन (प्रोग्रामिंग भाषा) कार्यान्वयन, विंडोज़ स्क्रिप्ट होस्ट जैसे उपकरण आह्वान करने की अनुमति देते हैं। और इसके स्थापित इंजन यूनिक्स और अन्य पॉज़िक्स-संगत प्रणाली पर, | |||
== यह भी देखें == | == यह भी देखें == | ||
Line 194: | Line 180: | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
* [http://www.faqs.org/docs/air/tsshell.html ''An Introduction To Shell Programming'' by Greg Goebel] | * [http://www.faqs.org/docs/air/tsshell.html ''An Introduction To Shell Programming'' by Greg Goebel] | ||
* [https://www.shellscript.sh ''UNIX / Linux shell scripting tutorial'' by Steve Parker] | * [https://www.shellscript.sh ''UNIX / Linux shell scripting tutorial'' by Steve Parker] | ||
Line 202: | Line 187: | ||
* [https://help.ubuntu.com/community/Beginners/BashScripting Beginners/BashScripting], Ubuntu Linux | * [https://help.ubuntu.com/community/Beginners/BashScripting Beginners/BashScripting], Ubuntu Linux | ||
[[Category:Articles with hatnote templates targeting a nonexistent page]] | |||
[[Category: | [[Category:Articles with invalid date parameter in template]] | ||
[[Category:Collapse templates]] | |||
[[Category: | |||
[[Category:Created On 31/05/2023]] | [[Category:Created On 31/05/2023]] | ||
[[Category:Lua-based templates]] | |||
[[Category:Machine Translated Page]] | |||
[[Category:Navigational boxes| ]] | |||
[[Category:Navigational boxes without horizontal lists]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Sidebars with styles needing conversion]] | |||
[[Category:Template documentation pages|Documentation/doc]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:Templates generating microformats]] | |||
[[Category:Templates that add a tracking category]] | |||
[[Category:Templates that are not mobile friendly]] | |||
[[Category:Templates that generate short descriptions]] | |||
[[Category:Templates using TemplateData]] | |||
[[Category:Wikipedia articles needing factual verification from May 2017]] | |||
[[Category:Wikipedia metatemplates]] | |||
[[Category:पटकथा भाषाएँ]] |
Latest revision as of 14:42, 31 October 2023
शैल स्क्रिप्ट ऐसा कंप्यूटर प्रोग्राम है जिसे यूनिक्स शैल, कमांड-लाइन दुभाषिया द्वारा चलाने के लिए डिज़ाइन किया गया है।[1] शैल स्क्रिप्ट की विभिन्न भाषाओँ को स्क्रिप्टिंग भाषा माना जाता है। शैल स्क्रिप्ट द्वारा किए गए विशिष्ट संचालन में फ़ाइल आदान-प्रदान, प्रोग्राम निष्पादन और प्रिंटिंग टेक्स्ट सम्मिलित हैं। स्क्रिप्ट जो पर्यावरण को संग्रह करती है, प्रोग्राम चलाती है, और आवश्यक सफाई या लॉगिंग करती है, वह रैपर कहलाती है।
ऑपरेटिंग प्रणाली शैल चलाने के स्वचालित मोड का अर्थ करने के लिए शब्द का प्रयोग सामान्यतः भी किया जाता है; प्रत्येक ऑपरेटिंग प्रणाली इन कार्यों के लिए विशेष नाम का उपयोग करता है जिसमें बैच फ़ाइलें (एमएसडॉस-विन95 भाप, ओएस/2), कमांड प्रक्रियाएँ (वीएमएस), और शैल स्क्रिप्ट्स (विंडोज एनटी भाप और तृतीय-पक्ष डेरिवेटिव जैसे 4एनटी—लेख cmd.exe), और मेनफ्रेम ऑपरेटिंग प्रणाली कई नियमो से जुड़े हैं।
सामान्यतः यूनिक्स और यूनिक्स जैसी प्रणालियों में उपस्थित शैल में कॉर्न शेल, बॉर्न शैल और जीएनयू बैश सम्मिलित हैं। जबकि यूनिक्स ऑपरेटिंग प्रणाली में भिन्न त्रुटिपूर्ण शैल हो सकता है, जैसे कि मैक ओएस पर Zsh, ये शैल सामान्यतः पश्चगामी संगतता के लिए उपस्थित होते हैं।
क्षमताएं
टिप्पणियाँ
टिप्पणी (कंप्यूटर प्रोग्रामिंग) को शैल द्वारा अप्रत्यक्ष किया जाता है। वे सामान्यतः हैश (#
) प्रतीक से प्रारम्भ होते हैं, और पंक्ति के अंत तक निरंतर रहते हैं।[2]
स्क्रिप्टिंग भाषा का विन्यास योग्य विकल्प
शेबैंग (यूनिक्स), या हैश-बैंग, विशेष प्रकार की टिप्पणी है जिसका उपयोग प्रणाली यह निर्धारित करने के लिए करता है कि फ़ाइल को निष्पादित करने के लिए किस दुभाषिया का उपयोग किया जाए। शेबैंग फ़ाइल की प्रथम पंक्ति होनी चाहिए और #!
प्रारम्भ होनी चाहिए।[2]यूनिक्स-जैसे ऑपरेटिंग प्रणाली में, निम्नलिखित वर्ण#!
उपसर्ग की व्याख्या निष्पादन योग्य प्रोग्राम के पथ के रूप में की जाती है जो स्क्रिप्ट की व्याख्या करेगा।[3]
शॉर्टकट
शैल स्क्रिप्ट प्रणाली कमांड का सुविधाजनक परिवर्तन प्रदान कर सकती है जहां विशेष पर्यावरण समायोजन, कमांड विकल्प, या पोस्ट-प्रोसेसिंग स्वचालित रूप से प्रारम्भ होती है, किन्तु इस प्रकार से जो नई स्क्रिप्ट को पूर्ण रूप से सामान्य यूनिक्स कमांड के रूप में कार्य करने की अनुमति देती है।
उदाहरण एलएस का संस्करण बनाना होगा, फाइलों को सूचीबद्ध करने का आदेश, इसे l
का अल्प कमांड नाम देना होगा , जो सामान्यतः रूप से उपयोगकर्ता की bin
निर्देशिका में /home/username/bin/l
निर्देशिका के रूप में, त्रुटिपूर्ण सेट के रूप में सहेजा जाएगा और कमांड विकल्पों की पूर्व-आपूर्ति है।
#!/bin/sh
LC_COLLATE=C ls -FCas "$@"
यहां, प्रथम पंक्ति स्क्रिप्टिंग भाषा के विन्यास विकल्प का उपयोग करती है, यह संकेत देने के लिए कि किस दुभाषिया को शेष स्क्रिप्ट को निष्पादित करना चाहिए, और दूसरी पंक्ति फ़ाइल प्रारूप संकेतकों, कॉलम, सभी फाइलों (कोई भी त्यागा नहीं) के विकल्पों के साथ सूची बनाती है, LC_COLLATE=C
ऊपरी और निचले विषय को साथ फोल्ड नहीं करने के लिए त्रुटिपूर्ण संयोजन आदेश सेट करता है, नामों में विराम चिह्नों को अनदेखा करने के पार्श्व प्रभाव के रूप में सामान्य फ़ाइल नामों के साथ मिश्रित डॉटफ़ाइल नहीं करता है (डॉटफाइल सामान्यतः केवल तभी दिखाए जाते हैं जब -a
जैसे विकल्प का उपयोग किया जाता है), और "$@"
दिए गए किसी भी पैरामीटर को l
ls के पैरामीटर के रूप में पारित करने कारण बनता है, जिससे सभी सामान्य विकल्प और ls को ज्ञात अन्य प्रोग्रामिंग भाषा सिंटैक्स अभी भी उपयोग किए जा सकें।
उपयोगकर्ता तब सबसे अधिक उपयोग की जाने वाली शॉर्ट लिस्टिंग के लिए l
का उपयोग कर सकता था।
शैल स्क्रिप्ट का उदाहरण जिसे शॉर्टकट के रूप में उपयोग किया जा सकता है, किसी दिए गए निर्देशिका के अंदर सभी फाइलों और निर्देशिकाओं की सूची को प्रिंट करना होगा।
#!/bin/sh
clear
ls -al
इस विषय में, शैल स्क्रिप्ट #!/bin/sh की अपनी सामान्य प्रारंभिक लाइन से प्रारम्भ होगी। इसके पश्चात, स्क्रिप्ट clear कमांड निष्पादित करती है जो आगामी लाइन पर जाने से पूर्व सभी टेक्स्ट के टर्मिनल को क्लियर करती है। निम्न पंक्ति स्क्रिप्ट का मुख्य कार्य प्रदान करती है। ls -al कमांड उन फाइलों और डाइरेक्टरी को सूचीबद्ध करता है जो उस डायरेक्टरी में हैं जहां से स्क्रिप्ट चलाई जा रही है। उपयोगकर्ता की जरूरतों को दर्शाने के लिए ls कमांड विशेषताओं को परिवर्तित किया जा सकता है।
ध्यान दें: यदि कार्यान्वयन में clear कमांड नहीं है, तो इसके अतिरिक्त clr कमांड का उपयोग करने का प्रयत्न करें।
बैच जॉब्स
शैल स्क्रिप्ट कई कमांड की अनुमति देती है जो मैन्युअल रूप से कमांड-लाइन इंटरफ़ेस पर स्वचालित रूप से निष्पादित होने के लिए अंकित की जाएगी, और उपयोगकर्ता द्वारा अनुक्रम के प्रत्येक चरण को ट्रिगर करने के लिए प्रतीक्षा किए बिना उदाहरण के लिए, तीन सी स्रोत कोड फ़ाइलों वाली निर्देशिका में, उनमें से अंतिम प्रोग्राम बनाने के लिए आवश्यक चार आदेशों को मैन्युअल रूप से चलाने के अतिरिक्त, कोई इसके अतिरिक्त पॉज़िक्स- संगत शैल के लिए स्क्रिप्ट बना सकता है, जिसका नाम यहां दिया गया है build
और उनके साथ निर्देशिका में रखा गया, जो उन्हें स्वचालित रूप से संकलित करेगा।
#!/bin/sh
printf 'compiling...\n'
cc -c foo.c
cc -c bar.c
cc -c qux.c
cc -o myprog foo.o bar.o qux.o
printf 'done.\n'
स्क्रिप्ट उपयोगकर्ता को संपादित की जा रही फ़ाइल को सहेजने, संपादक को रोकने और अपडेट किए गए प्रोग्राम को बनाने के लिए ./build
चलाने उसका परीक्षण करने और संपादक पर लौटने की अनुमति देगी। 1980 के दशक या उसके पश्चात से, चूंकि, इस प्रकार की लिपियों को मेक जैसी उपयोगिताओं से परिवर्तित कर दिया गया है जो कि प्रोग्राम बनाने के लिए विशेषीकृत हैं।
सामान्यीकरण
भिन्न-भिन्न कार्यों के लिए सरल बैच कार्य असामान्य नहीं हैं, किन्तु शैल लूप, परीक्षण और चर का उपयोग करने से उपयोगकर्ताओं को अधिक लचीलापन मिलता है। जेपीईजी छवियों को पीएनजी छवियों में कनवर्ट करने के लिए पॉज़िक्स एसएच स्क्रिप्ट, जहां छवि नाम कमांड लाइन पर प्रदान किए जाते हैं-संभवतः वाइल्डकार्ड के माध्यम से- स्क्रिप्ट के अंदर सूचीबद्ध होने के अतिरिक्त, इस फ़ाइल के साथ बनाया जा सकता है, सामान्यतः फ़ाइल में सहेजा जाता है।
/home/username/bin/jpg2png
#!/bin/sh
for jpg; do # use $jpg in place of each filename given, in turn
png=${jpg%.jpg}.png # construct the PNG version of the filename by replacing .jpg with .png
printf 'converting "%s" ...\n' "$jpg" # output status info to the user running the script
if convert "$jpg" jpg.to.png; then # use convert (provided by ImageMagick) to create the PNG in a temp file
mv jpg.to.png "$png" # if it worked, rename the temporary PNG image to the correct name
else # ...otherwise complain and exit from the script
printf >&2 'jpg2png: error: failed output saved in "jpg.to.png".\n'
exit 1
fi # the end of the "if" test construct
done # the end of the "for" loop
printf 'all conversions successful\n' # tell the user the good news
jpg2png
e> कमांड को केवल/home/username/bin/jpg2png *.jpg के साथ JPEG
छवियों से भरी संपूर्ण निर्देशिका पर चलाया जा सकता है।
प्रोग्रामिंग
कई आधुनिक शैल भी विभिन्न विशेषताओं की आपूर्ति करते हैं जो सामान्यतः केवल अधिक परिष्कृत सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषाओं में पाई जाती हैं, जैसे नियंत्रण-प्रवाह निर्माण, चर, टिप्पणी (कंप्यूटर प्रोग्रामिंग), सरणियाँ, सबरूटीन और इसी प्रकार उपलब्ध सुविधाओं के इस प्रकार के साथ, शैल स्क्रिप्ट के रूप में यथोचित परिष्कृत अनुप्रयोगों को लिखना संभव है। चूंकि, वे अभी भी इस तथ्य से सीमित हैं कि अधिकांश शैल भाषाओं में डेटा टाइपिंग प्रणाली, क्लासेस, थ्रेडिंग, जटिल गणित और अन्य सामान्य पूर्ण भाषा सुविधाओं के लिए अधिक अर्घ्य या कोई समर्थन नहीं है, और सामान्यतः संकलित कोड या व्याख्या की गई भाषाओं की तुलना में प्रदर्शन लक्ष्य के रूप में गति के साथ अधिक मंद होती हैं।
मानक यूनिक्स उपकरण sed और awk शैल प्रोग्रामिंग के लिए अतिरिक्त क्षमताएं प्रदान करते हैं; पर्ल को शैल स्क्रिप्ट में भी एम्बेड किया जा सकता है जैसे कि अन्य स्क्रिप्टिंग भाषाओं जैसे टीसीएल पर्ल और टीसीएल ग्राफिक्स उपकरण के साथ भी आते हैं।
विशिष्ट पॉज़िक्स स्क्रिप्टिंग भाषाएँ
सामान्यतः यूनिक्स, लिनक्स, और पॉज़िक्स- संगत ऑपरेटिंग प्रणाली इंस्टॉलेशन पर पाई जाने वाली स्क्रिप्टिंग भाषाओं में सम्मिलित हैं।
- के शैल (
ksh
) कई संभावित संस्करणों जैसे ksh88, Korn Shell '93 और अन्य में। - बॉर्न शैल (
sh
), उपयोग में आने वाले सबसे पूर्व वृत्त में से हैं। - सी शैल (
csh
) - बैश (यूनिक्स शेल) (
bash
) tclsh
, शैल जो Tcl/Tk प्रोग्रामिंग भाषा का मुख्य घटक है।- इच्छा (शेल) जीयूआई-आधारित टीसीएल/टीसी शैल है।
C और Tcl शेल्स का सिंटैक्स उक्त प्रोग्रामिंग भाषाओं के समान है, और कॉर्न शेल्स और बैश बॉर्न शैल के विकास हैं, जो ऐल्गॉल भाषा पर आधारित है, जिसमें कई अन्य तत्वों को भी जोड़ा गया है।[4] दूसरी ओर, विभिन्न शैल प्लस उपकरण जैसे awk, sed, grep, और बेसिक, लिस्प (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा) और आगे पर्ल प्रोग्रामिंग भाषा में योगदान दिया।[5] अन्य वृत्त जो मशीन पर या डाउनलोड के लिए उपलब्ध हो सकते हैं उनमें सम्मिलित हैं।
- अल्मक्विस्ट शैल (
ash
) - पावरशैल (
msh
) - जेड शैल (
zsh
, विशेष रूप से सामान्य उन्नत कोर्नशेल) - टेनेक्स सी शैल (
tcsh
)
पायथन (प्रोग्रामिंग भाषा), रूबी (प्रोग्रामिंग भाषा) , सी (प्रोग्रामिंग भाषा), जावा (प्रोग्रामिंग भाषा), पर्ल, पास्कल (प्रोग्रामिंग भाषा), रेक्स आदि पर आधारित संबंधित प्रोग्राम भी विभिन्न रूपों में व्यापक रूप से उपलब्ध हैं। अन्य सामान्य शैल है पूर्व शैल (osh
), जिसका मैनुअल पेज बताता है कि यह छठे संस्करण यूनिक्स से मानक कमांड दुभाषिया का उन्नत, पिछड़ा-संगत पोर्ट है।[6] तथाकथित दूरस्थ वृत्त जैसे
रिमोट प्रणाली पर अधिक जटिल शैल चलाने के लिए वास्तव में केवल उपकरण हैं और विशेषताओं की प्रकार कोई 'शेल' नहीं है।
अन्य स्क्रिप्टिंग भाषाएं
कई शक्तिशाली स्क्रिप्टिंग भाषाओं को उन कार्यों के लिए प्रस्तुत किया गया है जो अधिक बड़े या जटिल हैं जिन्हें साधारण शैल स्क्रिप्ट के साथ आराम से संरक्षित किया जा सकता है, किन्तु जिसके लिए स्क्रिप्ट के लाभ वांछनीय हैं और पूर्ण विकसित, संकलित प्रोग्रामिंग भाषा का विकास हानिकारक होगा। स्क्रिप्टिंग भाषाओं को उच्च-स्तरीय प्रोग्रामिंग भाषाओं से भिन्न करने वाले सूक्ष्म पर वादविवाद का निरंतर स्रोत है, किन्तु, सामान्यतः बोलना, स्क्रिप्टिंग भाषा वह है जिसके लिए दुभाषिया की आवश्यकता होती है।
जीवन चक्र
शैल स्क्रिप्ट प्रायः सॉफ्टवेयर विकास में प्रारंभिक चरण के रूप में कार्य करते हैं, और पश्चात में भिन्न अंतर्निहित कार्यान्वयन के लिए रूपांतरण के अधीन होते हैं, सामान्यतः पर्ल, पायथन (प्रोग्रामिंग भाषा), या सी (प्रोग्रामिंग भाषा) में परिवर्तित हो जाते हैं। दुभाषिया निर्देश फ़ाइल नाम व्याप्ति के रूप में उजागर होने के अतिरिक्त कार्यान्वयन विवरण को स्क्रिप्ट के अंदर पूर्ण रूप से लुप्त करने की अनुमति देता है, और अंतिम उपयोगकर्ताओं पर कोई प्रभाव डाले बिना विभिन्न भाषाओं में निर्बाध पुनर्कार्यान्वयन प्रदान करता है।
जबकि, sh फाइल एक्सटेंशन वाली फ़ाइलें सामान्यतः किसी प्रकार की शैल स्क्रिप्ट होती हैं, अधिकांश शैल स्क्रिप्ट में कोई फ़ाइल नाम एक्सटेंशन नहीं होता है।[7][8][9][10]
लाभ और हानि
शैल स्क्रिप्ट लिखने का संभवता सबसे बड़ा लाभ यह है कि कमांड और सिंटैक्स वही होते हैं जो सीधे कमांड-लाइन पर अंकित किए जाते हैं। प्रोग्रामर को पूर्ण रूप से भिन्न सिंटैक्स पर स्विच करने की ज़रूरत नहीं है, क्योंकि यदि स्क्रिप्ट किसी दूसरी भाषा में लिखी गई थी, या यदि संकलित भाषा का उपयोग किया गया था।
प्रायः अन्य प्रोग्रामिंग भाषाओं में समतुल्य कोड लिखने की तुलना में शैल स्क्रिप्ट लिखना अत्यधिक तीव्र होता है। कई लाभों में सरल प्रोग्राम या फ़ाइल चयन, त्वरित प्रारंभ और इंटरैक्टिव डिबगिंग सम्मिलित हैं। शैल स्क्रिप्ट का उपयोग उपस्थिता कार्यक्रमों के निकटतम अनुक्रमण और निर्णय लेने की कड़ी प्रदान करने के लिए किया जा सकता है, और मध्यम आकार की स्क्रिप्ट के लिए संकलन कदम की अनुपस्थिति लाभ है। इंटरप्रिटेटिव रनिंग डिबगिंग कोड को स्क्रिप्ट में लिखना सरल बनाता है और बग्स की जानकारी प्राप्त करने और उन्हें ठीक करने के लिए इसे तत्पश्चात से चलाता है। गैर-विशेषज्ञ उपयोगकर्ता प्रोग्राम के व्यवहार को अनुकूलित करने के लिए स्क्रिप्टिंग का उपयोग कर सकते हैं, और शैल स्क्रिप्टिंग बहु प्रसंस्करण के लिए कुछ सीमित स्थान प्रदान करती है।
दूसरी ओर, शैल स्क्रिप्टिंग महंगी त्रुटियों से ग्रस्त है। असावधानीवश टंकण त्रुटियाँ जैसे rm -rf * /
इच्छित rm -rf */
के अतिरिक्त) यूनिक्स समुदाय में लोककथाएँ हैं, अतिरिक्त स्थान कमांड को परिवर्तित करता है जो वर्तमान निर्देशिका में निहित सभी उपनिर्देशिकाओं को विस्थापित कर देता है, जो फ़ाइल प्रणाली की रूट निर्देशिका से सब कुछ विस्थापित कर देता है। इसी प्रकार की समस्याएं cp
और mv
को खतरनाक हथियारों में रूपांतरित कर सकती हैं, और >
रीडायरेक्ट का दुरुपयोग फ़ाइल की सामग्री को विस्थापित कर सकता है। यह इस तथ्य से और अधिक समस्याग्रस्त हो जाता है कि कई यूनिक्स आदेश केवल अक्षर से नाम में भिन्न होते हैं: cp
, cd
, dd
, df
, आदि।
महत्वपूर्ण हानि मंद गति से निष्पादन की गति और निष्पादित लगभग प्रत्येक शैल कमांड के लिए नई प्रक्रिया प्रारम्भ करने की आवश्यकता है। जब पाइपलाइन (कंप्यूटिंग) स्थापित करके स्क्रिप्ट का कार्य पूर्ण किया जा सकता है जिसमें कुशल फ़िल्टर (सॉफ़्टवेयर) कमांड अधिकांश कार्य करते हैं, तो मंदी कम हो जाती है, किन्तु जटिल स्क्रिप्ट सामान्यतः पारंपरिक संकलित प्रोग्राम की तुलना में मंद परिमाण के कई आदेश होते हैं। जो समान कार्य करता है।
विभिन्न प्लेटफॉर्मों के मध्य अनुकूलता संबंधी समस्याएं भी हैं। पर्ल के निर्माता लैरी वॉल ने प्रसिद्ध रूप से लिखा है कि शैल स्क्रिप्ट की तुलना में शैल को पोर्ट करना सरल है।[11] इसी प्रकार, अधिक जटिल स्क्रिप्ट स्वयं शैल स्क्रिप्टिंग भाषा की सीमाओं में चल सकती हैं; सीमाएँ गुणवत्ता कोड लिखना कठिन बनाती हैं, और मूल शैल भाषा के साथ समस्याओं को सुधारने के लिए विभिन्न शेल्स द्वारा एक्सटेंशन समस्या को क्षति बना सकते हैं।[12] कुछ स्क्रिप्ट भाषाओं का उपयोग करने के कई हानि प्रोग्रामिंग भाषा सिंटैक्स या कार्यान्वयन के अंदर डिज़ाइन की खामियों के कारण होते हैं, और आवश्यक नहीं कि पाठ-आधारित कमांड-लाइन के उपयोग से लगाए गए हों, ऐसे कई वृत्त हैं जो अन्य शैल प्रोग्रामिंग भाषाओं का उपयोग करते हैं या यहाँ तक कि Scsh (जो योजना (प्रोग्रामिंग भाषा) का उपयोग करता है) जैसी पूर्ण विकसित भाषाओं का उपयोग करते हैं।
स्क्रिप्टिंग भाषाओं के मध्य अंतर स्थायित्व
विभिन्न स्क्रिप्टिंग भाषाएं कई सामान्य तत्वों को विचार कर सकती हैं, मुख्य रूप से पॉज़िक्स आधारित होने के कारण, और कुछ शैल विभिन्न शैलों का अनुकरण करने के लिए मोड प्रदान करते हैं। यह स्क्रिप्टिंग भाषा में लिखी गई शैल स्क्रिप्ट को दूसरे में अनुकूलित करने की अनुमति देता है।
इसका उदाहरण बैश है, जो बॉर्न शैल के समान व्याकरण और सिंटैक्स प्रदान करता है, और जो पॉज़िक्स-अनुपालन मोड भी प्रदान करता है।[13] जैसे, बॉर्न शैल के लिए लिखी गई अधिकांश शैल स्क्रिप्ट्स को बैश में चलाया जा सकता है, किन्तु हो सकता है कि इसका उल्टा सही न हो क्योंकि बैश के एक्सटेंशन हैं जो बॉर्न शैल में उपस्थित नहीं हैं। जैसे, इन विशेषताओं को विक्ट बैशिज्म के रूप में जाना जाता है।[14]
अन्य ऑपरेटिंग प्रणाली पर शैल स्क्रिप्टिंग
सिग्विन, एमकेएस उपकरण, इंटरिक्स (जो कि यूनिक्स के लिए माइक्रोसॉफ्ट विंडोज सेवाओं में उपलब्ध है), हैमिल्टन सी शैल , यूडब्ल्यूआईएन (विंडोज़ के लिए एटी एंड टी यूनिक्स) और अन्य जैसे इंटरऑपरेबिलिटी सॉफ़्टवेयर विंडोज़ एनटी चलाने वाली मशीनों पर यूनिक्स शैल प्रोग्राम चलाने की अनुमति देते हैं। इसके उत्तराधिकारी, एमएस-डॉस-विंडोज 95 शाखा पर कार्यक्षमता की कुछ हानि के साथ-साथ OS/2 के लिए पूर्व के एम केएस उपकरण संस्करण, विंडोज प्रकार के ऑपरेटिंग प्रणाली के लिए कम से कम तीन डीसीएल कार्यान्वयन एक्सएलएनटी के अतिरिक्त, बहु-उपयोग वाली स्क्रिप्टिंग भाषा पैकेज जो कमांड शेल, विंडोज स्क्रिप्ट होस्ट और कॉमन गेटवे इंटरफ़ेस प्रोग्रामिंग के साथ प्रयोग किया जाता है, इन प्रणालीों के लिए भी उपलब्ध हैं। मैक ओएस एक्स और उसके पश्चात के संस्करण भी यूनिक्स जैसे हैं।[15] पूर्वोक्त उपकरणों के अतिरिक्त, कुछ पॉज़िक्स और OS/2 कार्यक्षमता का उपयोग विंडोज एनटी ऑपरेटिंग प्रणाली श्रृंखला के संबंधित पर्यावरणीय उप-प्रणालियों के साथ-साथ विंडोज 2000 तक भी किया जा सकता है। तीसरा, 16-बिट कंप्यूटिंग जिसे प्रायः एमएस-डॉस सबप्रणाली कहा जाता है, उपरोक्त एमएस-डॉस बैच फ़ाइलों को चलाने के लिए इन ऑपरेटिंग प्रणालीों के साथ प्रदान किए गए कमांड डॉट कॉम का उपयोग करता है।[16] कंसोल विकल्प 4DOS, 4OS2, FreeDOS, पीटर नॉर्टन का NDOS और टेक कमांड कंसोल) 4NT / टेक कमांड जो विंडोज एनटी-शैली cmd.exe, एमएस-डॉस/विंडोज़ 95 बैच फ़ाइलों (कमांड डॉट कॉम द्वारा संचालित) में कार्यक्षमता जोड़ता है। OS/2 के cmd.exe, और 4NT क्रमशः उन शैल के समान हैं जो वे बढ़ाते हैं और विंडोज़ स्क्रिप्ट होस्ट के साथ अधिक एकीकृत होते हैं, जो तीन पूर्व-स्थापित इंजनों, वीबीस्क्रिप्ट, जेस्क्रिप्ट और अनुप्रयोगों के लिए मूल दृश्य के साथ आता है और जिसके लिए रेक्स, पर्ल, पायथन, रूबी, और टीसीएल के साथ कई तृतीय-पक्ष इंजन जोड़े जा सकते हैं, जिनके 4NT और संबंधित कार्यक्रमों में पूर्व-निर्धारित कार्य हैं। PC DOS अत्यधिक सीमा तक MS-DOS के समान है, जबकि DR DOS अधिक भिन्न है। विंडोज एनटी के पूर्व संस्करण OS/2 सबप्रणाली द्वारा 4OS2 के समकालीन संस्करणों को चलाने में सक्षम हैं।
परिभाषा के अनुसार, स्क्रिप्टिंग भाषाएँ विस्तारित की जा सकती हैं; उदाहरण के लिए, एमएस-डॉस/विंडोज़ 95/98 और विंडोज एनटी प्रकार के प्रणाली शेल/बैच प्रोग्राम को किएक्सटार्ट, क्यूबेसिक, विभिन्न बेसिक, रेक्स, पर्ल, और पायथन (प्रोग्रामिंग भाषा) कार्यान्वयन, विंडोज़ स्क्रिप्ट होस्ट जैसे उपकरण आह्वान करने की अनुमति देते हैं। और इसके स्थापित इंजन यूनिक्स और अन्य पॉज़िक्स-संगत प्रणाली पर, शैल स्क्रिप्ट की स्ट्रिंग और न्यूमेरिक प्रोसेसिंग क्षमता को बढ़ाने के लिए awk और sed का उपयोग किया जाता है। टीसीएल, पर्ल, रेक्स और पायथन में ग्राफिक्स उपकरण हैं और शैल स्क्रिप्ट के लिए फ़ंक्शन और प्रक्रियाओं को कोड करने के लिए उपयोग किया जा सकता है जो गति बाधा उत्पन्न करता है (C, फोरट्रान, असेंबली भाषा और c अभी भी अत्यधिक तीव्र हैं) और कार्यक्षमता जोड़ने के लिए जो शैल में उपलब्ध नहीं है भाषा जैसे सॉकेट और अन्य कनेक्टिविटी फ़ंक्शंस, हेवी-ड्यूटी टेक्स्ट प्रोसेसिंग, यदि कॉलिंग स्क्रिप्ट में वे क्षमताएं नहीं हैं, तो नंबरों के साथ कार्य करना, स्व-लेखन और स्व-संशोधित कोड, प्रत्यावर्तन जैसी प्रविधि, डायरेक्ट मेमोरी एक्सेस, विभिन्न प्रकार की छँटाई और अधिक, जो मुख्य लिपि में कठिन या असंभव हैं, इत्यादि। एप्लिकेशन और वीबीस्क्रिप्ट के लिए विजुअल बेसिक का उपयोग स्प्रेडशीट, डेटाबेस, सभी प्रकार के स्क्रिप्ट योग्य प्रोग्राम, दूरसंचार सॉफ़्टवेयर, विकास उपकरण, ग्राफ़िक्स उपकरण और अन्य सॉफ़्टवेयर जैसी वस्तुओं को नियंत्रित करने और संचार करने के लिए किया जा सकता है, जिन्हें घटक वस्तु मॉडल के माध्यम से एक्सेस किया जा सकता है।
यह भी देखें
- ग्लू कोड
- दुभाषिया निर्देश
- शेबांग (यूनिक्स)
- यूनिक्स वृत्त
- पावरशेल
- विंडोज स्क्रिप्ट होस्ट
संदर्भ
- ↑ Kernighan, Brian W.; Pike, Rob (1984), "3. Using the Shell", The UNIX Programming Environment, Prentice Hall, Inc., p. 94, ISBN 0-13-937699-2,
The shell is actually a programming language: it has variables, loops, decision-making, and so on.
- ↑ 2.0 2.1 जॉनसन, क्रिस (2009)। [1] प्रो बैश प्रोग्रामिंग: लिनक्स शेल की स्क्रिप्टिंग, Apress, 27 सितंबर, 2019 को पुनः प्राप्त। ISBN 9781430219989
- ↑ "exec(3p) – POSIX Programmer's Manual". Retrieved 2020-07-24.
- ↑ Unix Shells By Example, pp 7-10,
- ↑ Programming Perl, 5th Edition, preface
- ↑ "डिश - manned.org". manned.org. Retrieved 2019-01-16.
- ↑ Robbins, Arnold; Hannah, Elbert; Lamb, Linda (2008). Learning the vi and Vim Editors. p. 205. ISBN 9781449313258.
- ↑ Easttom, Chuck (2012). Essential Linux Administration:: A Comprehensive Guide for Beginners. p. 228. ISBN 978-1435459571.
- ↑ Kumari, Sinny (November 23, 2015). Linux Shell Scripting Essentials. Packt Publishing Ltd. ISBN 9781783552375. Retrieved May 7, 2017.
Rather than using a file extension for shell scripts, it's preferred to keep a filename without extension and let an interpreter identify the type by looking into shebang(#!).
- ↑ Taylor, Dave; Perry, Brandon (December 16, 2016). Wicked Cool Shell Scripts, 2nd Edition: 101 Scripts for Linux, OS X and UNIX Systems. No Starch Press. ISBN 9781593276027. Retrieved May 7, 2017.
Shell scripts don't need a special file extension, so leave the extension blank (or you can add the extension .sh if you prefer, but this isn't required.
- ↑ Larry Wall (January 4, 1991). "अंतिम तर्क ढूँढना". Newsgroup: comp.unix.shell. Retrieved January 5, 2023.
- ↑ Christiansen, Tom. "सीएसएच प्रोग्रामिंग को हानिकारक माना जाता है".
- ↑ "Major Differences From The Bourne Shell".
- ↑ "24 Bashism To Avoid for POSIX-Compliant Shell Scripts". 18 May 2022.
- ↑ MSDN[not specific enough to verify]
- ↑ Windows NT 4 Workstation Resource Kit