शैल स्क्रिप्ट: Difference between revisions

From Vigyanwiki
(Created page with "{{short description|Script written for the shell, or command line interpreter, of an operating system}} {{About|scripting in Unix-like systems|batch programming in DOS, OS/2 a...")
 
No edit summary
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}}
{{About|scripting in Unix-like systems|batch programming in DOS, OS/2 and Windows|Batch file|batch programming in Windows PowerShell shell|Windows PowerShell#Scripting|programming in the shells (cmd.exe) in operating systems of the Windows NT/2000 series|cmd.exe| shell programming, by means of files called Command Scripts or Procedures on Vax/VMS machines|DIGITAL Command Language}}
{{About|
{{refimprove|date=February 2014}}
यूनिक्स जैसी प्रणालियों में स्क्रिप्टिंग|DOS, OS/2 और Windows में बैच प्रोग्रामिंग|बैच संचिका|
[[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> शेल स्क्रिप्ट की विभिन्न बोलियों को [[ भाषा का अंकन ]] माना जाता है। शेल स्क्रिप्ट द्वारा किए गए विशिष्ट संचालन में फ़ाइल हेरफेर, प्रोग्राम निष्पादन और प्रिंटिंग टेक्स्ट शामिल हैं। एक स्क्रिप्ट जो पर्यावरण को सेट करती है, प्रोग्राम चलाती है, और आवश्यक सफाई या लॉगिंग करती है, एक रैपर कहलाती है।
विंडोज पॉवरशेल शेल में बैच प्रोग्रामिंग|
विंडोज पॉवरशेल स्क्रिप्टिंग|
विंडोज एनटी/2000 श्रृंखला के ऑपरेटिंग
प्रणाली में शेल्स (cmd.exe) में प्रोग्रामिंग|cmd.exe| शेल प्रोग्रामिंग, वैक्स/वीएमएस मशीनों पर कमांड स्क्रिप्ट्स या प्रक्रियाओं नामक फाइलों के माध्यम से|डिजिटल कमांड भाषा}}
[[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> शेल स्क्रिप्ट की विभिन्न बोलियों को [[ भाषा का अंकन |भाषा का अंकन]] माना जाता है। शेल स्क्रिप्ट द्वारा किए गए विशिष्ट संचालन में फ़ाइल आदान-प्रदान, प्रोग्राम निष्पादन और प्रिंटिंग टेक्स्ट सम्मिलित हैं। स्क्रिप्ट जो पर्यावरण को संग्रह करती है, प्रोग्राम चलाती है, और आवश्यक सफाई या लॉगिंग करती है, रैपर कहलाती है।


ऑपरेटिंग सिस्टम शेल चलाने के स्वचालित मोड का अर्थ करने के लिए शब्द का प्रयोग आम तौर पर भी किया जाता है; प्रत्येक ऑपरेटिंग सिस्टम इन कार्यों के लिए एक विशेष नाम का उपयोग करता है जिसमें बैच फ़ाइलें (MSDos-Win95 स्ट्रीम, OS/2), कमांड प्रक्रियाएँ (VMS), और शेल स्क्रिप्ट्स ([[Windows NT]] स्ट्रीम और तृतीय-पक्ष डेरिवेटिव जैसे 4NT (शेल) शामिल हैं)—लेख है cmd.exe पर), और मेनफ्रेम ऑपरेटिंग सिस्टम कई शर्तों से जुड़े हैं।
ऑपरेटिंग प्रणाली शेल चलाने के स्वचालित मोड का अर्थ करने के लिए शब्द का प्रयोग सामान्यतः भी किया जाता है; प्रत्येक ऑपरेटिंग प्रणाली इन कार्यों के लिए विशेष नाम का उपयोग करता है जिसमें बैच फ़ाइलें (MSDos-Win95 भाप, OS/2), कमांड प्रक्रियाएँ (VMS), और शेल स्क्रिप्ट्स ([[Windows NT|विंडोज एन टी]] भाप और तृतीय-पक्ष डेरिवेटिव जैसे 4NT (शेल) सम्मिलित हैं)—लेख है cmd.exe पर), और मेनफ्रेम ऑपरेटिंग प्रणाली कई नियमो से जुड़े हैं।


आमतौर पर यूनिक्स और यूनिक्स जैसी प्रणालियों में मौजूद शेल में [[कॉर्न शेल]], [[बॉर्न शेल]] और [[जीएनयू बैश]] शामिल हैं। जबकि एक यूनिक्स ऑपरेटिंग सिस्टम में एक अलग डिफ़ॉल्ट शेल हो सकता है, जैसे कि [[macOS]] पर [[Zsh]], ये शेल आमतौर पर पश्चगामी संगतता के लिए मौजूद होते हैं।
सामान्यतः यूनिक्स और यूनिक्स जैसी प्रणालियों में उपस्थित शेल में [[कॉर्न शेल]], [[बॉर्न शेल]] और [[जीएनयू बैश]] सम्मिलित हैं। जबकि यूनिक्स ऑपरेटिंग प्रणाली में भिन्न त्रुटिपूर्ण शेल हो सकता है, जैसे कि [[macOS]] पर [[Zsh]], ये शेल सामान्यतः पश्चगामी संगतता के लिए उपस्थित होते हैं।


== क्षमताएं ==
== क्षमताएं ==


=== टिप्पणियाँ ===
=== टिप्पणियाँ ===
[[टिप्पणी (कंप्यूटर प्रोग्रामिंग)]] को शेल द्वारा अनदेखा किया जाता है। वे आम तौर पर हैश प्रतीक से शुरू होते हैं (<code>#</code>), और पंक्ति के अंत तक जारी रखें।<ref name="Pro_Bash_Programming">जॉनसन, क्रिस (2009)।
[[टिप्पणी (कंप्यूटर प्रोग्रामिंग)]] को शेल द्वारा अनदेखा किया जाता है। वे सामान्यतः हैश प्रतीक से शुरू होते हैं (<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>


=== स्क्रिप्टिंग भाषा का विन्यास योग्य विकल्प ===
=== स्क्रिप्टिंग भाषा का विन्यास योग्य विकल्प ===


शेबैंग (यूनिक्स), या हैश-बैंग, एक विशेष प्रकार की टिप्पणी है जिसका उपयोग सिस्टम यह निर्धारित करने के लिए करता है कि फ़ाइल को निष्पादित करने के लिए किस दुभाषिया का उपयोग किया जाए। शेबैंग फ़ाइल की पहली पंक्ति होनी चाहिए और इसके साथ शुरू होनी चाहिए<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>, और पूर्व-प्रदत्त कमांड विकल्पों का एक डिफ़ॉल्ट सेट।


<syntaxhighlight lang="sh">
<syntaxhighlight lang="sh">
Line 28: Line 32:
LC_COLLATE=C ls -FCas "$@"
LC_COLLATE=C ls -FCas "$@"
</syntaxhighlight>
</syntaxhighlight>
यहां, पहली पंक्ति स्क्रिप्टिंग भाषा के #Configurable विकल्प का उपयोग करती है, यह इंगित करने के लिए कि किस दुभाषिया को शेष स्क्रिप्ट को निष्पादित करना चाहिए, और दूसरी पंक्ति फ़ाइल प्रारूप संकेतकों, कॉलम, सभी फाइलों (कोई भी छोड़ा नहीं) के विकल्पों के साथ एक सूची बनाती है, और एक ब्लॉकों में आकार। <code>LC_COLLATE=C</code> ई> ऊपरी और निचले मामले को एक साथ फोल्ड नहीं करने के लिए डिफ़ॉल्ट संयोजन आदेश सेट करता है, नामों में विराम चिह्नों को अनदेखा करने के साइड इफेक्ट के रूप में सामान्य फ़ाइल नामों के साथ इंटरमिक्स [[ dotfile ]] नहीं करता है (डॉटफाइल आमतौर पर केवल तभी दिखाए जाते हैं जब कोई विकल्प पसंद हो <code>-a</code> प्रयोग किया जाता है), और <code>"$@"</code> दिए गए किसी भी पैरामीटर का कारण बनता है <code>l</code> ls के पैरामीटर के रूप में पारित करने के लिए, ताकि सभी सामान्य विकल्प और ls को ज्ञात अन्य [[ प्रोग्रामिंग भाषा सिंटैक्स ]] अभी भी उपयोग किए जा सकें।
यहां, पहली पंक्ति स्क्रिप्टिंग भाषा के #Configurable विकल्प का उपयोग करती है, यह इंगित करने के लिए कि किस दुभाषिया को शेष स्क्रिप्ट को निष्पादित करना चाहिए, और दूसरी पंक्ति फ़ाइल प्रारूप संकेतकों, कॉलम, सभी फाइलों (कोई भी छोड़ा नहीं) के विकल्पों के साथ एक सूची बनाती है, और एक ब्लॉकों में आकार। <code>LC_COLLATE=C</code> ई> ऊपरी और निचले मामले को एक साथ फोल्ड नहीं करने के लिए डिफ़ॉल्ट संयोजन आदेश सेट करता है, नामों में विराम चिह्नों को अनदेखा करने के साइड इफेक्ट के रूप में सामान्य फ़ाइल नामों के साथ इंटरमिक्स [[ dotfile ]] नहीं करता है (डॉटफाइल सामान्यतः केवल तभी दिखाए जाते हैं जब कोई विकल्प पसंद हो <code>-a</code> प्रयोग किया जाता है), और <code>"$@"</code> दिए गए किसी भी पैरामीटर का कारण बनता है <code>l</code> ls के पैरामीटर के रूप में पारित करने के लिए, ताकि सभी सामान्य विकल्प और ls को ज्ञात अन्य [[ प्रोग्रामिंग भाषा सिंटैक्स ]] अभी भी उपयोग किए जा सकें।


उपयोगकर्ता तब बस उपयोग कर सकता था <code>l</code> सबसे अधिक इस्तेमाल की जाने वाली शॉर्ट लिस्टिंग के लिए।
उपयोगकर्ता तब बस उपयोग कर सकता था <code>l</code> सबसे अधिक इस्तेमाल की जाने वाली शॉर्ट लिस्टिंग के लिए।
Line 59: Line 63:


=== सामान्यीकरण ===
=== सामान्यीकरण ===
अलग-अलग कार्यों के लिए सरल बैच कार्य असामान्य नहीं हैं, लेकिन शेल लूप, परीक्षण और चर का उपयोग करने से उपयोगकर्ताओं को अधिक लचीलापन मिलता है। जेपीईजी छवियों को पीएनजी छवियों में कनवर्ट करने के लिए एक पॉज़िक्स एसएच स्क्रिप्ट, जहां छवि नाम कमांड लाइन पर प्रदान किए जाते हैं-संभवतः वाइल्डकार्ड के माध्यम से- स्क्रिप्ट के भीतर सूचीबद्ध होने के बजाय, इस फ़ाइल के साथ बनाया जा सकता है, आमतौर पर फ़ाइल में सहेजा जाता है <code>/home/''username''/bin/jpg2png</code>
भिन्न-भिन्न कार्यों के लिए सरल बैच कार्य असामान्य नहीं हैं, लेकिन शेल लूप, परीक्षण और चर का उपयोग करने से उपयोगकर्ताओं को अधिक लचीलापन मिलता है। जेपीईजी छवियों को पीएनजी छवियों में कनवर्ट करने के लिए एक पॉज़िक्स एसएच स्क्रिप्ट, जहां छवि नाम कमांड लाइन पर प्रदान किए जाते हैं-संभवतः वाइल्डकार्ड के माध्यम से- स्क्रिप्ट के भीतर सूचीबद्ध होने के बजाय, इस फ़ाइल के साथ बनाया जा सकता है, सामान्यतः फ़ाइल में सहेजा जाता है <code>/home/''username''/bin/jpg2png</code>


<syntaxhighlight lang="sh">
<syntaxhighlight lang="sh">
Line 80: Line 84:


=== प्रोग्रामिंग ===
=== प्रोग्रामिंग ===
कई आधुनिक शेल भी विभिन्न विशेषताओं की आपूर्ति करते हैं जो आमतौर पर केवल अधिक परिष्कृत सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषाओं में पाई जाती हैं, जैसे नियंत्रण-प्रवाह निर्माण, चर, टिप्पणी (कंप्यूटर प्रोग्रामिंग), सरणियाँ, [[सबरूटीन]]्स और इसी तरह। उपलब्ध सुविधाओं के इस प्रकार के साथ, शैल स्क्रिप्ट के रूप में यथोचित परिष्कृत अनुप्रयोगों को लिखना संभव है। हालाँकि, वे अभी भी इस तथ्य से सीमित हैं कि अधिकांश शेल भाषाओं में डेटा टाइपिंग सिस्टम, क्लासेस, थ्रेडिंग, जटिल गणित और अन्य सामान्य पूर्ण भाषा सुविधाओं के लिए बहुत कम या कोई समर्थन नहीं है, और आमतौर पर संकलित कोड या व्याख्या की गई भाषाओं की तुलना में बहुत धीमी होती हैं। प्रदर्शन लक्ष्य के रूप में गति के साथ।
कई आधुनिक शेल भी विभिन्न विशेषताओं की आपूर्ति करते हैं जो सामान्यतः केवल अधिक परिष्कृत सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषाओं में पाई जाती हैं, जैसे नियंत्रण-प्रवाह निर्माण, चर, टिप्पणी (कंप्यूटर प्रोग्रामिंग), सरणियाँ, [[सबरूटीन]]्स और इसी तरह। उपलब्ध सुविधाओं के इस प्रकार के साथ, शैल स्क्रिप्ट के रूप में यथोचित परिष्कृत अनुप्रयोगों को लिखना संभव है। हालाँकि, वे अभी भी इस तथ्य से सीमित हैं कि अधिकांश शेल भाषाओं में डेटा टाइपिंग प्रणाली, क्लासेस, थ्रेडिंग, जटिल गणित और अन्य सामान्य पूर्ण भाषा सुविधाओं के लिए बहुत कम या कोई समर्थन नहीं है, और सामान्यतः संकलित कोड या व्याख्या की गई भाषाओं की तुलना में बहुत धीमी होती हैं। प्रदर्शन लक्ष्य के रूप में गति के साथ।


मानक यूनिक्स उपकरण [[sed]] और [[awk]] शेल प्रोग्रामिंग के लिए अतिरिक्त क्षमताएं प्रदान करते हैं; [[पर्ल]] को शेल स्क्रिप्ट में भी एम्बेड किया जा सकता है जैसे कि अन्य स्क्रिप्टिंग भाषाओं जैसे [[टीसीएल]]। पर्ल और टीसीएल ग्राफिक्स टूलकिट के साथ भी आते हैं।
मानक यूनिक्स उपकरण [[sed]] और [[awk]] शेल प्रोग्रामिंग के लिए अतिरिक्त क्षमताएं प्रदान करते हैं; [[पर्ल]] को शेल स्क्रिप्ट में भी एम्बेड किया जा सकता है जैसे कि अन्य स्क्रिप्टिंग भाषाओं जैसे [[टीसीएल]]। पर्ल और टीसीएल ग्राफिक्स टूलकिट के साथ भी आते हैं।
Line 87: Line 91:
{{Main|Unix shell}}
{{Main|Unix shell}}


आमतौर पर UNIX, Linux, और POSIX- संगत ऑपरेटिंग सिस्टम इंस्टॉलेशन पर पाई जाने वाली स्क्रिप्टिंग भाषाओं में शामिल हैं:
सामान्यतः UNIX, Linux, और POSIX- संगत ऑपरेटिंग प्रणाली इंस्टॉलेशन पर पाई जाने वाली स्क्रिप्टिंग भाषाओं में सम्मिलित हैं:
* [[के शेल]] (<code>ksh</code>) ksh88, Korn Shell '93 और अन्य जैसे कई संभावित संस्करणों में।
* [[के शेल]] (<code>ksh</code>) ksh88, Korn Shell '93 और अन्य जैसे कई संभावित संस्करणों में।
* बॉर्न शेल (<code>sh</code>), उपयोग में आने वाले सबसे पुराने गोले में से एक
* बॉर्न शेल (<code>sh</code>), उपयोग में आने वाले सबसे पुराने गोले में से एक
Line 96: Line 100:


C और Tcl शेल्स का सिंटैक्स उक्त प्रोग्रामिंग भाषाओं के समान है, और कॉर्न शेल्स और बैश बॉर्न शेल के विकास हैं, जो [[ALGOL]] भाषा पर आधारित है, जिसमें कई अन्य तत्वों को भी जोड़ा गया है।<ref>Unix Shells By Example, pp 7-10,</ref> दूसरी ओर, विभिन्न शेल प्लस टूल जैसे awk, sed, [[grep]], और [[BASIC]], Lisp (प्रोग्रामिंग लैंग्वेज), C (प्रोग्रामिंग लैंग्वेज) और आगे पर्ल प्रोग्रामिंग लैंग्वेज में योगदान दिया।<ref>Programming Perl, 5th Edition, preface</ref>
C और Tcl शेल्स का सिंटैक्स उक्त प्रोग्रामिंग भाषाओं के समान है, और कॉर्न शेल्स और बैश बॉर्न शेल के विकास हैं, जो [[ALGOL]] भाषा पर आधारित है, जिसमें कई अन्य तत्वों को भी जोड़ा गया है।<ref>Unix Shells By Example, pp 7-10,</ref> दूसरी ओर, विभिन्न शेल प्लस टूल जैसे awk, sed, [[grep]], और [[BASIC]], Lisp (प्रोग्रामिंग लैंग्वेज), C (प्रोग्रामिंग लैंग्वेज) और आगे पर्ल प्रोग्रामिंग लैंग्वेज में योगदान दिया।<ref>Programming Perl, 5th Edition, preface</ref>
अन्य गोले जो मशीन पर या डाउनलोड और/या खरीद के लिए उपलब्ध हो सकते हैं उनमें शामिल हैं:
अन्य गोले जो मशीन पर या डाउनलोड और/या खरीद के लिए उपलब्ध हो सकते हैं उनमें सम्मिलित हैं:
* [[अल्मक्विस्ट खोल]] (<code>ash</code>)
* [[अल्मक्विस्ट खोल]] (<code>ash</code>)
* [[पावरशेल]] (<code>msh</code>)
* [[पावरशेल]] (<code>msh</code>)
Line 107: Line 111:
* एक [[रिमोट शेल]] (<code>rsh</code>)
* एक [[रिमोट शेल]] (<code>rsh</code>)
* एक [[सुरक्षित खोल]] (<code>ssh</code>)
* एक [[सुरक्षित खोल]] (<code>ssh</code>)
रिमोट सिस्टम पर एक अधिक जटिल खोल चलाने के लिए वास्तव में केवल उपकरण हैं और विशेषताओं की तरह कोई 'खोल' नहीं है।
रिमोट प्रणाली पर एक अधिक जटिल खोल चलाने के लिए वास्तव में केवल उपकरण हैं और विशेषताओं की तरह कोई 'खोल' नहीं है।


== अन्य स्क्रिप्टिंग भाषाएं ==
== अन्य स्क्रिप्टिंग भाषाएं ==
{{Main|Scripting language}}
{{Main|Scripting language}}


कई शक्तिशाली स्क्रिप्टिंग भाषाओं को उन कार्यों के लिए पेश किया गया है जो बहुत बड़े या जटिल हैं जिन्हें साधारण शेल स्क्रिप्ट के साथ आराम से संभाला जा सकता है, लेकिन जिसके लिए एक स्क्रिप्ट के फायदे वांछनीय हैं और एक पूर्ण विकसित, संकलित प्रोग्रामिंग भाषा का विकास नुकसानदेह होगा . स्क्रिप्टिंग भाषाओं को उच्च-स्तरीय प्रोग्रामिंग भाषाओं से अलग करने वाली बारीकियों पर बहस का एक लगातार स्रोत है, लेकिन, आम तौर पर बोलना, एक स्क्रिप्टिंग भाषा वह है जिसके लिए एक दुभाषिया की आवश्यकता होती है।
कई शक्तिशाली स्क्रिप्टिंग भाषाओं को उन कार्यों के लिए पेश किया गया है जो बहुत बड़े या जटिल हैं जिन्हें साधारण शेल स्क्रिप्ट के साथ आराम से संभाला जा सकता है, लेकिन जिसके लिए एक स्क्रिप्ट के फायदे वांछनीय हैं और एक पूर्ण विकसित, संकलित प्रोग्रामिंग भाषा का विकास नुकसानदेह होगा . स्क्रिप्टिंग भाषाओं को उच्च-स्तरीय प्रोग्रामिंग भाषाओं से भिन्न करने वाली बारीकियों पर बहस का एक लगातार स्रोत है, लेकिन, सामान्यतः बोलना, एक स्क्रिप्टिंग भाषा वह है जिसके लिए एक दुभाषिया की आवश्यकता होती है।
<!-- This bit seems speculative, as there are often many other reasons cited: "However, core system maintenance scripts, which might otherwise be written in such a language, continue to be written as shell scripts, as they cannot always rely on the presence of the relevant scripting language engines." -->
<!-- This bit seems speculative, as there are often many other reasons cited: "However, core system maintenance scripts, which might otherwise be written in such a language, continue to be written as shell scripts, as they cannot always rely on the presence of the relevant scripting language engines." -->




== जीवन चक्र ==
== जीवन चक्र ==
शेल स्क्रिप्ट अक्सर सॉफ्टवेयर विकास में एक प्रारंभिक चरण के रूप में काम करते हैं, और बाद में एक अलग अंतर्निहित कार्यान्वयन के लिए रूपांतरण के अधीन होते हैं, आमतौर पर पर्ल, पायथन (प्रोग्रामिंग भाषा), या सी (प्रोग्रामिंग भाषा) में परिवर्तित हो जाते हैं। [[दुभाषिया निर्देश]] फ़ाइल नाम एक्सटेंशन के रूप में उजागर होने के बजाय कार्यान्वयन विवरण को स्क्रिप्ट के अंदर पूरी तरह से छिपाने की अनुमति देता है, और अंतिम उपयोगकर्ताओं पर कोई प्रभाव डाले बिना विभिन्न भाषाओं में निर्बाध पुनर्कार्यान्वयन प्रदान करता है।
शेल स्क्रिप्ट अक्सर सॉफ्टवेयर विकास में एक प्रारंभिक चरण के रूप में काम करते हैं, और बाद में एक भिन्न अंतर्निहित कार्यान्वयन के लिए रूपांतरण के अधीन होते हैं, सामान्यतः पर्ल, पायथन (प्रोग्रामिंग भाषा), या सी (प्रोग्रामिंग भाषा) में परिवर्तित हो जाते हैं। [[दुभाषिया निर्देश]] फ़ाइल नाम एक्सटेंशन के रूप में उजागर होने के बजाय कार्यान्वयन विवरण को स्क्रिप्ट के अंदर पूरी तरह से छिपाने की अनुमति देता है, और अंतिम उपयोगकर्ताओं पर कोई प्रभाव डाले बिना विभिन्न भाषाओं में निर्बाध पुनर्कार्यान्वयन प्रदान करता है।


जबकि .sh [[फाइल एक्सटेंशन]] वाली फ़ाइलें आमतौर पर किसी प्रकार की शेल स्क्रिप्ट होती हैं, अधिकांश शेल स्क्रिप्ट में कोई फ़ाइल नाम एक्सटेंशन नहीं होता है।<ref>{{cite book
जबकि .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 160:


== फायदे और नुकसान ==
== फायदे और नुकसान ==
शेल स्क्रिप्ट लिखने का शायद सबसे बड़ा फायदा यह है कि कमांड और सिंटैक्स बिल्कुल वही होते हैं जो सीधे कमांड-लाइन पर दर्ज किए जाते हैं। प्रोग्रामर को पूरी तरह से अलग सिंटैक्स पर स्विच करने की ज़रूरत नहीं है, क्योंकि अगर स्क्रिप्ट किसी दूसरी भाषा में लिखी गई थी, या अगर एक संकलित भाषा का इस्तेमाल किया गया था।
शेल स्क्रिप्ट लिखने का शायद सबसे बड़ा फायदा यह है कि कमांड और सिंटैक्स बिल्कुल वही होते हैं जो सीधे कमांड-लाइन पर दर्ज किए जाते हैं। प्रोग्रामर को पूरी तरह से भिन्न सिंटैक्स पर स्विच करने की ज़रूरत नहीं है, क्योंकि अगर स्क्रिप्ट किसी दूसरी भाषा में लिखी गई थी, या अगर एक संकलित भाषा का इस्तेमाल किया गया था।


अक्सर, अन्य प्रोग्रामिंग भाषाओं में समतुल्य कोड लिखने की तुलना में शेल स्क्रिप्ट लिखना बहुत तेज होता है। कई लाभों में आसान प्रोग्राम या फ़ाइल चयन, त्वरित प्रारंभ और इंटरैक्टिव डिबगिंग शामिल हैं। एक शेल स्क्रिप्ट का उपयोग मौजूदा कार्यक्रमों के आसपास एक अनुक्रमण और निर्णय लेने की कड़ी प्रदान करने के लिए किया जा सकता है, और मध्यम आकार की स्क्रिप्ट के लिए एक संकलन कदम की अनुपस्थिति एक फायदा है। इंटरप्रिटेटिव रनिंग डिबगिंग कोड को स्क्रिप्ट में लिखना आसान बनाता है और बग्स का पता लगाने और उन्हें ठीक करने के लिए इसे फिर से चलाता है। गैर-विशेषज्ञ उपयोगकर्ता प्रोग्राम के व्यवहार को अनुकूलित करने के लिए स्क्रिप्टिंग का उपयोग कर सकते हैं, और शेल स्क्रिप्टिंग मल्टीप्रोसेसिंग के लिए कुछ सीमित गुंजाइश प्रदान करती है।
अक्सर, अन्य प्रोग्रामिंग भाषाओं में समतुल्य कोड लिखने की तुलना में शेल स्क्रिप्ट लिखना बहुत तेज होता है। कई लाभों में आसान प्रोग्राम या फ़ाइल चयन, त्वरित प्रारंभ और इंटरैक्टिव डिबगिंग सम्मिलित हैं। एक शेल स्क्रिप्ट का उपयोग उपस्थिता कार्यक्रमों के आसपास एक अनुक्रमण और निर्णय लेने की कड़ी प्रदान करने के लिए किया जा सकता है, और मध्यम आकार की स्क्रिप्ट के लिए एक संकलन कदम की अनुपस्थिति एक फायदा है। इंटरप्रिटेटिव रनिंग डिबगिंग कोड को स्क्रिप्ट में लिखना आसान बनाता है और बग्स का पता लगाने और उन्हें ठीक करने के लिए इसे फिर से चलाता है। गैर-विशेषज्ञ उपयोगकर्ता प्रोग्राम के व्यवहार को अनुकूलित करने के लिए स्क्रिप्टिंग का उपयोग कर सकते हैं, और शेल स्क्रिप्टिंग मल्टीप्रोसेसिंग के लिए कुछ सीमित गुंजाइश प्रदान करती है।


दूसरी ओर, शेल स्क्रिप्टिंग महंगी त्रुटियों से ग्रस्त है। असावधानीवश टंकण त्रुटियाँ जैसे <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>, वगैरह।
दूसरी ओर, शेल स्क्रिप्टिंग महंगी त्रुटियों से ग्रस्त है। असावधानीवश टंकण त्रुटियाँ जैसे <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 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>
Line 172: Line 176:
विभिन्न स्क्रिप्टिंग भाषाएं कई सामान्य तत्वों को साझा कर सकती हैं, मुख्य रूप से POSIX आधारित होने के कारण, और कुछ शैल विभिन्न शैलों का अनुकरण करने के लिए मोड प्रदान करते हैं। यह एक स्क्रिप्टिंग भाषा में लिखी गई शेल स्क्रिप्ट को दूसरे में अनुकूलित करने की अनुमति देता है।
विभिन्न स्क्रिप्टिंग भाषाएं कई सामान्य तत्वों को साझा कर सकती हैं, मुख्य रूप से POSIX आधारित होने के कारण, और कुछ शैल विभिन्न शैलों का अनुकरण करने के लिए मोड प्रदान करते हैं। यह एक स्क्रिप्टिंग भाषा में लिखी गई शेल स्क्रिप्ट को दूसरे में अनुकूलित करने की अनुमति देता है।


इसका एक उदाहरण बैश है, जो बॉर्न शेल के समान व्याकरण और सिंटैक्स प्रदान करता है, और जो एक POSIX-अनुपालन मोड भी प्रदान करता है।<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> जैसे, बॉर्न शेल के लिए लिखी गई अधिकांश शेल स्क्रिप्ट्स को BASH में चलाया जा सकता है, लेकिन हो सकता है कि इसका उल्टा सही न हो क्योंकि BASH के एक्सटेंशन हैं जो बॉर्न शेल में मौजूद नहीं हैं। जैसे, इन विशेषताओं को विक्ट: बैशिज्म के रूप में जाना जाता है।<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>
इसका एक उदाहरण बैश है, जो बॉर्न शेल के समान व्याकरण और सिंटैक्स प्रदान करता है, और जो एक POSIX-अनुपालन मोड भी प्रदान करता है।<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> जैसे, बॉर्न शेल के लिए लिखी गई अधिकांश शेल स्क्रिप्ट्स को BASH में चलाया जा सकता है, लेकिन हो सकता है कि इसका उल्टा सही न हो क्योंकि BASH के एक्सटेंशन हैं जो बॉर्न शेल में उपस्थित नहीं हैं। जैसे, इन विशेषताओं को विक्ट: बैशिज्म के रूप में जाना जाता है।<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]] शाखा पर कार्यक्षमता के कुछ नुकसान के साथ-साथ OS/2 के लिए पहले के MKS टूलकिट संस्करण। विंडोज प्रकार के ऑपरेटिंग सिस्टम के लिए कम से कम तीन डीसीएल कार्यान्वयन - [[एक्सएलएनटी]] के अलावा, एक बहु-उपयोग वाली स्क्रिप्टिंग भाषा पैकेज जो कमांड शेल, [[विंडोज स्क्रिप्ट होस्ट]] और [[ कॉमन गेटवे इंटरफ़ेस ]] प्रोग्रामिंग के साथ प्रयोग किया जाता है - इन सिस्टमों के लिए भी उपलब्ध हैं। मैक ओएस एक्स और उसके बाद के संस्करण भी यूनिक्स जैसे हैं।<ref>MSDN{{nonspecific|date=May 2017}}</ref>
सिग्विन, [[एमकेएस टूलकिट]], [[इंटरिक्स]] (जो कि यूनिक्स के लिए माइक्रोसॉफ्ट विंडोज सेवाओं में उपलब्ध है), [[ हैमिल्टन सी खोल ]], यूडब्ल्यूआईएन (विंडोज़ के लिए एटी एंड टी यूनिक्स) और अन्य जैसे इंटरऑपरेबिलिटी सॉफ़्टवेयर विंडोज़ एनटी चलाने वाली मशीनों पर यूनिक्स शैल प्रोग्राम चलाने की अनुमति देते हैं। इसके उत्तराधिकारी, [[MS-DOS]]-[[Windows 95]] शाखा पर कार्यक्षमता के कुछ नुकसान के साथ-साथ OS/2 के लिए पहले के MKS टूलकिट संस्करण। विंडोज प्रकार के ऑपरेटिंग प्रणाली के लिए कम से कम तीन डीसीएल कार्यान्वयन - [[एक्सएलएनटी]] के अलावा, एक बहु-उपयोग वाली स्क्रिप्टिंग भाषा पैकेज जो कमांड शेल, [[विंडोज स्क्रिप्ट होस्ट]] और [[ कॉमन गेटवे इंटरफ़ेस ]] प्रोग्रामिंग के साथ प्रयोग किया जाता है - इन प्रणालीों के लिए भी उपलब्ध हैं। मैक ओएस एक्स और उसके बाद के संस्करण भी यूनिक्स जैसे हैं।<ref>MSDN{{nonspecific|date=May 2017}}</ref>
पूर्वोक्त उपकरणों के अलावा, कुछ POSIX और OS/2 कार्यक्षमता का उपयोग Windows NT ऑपरेटिंग सिस्टम श्रृंखला के संबंधित पर्यावरणीय उप-प्रणालियों के साथ-साथ Windows 2000 तक भी किया जा सकता है। एक तीसरा, [[16-बिट कंप्यूटिंग]] | 16-बिट सबसिस्टम जिसे अक्सर MS-DOS सबसिस्टम कहा जाता है, उपरोक्त MS-DOS बैच फ़ाइलों को चलाने के लिए इन ऑपरेटिंग सिस्टमों के साथ प्रदान किए गए Command.com का उपयोग करता है।<ref>Windows NT 4 Workstation Resource Kit</ref>
पूर्वोक्त उपकरणों के अलावा, कुछ POSIX और OS/2 कार्यक्षमता का उपयोग Windows NT ऑपरेटिंग प्रणाली श्रृंखला के संबंधित पर्यावरणीय उप-प्रणालियों के साथ-साथ Windows 2000 तक भी किया जा सकता है। एक तीसरा, [[16-बिट कंप्यूटिंग]] | 16-बिट सबप्रणाली जिसे अक्सर MS-DOS सबप्रणाली कहा जाता है, उपरोक्त MS-DOS बैच फ़ाइलों को चलाने के लिए इन ऑपरेटिंग प्रणालीों के साथ प्रदान किए गए Command.com का उपयोग करता है।<ref>Windows NT 4 Workstation Resource Kit</ref>
कंसोल विकल्प [[4DOS]], [[4OS2]], [[FreeDOS]], [[पीटर नॉर्टन]] का [[NDOS]] और टेक कमांड कंसोल)|4NT / Take Command जो Windows NT-style cmd.exe, MS-DOS/Windows 95 बैच फ़ाइलों (Command.com द्वारा संचालित) में कार्यक्षमता जोड़ता है। , OS/2 के cmd.exe, और 4NT क्रमशः उन शेल के समान हैं जो वे बढ़ाते हैं और Windows स्क्रिप्ट होस्ट के साथ अधिक एकीकृत होते हैं, जो तीन पूर्व-स्थापित इंजनों, [[VBScript]], [[JScript]], और अनुप्रयोगों के लिए Visual Basic के साथ आता है और जिसके लिए Rexx, Perl, Python, Ruby, और Tcl के साथ कई तृतीय-पक्ष इंजन जोड़े जा सकते हैं, जिनके 4NT और संबंधित कार्यक्रमों में पूर्व-निर्धारित कार्य हैं। [[PC DOS]] काफी हद तक MS-DOS के समान है, जबकि [[DR DOS]] अधिक भिन्न है। Windows NT के पुराने संस्करण OS/2 सबसिस्टम द्वारा 4OS2 के समकालीन संस्करणों को चलाने में सक्षम हैं।
कंसोल विकल्प [[4DOS]], [[4OS2]], [[FreeDOS]], [[पीटर नॉर्टन]] का [[NDOS]] और टेक कमांड कंसोल)|4NT / Take Command जो Windows NT-style cmd.exe, MS-DOS/Windows 95 बैच फ़ाइलों (Command.com द्वारा संचालित) में कार्यक्षमता जोड़ता है। , OS/2 के cmd.exe, और 4NT क्रमशः उन शेल के समान हैं जो वे बढ़ाते हैं और Windows स्क्रिप्ट होस्ट के साथ अधिक एकीकृत होते हैं, जो तीन पूर्व-स्थापित इंजनों, [[VBScript]], [[JScript]], और अनुप्रयोगों के लिए Visual Basic के साथ आता है और जिसके लिए Rexx, Perl, Python, Ruby, और Tcl के साथ कई तृतीय-पक्ष इंजन जोड़े जा सकते हैं, जिनके 4NT और संबंधित कार्यक्रमों में पूर्व-निर्धारित कार्य हैं। [[PC DOS]] काफी हद तक MS-DOS के समान है, जबकि [[DR DOS]] अधिक भिन्न है। Windows NT के पुराने संस्करण OS/2 सबप्रणाली द्वारा 4OS2 के समकालीन संस्करणों को चलाने में सक्षम हैं।


परिभाषा के अनुसार, स्क्रिप्टिंग भाषाएँ विस्तारित की जा सकती हैं; उदाहरण के लिए, एक MS-DOS/Windows 95/98 और Windows NT प्रकार के सिस्टम शेल/बैच प्रोग्राम को [[KiXtart]], [[QBasic]], विभिन्न BASIC, Rexx, Perl, और Python (प्रोग्रामिंग लैंग्वेज) कार्यान्वयन, Windows स्क्रिप्ट होस्ट जैसे टूल कॉल करने की अनुमति देते हैं। और इसके स्थापित इंजन। यूनिक्स और अन्य पॉज़िक्स-संगत सिस्टम पर, शेल स्क्रिप्ट की स्ट्रिंग और न्यूमेरिक प्रोसेसिंग क्षमता को बढ़ाने के लिए awk और sed का उपयोग किया जाता है। Tcl, Perl, Rexx, और Python में ग्राफिक्स टूलकिट हैं और शेल स्क्रिप्ट के लिए फ़ंक्शन और प्रक्रियाओं को कोड करने के लिए उपयोग किया जा सकता है जो एक गति अड़चन पैदा करता है (C, फोरट्रान, असेंबली लैंग्वेज और c अभी भी बहुत तेज़ हैं) और कार्यक्षमता जोड़ने के लिए जो शेल में उपलब्ध नहीं है भाषा जैसे सॉकेट और अन्य कनेक्टिविटी फ़ंक्शंस, हेवी-ड्यूटी टेक्स्ट प्रोसेसिंग, अगर कॉलिंग स्क्रिप्ट में वे क्षमताएं नहीं हैं, तो नंबरों के साथ काम करना, सेल्फ-राइटिंग और सेल्फ-मॉडिफाइंग कोड, [[ प्रत्यावर्तन ]] जैसी तकनीकें, डायरेक्ट मेमोरी एक्सेस, विभिन्न प्रकार की [[छँटाई]] और अधिक, जो मुख्य लिपि में कठिन या असंभव हैं, इत्यादि। एप्लिकेशन और VBScript के लिए Visual Basic का उपयोग स्प्रेडशीट, डेटाबेस, सभी प्रकार के स्क्रिप्ट योग्य प्रोग्राम, दूरसंचार सॉफ़्टवेयर, डेवलपमेंट टूल, ग्राफ़िक्स टूल और अन्य सॉफ़्टवेयर जैसी चीज़ों को नियंत्रित करने और संचार करने के लिए किया जा सकता है, जिन्हें [[ घटक वस्तु मॉडल ]] के माध्यम से एक्सेस किया जा सकता है।
परिभाषा के अनुसार, स्क्रिप्टिंग भाषाएँ विस्तारित की जा सकती हैं; उदाहरण के लिए, एक MS-DOS/Windows 95/98 और Windows NT प्रकार के प्रणाली शेल/बैच प्रोग्राम को [[KiXtart]], [[QBasic]], विभिन्न BASIC, Rexx, Perl, और Python (प्रोग्रामिंग लैंग्वेज) कार्यान्वयन, Windows स्क्रिप्ट होस्ट जैसे टूल कॉल करने की अनुमति देते हैं। और इसके स्थापित इंजन। यूनिक्स और अन्य पॉज़िक्स-संगत प्रणाली पर, शेल स्क्रिप्ट की स्ट्रिंग और न्यूमेरिक प्रोसेसिंग क्षमता को बढ़ाने के लिए awk और sed का उपयोग किया जाता है। Tcl, Perl, Rexx, और Python में ग्राफिक्स टूलकिट हैं और शेल स्क्रिप्ट के लिए फ़ंक्शन और प्रक्रियाओं को कोड करने के लिए उपयोग किया जा सकता है जो एक गति अड़चन पैदा करता है (C, फोरट्रान, असेंबली लैंग्वेज और c अभी भी बहुत तेज़ हैं) और कार्यक्षमता जोड़ने के लिए जो शेल में उपलब्ध नहीं है भाषा जैसे सॉकेट और अन्य कनेक्टिविटी फ़ंक्शंस, हेवी-ड्यूटी टेक्स्ट प्रोसेसिंग, अगर कॉलिंग स्क्रिप्ट में वे क्षमताएं नहीं हैं, तो नंबरों के साथ काम करना, सेल्फ-राइटिंग और सेल्फ-मॉडिफाइंग कोड, [[ प्रत्यावर्तन ]] जैसी तकनीकें, डायरेक्ट मेमोरी एक्सेस, विभिन्न प्रकार की [[छँटाई]] और अधिक, जो मुख्य लिपि में कठिन या असंभव हैं, इत्यादि। एप्लिकेशन और VBScript के लिए Visual Basic का उपयोग स्प्रेडशीट, डेटाबेस, सभी प्रकार के स्क्रिप्ट योग्य प्रोग्राम, दूरसंचार सॉफ़्टवेयर, डेवलपमेंट टूल, ग्राफ़िक्स टूल और अन्य सॉफ़्टवेयर जैसी चीज़ों को नियंत्रित करने और संचार करने के लिए किया जा सकता है, जिन्हें [[ घटक वस्तु मॉडल ]] के माध्यम से एक्सेस किया जा सकता है।


== यह भी देखें ==
== यह भी देखें ==

Revision as of 12:22, 9 June 2023

ipfirewall को कॉन्फ़िगर करने के लिए FreeBSD शेल स्क्रिप्ट का संपादन

शेल स्क्रिप्ट कंप्यूटर प्रोग्राम है जिसे यूनिक्स खोल , कमांड-लाइन दुभाषिया द्वारा चलाने के लिए डिज़ाइन किया गया है।[1] शेल स्क्रिप्ट की विभिन्न बोलियों को भाषा का अंकन माना जाता है। शेल स्क्रिप्ट द्वारा किए गए विशिष्ट संचालन में फ़ाइल आदान-प्रदान, प्रोग्राम निष्पादन और प्रिंटिंग टेक्स्ट सम्मिलित हैं। स्क्रिप्ट जो पर्यावरण को संग्रह करती है, प्रोग्राम चलाती है, और आवश्यक सफाई या लॉगिंग करती है, रैपर कहलाती है।

ऑपरेटिंग प्रणाली शेल चलाने के स्वचालित मोड का अर्थ करने के लिए शब्द का प्रयोग सामान्यतः भी किया जाता है; प्रत्येक ऑपरेटिंग प्रणाली इन कार्यों के लिए विशेष नाम का उपयोग करता है जिसमें बैच फ़ाइलें (MSDos-Win95 भाप, OS/2), कमांड प्रक्रियाएँ (VMS), और शेल स्क्रिप्ट्स (विंडोज एन टी भाप और तृतीय-पक्ष डेरिवेटिव जैसे 4NT (शेल) सम्मिलित हैं)—लेख है cmd.exe पर), और मेनफ्रेम ऑपरेटिंग प्रणाली कई नियमो से जुड़े हैं।

सामान्यतः यूनिक्स और यूनिक्स जैसी प्रणालियों में उपस्थित शेल में कॉर्न शेल, बॉर्न शेल और जीएनयू बैश सम्मिलित हैं। जबकि यूनिक्स ऑपरेटिंग प्रणाली में भिन्न त्रुटिपूर्ण शेल हो सकता है, जैसे कि macOS पर Zsh, ये शेल सामान्यतः पश्चगामी संगतता के लिए उपस्थित होते हैं।

क्षमताएं

टिप्पणियाँ

टिप्पणी (कंप्यूटर प्रोग्रामिंग) को शेल द्वारा अनदेखा किया जाता है। वे सामान्यतः हैश प्रतीक से शुरू होते हैं (#), और पंक्ति के अंत तक जारी रखें।[2]

स्क्रिप्टिंग भाषा का विन्यास योग्य विकल्प

शेबैंग (यूनिक्स), या हैश-बैंग, एक विशेष प्रकार की टिप्पणी है जिसका उपयोग प्रणाली यह निर्धारित करने के लिए करता है कि फ़ाइल को निष्पादित करने के लिए किस दुभाषिया का उपयोग किया जाए। शेबैंग फ़ाइल की पहली पंक्ति होनी चाहिए और इसके साथ शुरू होनी चाहिए#!.[2]यूनिक्स-जैसे ऑपरेटिंग प्रणाली में, निम्नलिखित वर्ण#!उपसर्ग की व्याख्या एक निष्पादन योग्य प्रोग्राम के पथ के रूप में की जाती है जो स्क्रिप्ट की व्याख्या करेगा।[3]


शॉर्टकट

एक शेल स्क्रिप्ट प्रणाली कमांड का एक सुविधाजनक बदलाव प्रदान कर सकती है जहां विशेष पर्यावरण सेटिंग्स, कमांड विकल्प, या पोस्ट-प्रोसेसिंग स्वचालित रूप से लागू होती है, लेकिन इस तरह से जो नई स्क्रिप्ट को पूरी तरह से सामान्य यूनिक्स कमांड के रूप में कार्य करने की अनुमति देती है।

एक उदाहरण रास का एक संस्करण बनाना होगा, फाइलों को सूचीबद्ध करने का आदेश, इसे एक छोटा कमांड नाम देना होगा l, जो सामान्यतः उपयोगकर्ता के खाते में सहेजा जाएगा bin निर्देशिका के रूप में /home/username/bin/l, और पूर्व-प्रदत्त कमांड विकल्पों का एक डिफ़ॉल्ट सेट।

#!/bin/sh
LC_COLLATE=C ls -FCas "$@"

यहां, पहली पंक्ति स्क्रिप्टिंग भाषा के #Configurable विकल्प का उपयोग करती है, यह इंगित करने के लिए कि किस दुभाषिया को शेष स्क्रिप्ट को निष्पादित करना चाहिए, और दूसरी पंक्ति फ़ाइल प्रारूप संकेतकों, कॉलम, सभी फाइलों (कोई भी छोड़ा नहीं) के विकल्पों के साथ एक सूची बनाती है, और एक ब्लॉकों में आकार। LC_COLLATE=C ई> ऊपरी और निचले मामले को एक साथ फोल्ड नहीं करने के लिए डिफ़ॉल्ट संयोजन आदेश सेट करता है, नामों में विराम चिह्नों को अनदेखा करने के साइड इफेक्ट के रूप में सामान्य फ़ाइल नामों के साथ इंटरमिक्स dotfile नहीं करता है (डॉटफाइल सामान्यतः केवल तभी दिखाए जाते हैं जब कोई विकल्प पसंद हो -a प्रयोग किया जाता है), और "$@" दिए गए किसी भी पैरामीटर का कारण बनता है l ls के पैरामीटर के रूप में पारित करने के लिए, ताकि सभी सामान्य विकल्प और ls को ज्ञात अन्य प्रोग्रामिंग भाषा सिंटैक्स अभी भी उपयोग किए जा सकें।

उपयोगकर्ता तब बस उपयोग कर सकता था l सबसे अधिक इस्तेमाल की जाने वाली शॉर्ट लिस्टिंग के लिए।

एक शेल स्क्रिप्ट का एक और उदाहरण जिसे शॉर्टकट के रूप में इस्तेमाल किया जा सकता है, किसी दिए गए निर्देशिका के भीतर सभी फाइलों और निर्देशिकाओं की सूची को प्रिंट करना होगा।

#!/bin/sh

clear
ls -al

इस मामले में, शेल स्क्रिप्ट #!/bin/sh की अपनी सामान्य शुरुआती लाइन से शुरू होगी। इसके बाद, स्क्रिप्ट clear कमांड निष्पादित करती है जो अगली लाइन पर जाने से पहले सभी टेक्स्ट के टर्मिनल को क्लियर करती है। निम्न पंक्ति स्क्रिप्ट का मुख्य कार्य प्रदान करती है। ls -al कमांड उन फाइलों और डाइरेक्टरी को सूचीबद्ध करता है जो उस डायरेक्टरी में हैं जहां से स्क्रिप्ट चलाई जा रही है। उपयोगकर्ता की जरूरतों को दर्शाने के लिए ls कमांड एट्रिब्यूट्स को बदला जा सकता है।

ध्यान दें: यदि कार्यान्वयन में clear कमांड नहीं है, तो इसके बजाय clr कमांड का उपयोग करने का प्रयास करें।

बैच जॉब्स

शेल स्क्रिप्ट कई कमांड की अनुमति देती है जो मैन्युअल रूप से एक कमांड-लाइन इंटरफ़ेस पर स्वचालित रूप से निष्पादित होने के लिए दर्ज की जाएगी, और उपयोगकर्ता द्वारा अनुक्रम के प्रत्येक चरण को ट्रिगर करने के लिए प्रतीक्षा किए बिना। उदाहरण के लिए, तीन सी स्रोत कोड फ़ाइलों वाली एक निर्देशिका में, उनमें से अंतिम प्रोग्राम बनाने के लिए आवश्यक चार आदेशों को मैन्युअल रूप से चलाने के बजाय, कोई इसके बजाय POSIX- संगत शेल के लिए एक स्क्रिप्ट बना सकता है, जिसका नाम यहां दिया गया है 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> कमांड को केवल JPEG छवियों से भरी संपूर्ण निर्देशिका पर चलाया जा सकता है /home/username/bin/jpg2png *.jpg


प्रोग्रामिंग

कई आधुनिक शेल भी विभिन्न विशेषताओं की आपूर्ति करते हैं जो सामान्यतः केवल अधिक परिष्कृत सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषाओं में पाई जाती हैं, जैसे नियंत्रण-प्रवाह निर्माण, चर, टिप्पणी (कंप्यूटर प्रोग्रामिंग), सरणियाँ, सबरूटीन्स और इसी तरह। उपलब्ध सुविधाओं के इस प्रकार के साथ, शैल स्क्रिप्ट के रूप में यथोचित परिष्कृत अनुप्रयोगों को लिखना संभव है। हालाँकि, वे अभी भी इस तथ्य से सीमित हैं कि अधिकांश शेल भाषाओं में डेटा टाइपिंग प्रणाली, क्लासेस, थ्रेडिंग, जटिल गणित और अन्य सामान्य पूर्ण भाषा सुविधाओं के लिए बहुत कम या कोई समर्थन नहीं है, और सामान्यतः संकलित कोड या व्याख्या की गई भाषाओं की तुलना में बहुत धीमी होती हैं। प्रदर्शन लक्ष्य के रूप में गति के साथ।

मानक यूनिक्स उपकरण sed और awk शेल प्रोग्रामिंग के लिए अतिरिक्त क्षमताएं प्रदान करते हैं; पर्ल को शेल स्क्रिप्ट में भी एम्बेड किया जा सकता है जैसे कि अन्य स्क्रिप्टिंग भाषाओं जैसे टीसीएल। पर्ल और टीसीएल ग्राफिक्स टूलकिट के साथ भी आते हैं।

विशिष्ट पॉज़िक्स स्क्रिप्टिंग भाषाएँ

सामान्यतः UNIX, Linux, और POSIX- संगत ऑपरेटिंग प्रणाली इंस्टॉलेशन पर पाई जाने वाली स्क्रिप्टिंग भाषाओं में सम्मिलित हैं:

  • के शेल (ksh) ksh88, Korn Shell '93 और अन्य जैसे कई संभावित संस्करणों में।
  • बॉर्न शेल (sh), उपयोग में आने वाले सबसे पुराने गोले में से एक
  • सी खोल (csh)
  • बैश (यूनिक्स शेल) (bash)
  • tclsh, एक शेल जो Tcl/Tk प्रोग्रामिंग भाषा का एक मुख्य घटक है।
  • इच्छा (खोल) एक जीयूआई-आधारित टीसीएल/टीसी खोल है।

C और Tcl शेल्स का सिंटैक्स उक्त प्रोग्रामिंग भाषाओं के समान है, और कॉर्न शेल्स और बैश बॉर्न शेल के विकास हैं, जो ALGOL भाषा पर आधारित है, जिसमें कई अन्य तत्वों को भी जोड़ा गया है।[4] दूसरी ओर, विभिन्न शेल प्लस टूल जैसे awk, sed, grep, और BASIC, Lisp (प्रोग्रामिंग लैंग्वेज), C (प्रोग्रामिंग लैंग्वेज) और आगे पर्ल प्रोग्रामिंग लैंग्वेज में योगदान दिया।[5] अन्य गोले जो मशीन पर या डाउनलोड और/या खरीद के लिए उपलब्ध हो सकते हैं उनमें सम्मिलित हैं:

पायथन (प्रोग्रामिंग लैंग्वेज), रूबी (प्रोग्रामिंग भाषा) , सी (प्रोग्रामिंग लैंग्वेज), जावा (प्रोग्रामिंग भाषा) , पर्ल, पास्कल (प्रोग्रामिंग भाषा) , Rexx आदि पर आधारित संबंधित प्रोग्राम भी विभिन्न रूपों में व्यापक रूप से उपलब्ध हैं। एक अन्य सामान्य खोल है पुराना खोल (osh), जिसका मैनुअल पेज बताता है कि यह छठे संस्करण UNIX से मानक कमांड दुभाषिया का एक उन्नत, पिछड़ा-संगत पोर्ट है।[6] तथाकथित दूरस्थ गोले जैसे

रिमोट प्रणाली पर एक अधिक जटिल खोल चलाने के लिए वास्तव में केवल उपकरण हैं और विशेषताओं की तरह कोई 'खोल' नहीं है।

अन्य स्क्रिप्टिंग भाषाएं

कई शक्तिशाली स्क्रिप्टिंग भाषाओं को उन कार्यों के लिए पेश किया गया है जो बहुत बड़े या जटिल हैं जिन्हें साधारण शेल स्क्रिप्ट के साथ आराम से संभाला जा सकता है, लेकिन जिसके लिए एक स्क्रिप्ट के फायदे वांछनीय हैं और एक पूर्ण विकसित, संकलित प्रोग्रामिंग भाषा का विकास नुकसानदेह होगा . स्क्रिप्टिंग भाषाओं को उच्च-स्तरीय प्रोग्रामिंग भाषाओं से भिन्न करने वाली बारीकियों पर बहस का एक लगातार स्रोत है, लेकिन, सामान्यतः बोलना, एक स्क्रिप्टिंग भाषा वह है जिसके लिए एक दुभाषिया की आवश्यकता होती है।


जीवन चक्र

शेल स्क्रिप्ट अक्सर सॉफ्टवेयर विकास में एक प्रारंभिक चरण के रूप में काम करते हैं, और बाद में एक भिन्न अंतर्निहित कार्यान्वयन के लिए रूपांतरण के अधीन होते हैं, सामान्यतः पर्ल, पायथन (प्रोग्रामिंग भाषा), या सी (प्रोग्रामिंग भाषा) में परिवर्तित हो जाते हैं। दुभाषिया निर्देश फ़ाइल नाम एक्सटेंशन के रूप में उजागर होने के बजाय कार्यान्वयन विवरण को स्क्रिप्ट के अंदर पूरी तरह से छिपाने की अनुमति देता है, और अंतिम उपयोगकर्ताओं पर कोई प्रभाव डाले बिना विभिन्न भाषाओं में निर्बाध पुनर्कार्यान्वयन प्रदान करता है।

जबकि .sh फाइल एक्सटेंशन वाली फ़ाइलें सामान्यतः किसी प्रकार की शेल स्क्रिप्ट होती हैं, अधिकांश शेल स्क्रिप्ट में कोई फ़ाइल नाम एक्सटेंशन नहीं होता है।[7][8][9][10]


फायदे और नुकसान

शेल स्क्रिप्ट लिखने का शायद सबसे बड़ा फायदा यह है कि कमांड और सिंटैक्स बिल्कुल वही होते हैं जो सीधे कमांड-लाइन पर दर्ज किए जाते हैं। प्रोग्रामर को पूरी तरह से भिन्न सिंटैक्स पर स्विच करने की ज़रूरत नहीं है, क्योंकि अगर स्क्रिप्ट किसी दूसरी भाषा में लिखी गई थी, या अगर एक संकलित भाषा का इस्तेमाल किया गया था।

अक्सर, अन्य प्रोग्रामिंग भाषाओं में समतुल्य कोड लिखने की तुलना में शेल स्क्रिप्ट लिखना बहुत तेज होता है। कई लाभों में आसान प्रोग्राम या फ़ाइल चयन, त्वरित प्रारंभ और इंटरैक्टिव डिबगिंग सम्मिलित हैं। एक शेल स्क्रिप्ट का उपयोग उपस्थिता कार्यक्रमों के आसपास एक अनुक्रमण और निर्णय लेने की कड़ी प्रदान करने के लिए किया जा सकता है, और मध्यम आकार की स्क्रिप्ट के लिए एक संकलन कदम की अनुपस्थिति एक फायदा है। इंटरप्रिटेटिव रनिंग डिबगिंग कोड को स्क्रिप्ट में लिखना आसान बनाता है और बग्स का पता लगाने और उन्हें ठीक करने के लिए इसे फिर से चलाता है। गैर-विशेषज्ञ उपयोगकर्ता प्रोग्राम के व्यवहार को अनुकूलित करने के लिए स्क्रिप्टिंग का उपयोग कर सकते हैं, और शेल स्क्रिप्टिंग मल्टीप्रोसेसिंग के लिए कुछ सीमित गुंजाइश प्रदान करती है।

दूसरी ओर, शेल स्क्रिप्टिंग महंगी त्रुटियों से ग्रस्त है। असावधानीवश टंकण त्रुटियाँ जैसे rm -rf * / (इरादे के बजाय rm -rf */) यूनिक्स समुदाय में लोकगीत हैं; एक अतिरिक्त स्थान कमांड को एक से परिवर्तित करता है जो वर्तमान निर्देशिका में निहित सभी उपनिर्देशिकाओं को हटा देता है, जो फ़ाइल प्रणाली की रूट निर्देशिका से सब कुछ हटा देता है। इसी तरह की समस्याएं रूपांतरित हो सकती हैं cp और mv खतरनाक हथियारों में, और का दुरुपयोग > रीडायरेक्ट फ़ाइल की सामग्री को हटा सकता है। यह इस तथ्य से और अधिक समस्याग्रस्त हो जाता है कि कई यूनिक्स आदेश केवल एक अक्षर से नाम में भिन्न होते हैं: cp, cd, dd, df, वगैरह।

एक और महत्वपूर्ण नुकसान धीमी गति से निष्पादन की गति और निष्पादित लगभग हर शेल कमांड के लिए एक नई प्रक्रिया शुरू करने की आवश्यकता है। जब एक पाइपलाइन (कंप्यूटिंग) स्थापित करके एक स्क्रिप्ट का काम पूरा किया जा सकता है जिसमें कुशल फ़िल्टर (सॉफ़्टवेयर) कमांड अधिकांश काम करते हैं, तो मंदी कम हो जाती है, लेकिन एक जटिल स्क्रिप्ट सामान्यतः एक पारंपरिक संकलित प्रोग्राम की तुलना में धीमी परिमाण के कई ऑर्डर होते हैं। जो समान कार्य करता है।

विभिन्न प्लेटफॉर्मों के बीच अनुकूलता संबंधी समस्याएं भी हैं। पर्ल के निर्माता लैरी वॉल ने प्रसिद्ध रूप से लिखा है कि शेल स्क्रिप्ट की तुलना में शेल को पोर्ट करना आसान है।[11] इसी तरह, अधिक जटिल स्क्रिप्ट स्वयं शेल स्क्रिप्टिंग भाषा की सीमाओं में चल सकती हैं; सीमाएँ गुणवत्ता कोड लिखना मुश्किल बनाती हैं, और मूल शेल भाषा के साथ समस्याओं को सुधारने के लिए विभिन्न शेल्स द्वारा एक्सटेंशन समस्या को बदतर बना सकते हैं।[12] कुछ स्क्रिप्ट भाषाओं का उपयोग करने के कई नुकसान प्रोग्रामिंग भाषा सिंटैक्स या कार्यान्वयन के भीतर डिज़ाइन की खामियों के कारण होते हैं, और जरूरी नहीं कि पाठ-आधारित कमांड-लाइन के उपयोग से लगाए गए हों; ऐसे कई गोले हैं जो अन्य शेल प्रोग्रामिंग भाषाओं का उपयोग करते हैं या यहाँ तक कि Scsh (जो योजना (प्रोग्रामिंग भाषा) का उपयोग करता है) जैसी पूर्ण विकसित भाषाओं का उपयोग करते हैं।

स्क्रिप्टिंग भाषाओं के बीच इंटरऑपरेबिलिटी

विभिन्न स्क्रिप्टिंग भाषाएं कई सामान्य तत्वों को साझा कर सकती हैं, मुख्य रूप से POSIX आधारित होने के कारण, और कुछ शैल विभिन्न शैलों का अनुकरण करने के लिए मोड प्रदान करते हैं। यह एक स्क्रिप्टिंग भाषा में लिखी गई शेल स्क्रिप्ट को दूसरे में अनुकूलित करने की अनुमति देता है।

इसका एक उदाहरण बैश है, जो बॉर्न शेल के समान व्याकरण और सिंटैक्स प्रदान करता है, और जो एक POSIX-अनुपालन मोड भी प्रदान करता है।[13] जैसे, बॉर्न शेल के लिए लिखी गई अधिकांश शेल स्क्रिप्ट्स को BASH में चलाया जा सकता है, लेकिन हो सकता है कि इसका उल्टा सही न हो क्योंकि BASH के एक्सटेंशन हैं जो बॉर्न शेल में उपस्थित नहीं हैं। जैसे, इन विशेषताओं को विक्ट: बैशिज्म के रूप में जाना जाता है।[14]


अन्य ऑपरेटिंग प्रणाली पर शेल स्क्रिप्टिंग

सिग्विन, एमकेएस टूलकिट, इंटरिक्स (जो कि यूनिक्स के लिए माइक्रोसॉफ्ट विंडोज सेवाओं में उपलब्ध है), हैमिल्टन सी खोल , यूडब्ल्यूआईएन (विंडोज़ के लिए एटी एंड टी यूनिक्स) और अन्य जैसे इंटरऑपरेबिलिटी सॉफ़्टवेयर विंडोज़ एनटी चलाने वाली मशीनों पर यूनिक्स शैल प्रोग्राम चलाने की अनुमति देते हैं। इसके उत्तराधिकारी, MS-DOS-Windows 95 शाखा पर कार्यक्षमता के कुछ नुकसान के साथ-साथ OS/2 के लिए पहले के MKS टूलकिट संस्करण। विंडोज प्रकार के ऑपरेटिंग प्रणाली के लिए कम से कम तीन डीसीएल कार्यान्वयन - एक्सएलएनटी के अलावा, एक बहु-उपयोग वाली स्क्रिप्टिंग भाषा पैकेज जो कमांड शेल, विंडोज स्क्रिप्ट होस्ट और कॉमन गेटवे इंटरफ़ेस प्रोग्रामिंग के साथ प्रयोग किया जाता है - इन प्रणालीों के लिए भी उपलब्ध हैं। मैक ओएस एक्स और उसके बाद के संस्करण भी यूनिक्स जैसे हैं।[15] पूर्वोक्त उपकरणों के अलावा, कुछ POSIX और OS/2 कार्यक्षमता का उपयोग Windows NT ऑपरेटिंग प्रणाली श्रृंखला के संबंधित पर्यावरणीय उप-प्रणालियों के साथ-साथ Windows 2000 तक भी किया जा सकता है। एक तीसरा, 16-बिट कंप्यूटिंग | 16-बिट सबप्रणाली जिसे अक्सर MS-DOS सबप्रणाली कहा जाता है, उपरोक्त MS-DOS बैच फ़ाइलों को चलाने के लिए इन ऑपरेटिंग प्रणालीों के साथ प्रदान किए गए Command.com का उपयोग करता है।[16] कंसोल विकल्प 4DOS, 4OS2, FreeDOS, पीटर नॉर्टन का NDOS और टेक कमांड कंसोल)|4NT / Take Command जो Windows NT-style cmd.exe, MS-DOS/Windows 95 बैच फ़ाइलों (Command.com द्वारा संचालित) में कार्यक्षमता जोड़ता है। , OS/2 के cmd.exe, और 4NT क्रमशः उन शेल के समान हैं जो वे बढ़ाते हैं और Windows स्क्रिप्ट होस्ट के साथ अधिक एकीकृत होते हैं, जो तीन पूर्व-स्थापित इंजनों, VBScript, JScript, और अनुप्रयोगों के लिए Visual Basic के साथ आता है और जिसके लिए Rexx, Perl, Python, Ruby, और Tcl के साथ कई तृतीय-पक्ष इंजन जोड़े जा सकते हैं, जिनके 4NT और संबंधित कार्यक्रमों में पूर्व-निर्धारित कार्य हैं। PC DOS काफी हद तक MS-DOS के समान है, जबकि DR DOS अधिक भिन्न है। Windows NT के पुराने संस्करण OS/2 सबप्रणाली द्वारा 4OS2 के समकालीन संस्करणों को चलाने में सक्षम हैं।

परिभाषा के अनुसार, स्क्रिप्टिंग भाषाएँ विस्तारित की जा सकती हैं; उदाहरण के लिए, एक MS-DOS/Windows 95/98 और Windows NT प्रकार के प्रणाली शेल/बैच प्रोग्राम को KiXtart, QBasic, विभिन्न BASIC, Rexx, Perl, और Python (प्रोग्रामिंग लैंग्वेज) कार्यान्वयन, Windows स्क्रिप्ट होस्ट जैसे टूल कॉल करने की अनुमति देते हैं। और इसके स्थापित इंजन। यूनिक्स और अन्य पॉज़िक्स-संगत प्रणाली पर, शेल स्क्रिप्ट की स्ट्रिंग और न्यूमेरिक प्रोसेसिंग क्षमता को बढ़ाने के लिए awk और sed का उपयोग किया जाता है। Tcl, Perl, Rexx, और Python में ग्राफिक्स टूलकिट हैं और शेल स्क्रिप्ट के लिए फ़ंक्शन और प्रक्रियाओं को कोड करने के लिए उपयोग किया जा सकता है जो एक गति अड़चन पैदा करता है (C, फोरट्रान, असेंबली लैंग्वेज और c अभी भी बहुत तेज़ हैं) और कार्यक्षमता जोड़ने के लिए जो शेल में उपलब्ध नहीं है भाषा जैसे सॉकेट और अन्य कनेक्टिविटी फ़ंक्शंस, हेवी-ड्यूटी टेक्स्ट प्रोसेसिंग, अगर कॉलिंग स्क्रिप्ट में वे क्षमताएं नहीं हैं, तो नंबरों के साथ काम करना, सेल्फ-राइटिंग और सेल्फ-मॉडिफाइंग कोड, प्रत्यावर्तन जैसी तकनीकें, डायरेक्ट मेमोरी एक्सेस, विभिन्न प्रकार की छँटाई और अधिक, जो मुख्य लिपि में कठिन या असंभव हैं, इत्यादि। एप्लिकेशन और VBScript के लिए Visual Basic का उपयोग स्प्रेडशीट, डेटाबेस, सभी प्रकार के स्क्रिप्ट योग्य प्रोग्राम, दूरसंचार सॉफ़्टवेयर, डेवलपमेंट टूल, ग्राफ़िक्स टूल और अन्य सॉफ़्टवेयर जैसी चीज़ों को नियंत्रित करने और संचार करने के लिए किया जा सकता है, जिन्हें घटक वस्तु मॉडल के माध्यम से एक्सेस किया जा सकता है।

यह भी देखें

  • गोंद कोड
  • दुभाषिया निर्देश
  • शेबांग (यूनिक्स) | शेबांग प्रतीक (#!)
  • यूनिक्स गोले
  • पावरशेल
  • विंडोज स्क्रिप्ट होस्ट

संदर्भ

  1. 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. 2.0 2.1 जॉनसन, क्रिस (2009)। [1] प्रो बैश प्रोग्रामिंग: लिनक्स शेल की स्क्रिप्टिंग, Apress, 27 सितंबर, 2019 को पुनः प्राप्त। ISBN 9781430219989
  3. "exec(3p) – POSIX Programmer's Manual". Retrieved 2020-07-24.
  4. Unix Shells By Example, pp 7-10,
  5. Programming Perl, 5th Edition, preface
  6. "डिश - manned.org". manned.org. Retrieved 2019-01-16.
  7. Robbins, Arnold; Hannah, Elbert; Lamb, Linda (2008). Learning the vi and Vim Editors. p. 205. ISBN 9781449313258.
  8. Easttom, Chuck (2012). Essential Linux Administration:: A Comprehensive Guide for Beginners. p. 228. ISBN 978-1435459571.
  9. 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(#!).
  10. 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.
  11. Larry Wall (January 4, 1991). "अंतिम तर्क ढूँढना". Newsgroupcomp.unix.shell. Retrieved January 5, 2023.
  12. Christiansen, Tom. "सीएसएच प्रोग्रामिंग को हानिकारक माना जाता है".
  13. "Major Differences From The Bourne Shell".
  14. "24 Bashism To Avoid for POSIX-Compliant Shell Scripts". 18 May 2022.
  15. MSDN[not specific enough to verify]
  16. Windows NT 4 Workstation Resource Kit


बाहरी संबंध