शैल स्क्रिप्ट: Difference between revisions
No edit summary |
No edit summary |
||
Line 34: | Line 34: | ||
यहां, प्रथम पंक्ति स्क्रिप्टिंग भाषा के विन्यास विकल्प का उपयोग करती है, यह संकेत देने के लिए कि किस दुभाषिया को शेष स्क्रिप्ट को निष्पादित करना चाहिए, और दूसरी पंक्ति फ़ाइल प्रारूप संकेतकों, कॉलम, सभी फाइलों (कोई भी त्यागा नहीं) के विकल्पों के साथ सूची बनाती है, <code>LC_COLLATE=C</code> ऊपरी और निचले विषय को साथ फोल्ड नहीं करने के लिए त्रुटिपूर्ण संयोजन आदेश सेट करता है, नामों में विराम चिह्नों को अनदेखा करने के पार्श्व प्रभाव के रूप में सामान्य फ़ाइल नामों के साथ मिश्रित [[ dotfile |डॉटफ़ाइल]] नहीं करता है (डॉटफाइल सामान्यतः केवल तभी दिखाए जाते हैं जब <code>-a</code> जैसे विकल्प का उपयोग किया जाता है), और <code>"$@"</code> दिए गए किसी भी पैरामीटर को <code>l</code> ls के पैरामीटर के रूप में पारित करने कारण बनता है, जिससे सभी सामान्य विकल्प और ls को ज्ञात अन्य [[ प्रोग्रामिंग भाषा सिंटैक्स ]] अभी भी उपयोग किए जा सकें। | यहां, प्रथम पंक्ति स्क्रिप्टिंग भाषा के विन्यास विकल्प का उपयोग करती है, यह संकेत देने के लिए कि किस दुभाषिया को शेष स्क्रिप्ट को निष्पादित करना चाहिए, और दूसरी पंक्ति फ़ाइल प्रारूप संकेतकों, कॉलम, सभी फाइलों (कोई भी त्यागा नहीं) के विकल्पों के साथ सूची बनाती है, <code>LC_COLLATE=C</code> ऊपरी और निचले विषय को साथ फोल्ड नहीं करने के लिए त्रुटिपूर्ण संयोजन आदेश सेट करता है, नामों में विराम चिह्नों को अनदेखा करने के पार्श्व प्रभाव के रूप में सामान्य फ़ाइल नामों के साथ मिश्रित [[ dotfile |डॉटफ़ाइल]] नहीं करता है (डॉटफाइल सामान्यतः केवल तभी दिखाए जाते हैं जब <code>-a</code> जैसे विकल्प का उपयोग किया जाता है), और <code>"$@"</code> दिए गए किसी भी पैरामीटर को <code>l</code> ls के पैरामीटर के रूप में पारित करने कारण बनता है, जिससे सभी सामान्य विकल्प और ls को ज्ञात अन्य [[ प्रोग्रामिंग भाषा सिंटैक्स ]] अभी भी उपयोग किए जा सकें। | ||
उपयोगकर्ता तब | उपयोगकर्ता तब सबसे अधिक उपयोग की जाने वाली शॉर्ट लिस्टिंग के लिए <code>l</code>का उपयोग कर सकता था। | ||
शेल स्क्रिप्ट का उदाहरण जिसे शॉर्टकट के रूप में उपयोग किया जा सकता है, किसी दिए गए निर्देशिका के अंदर सभी फाइलों और निर्देशिकाओं की सूची को प्रिंट करना होगा। | |||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Line 44: | Line 44: | ||
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> कमांड का उपयोग करने का प्रयास करें। | ||
Line 63: | Line 63: | ||
=== सामान्यीकरण === | === सामान्यीकरण === | ||
भिन्न-भिन्न कार्यों के लिए सरल बैच कार्य असामान्य नहीं हैं, किन्तु शेल लूप, परीक्षण और चर का उपयोग करने से उपयोगकर्ताओं को अधिक लचीलापन मिलता है। जेपीईजी छवियों को पीएनजी छवियों में कनवर्ट करने के लिए एक पॉज़िक्स एसएच स्क्रिप्ट, जहां छवि नाम कमांड लाइन पर प्रदान किए जाते हैं-संभवतः वाइल्डकार्ड के माध्यम से- स्क्रिप्ट के | भिन्न-भिन्न कार्यों के लिए सरल बैच कार्य असामान्य नहीं हैं, किन्तु शेल लूप, परीक्षण और चर का उपयोग करने से उपयोगकर्ताओं को अधिक लचीलापन मिलता है। जेपीईजी छवियों को पीएनजी छवियों में कनवर्ट करने के लिए एक पॉज़िक्स एसएच स्क्रिप्ट, जहां छवि नाम कमांड लाइन पर प्रदान किए जाते हैं-संभवतः वाइल्डकार्ड के माध्यम से- स्क्रिप्ट के अंदर सूचीबद्ध होने के बजाय, इस फ़ाइल के साथ बनाया जा सकता है, सामान्यतः फ़ाइल में सहेजा जाता है <code>/home/''username''/bin/jpg2png</code> | ||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Line 160: | Line 160: | ||
== फायदे और नुकसान == | == फायदे और नुकसान == | ||
शेल स्क्रिप्ट लिखने का शायद सबसे बड़ा फायदा यह है कि कमांड और सिंटैक्स बिल्कुल वही होते हैं जो सीधे कमांड-लाइन पर दर्ज किए जाते हैं। प्रोग्रामर को पूरी प्रकार से भिन्न सिंटैक्स पर स्विच करने की ज़रूरत नहीं है, क्योंकि अगर स्क्रिप्ट किसी दूसरी भाषा में लिखी गई थी, या अगर एक संकलित भाषा का | शेल स्क्रिप्ट लिखने का शायद सबसे बड़ा फायदा यह है कि कमांड और सिंटैक्स बिल्कुल वही होते हैं जो सीधे कमांड-लाइन पर दर्ज किए जाते हैं। प्रोग्रामर को पूरी प्रकार से भिन्न सिंटैक्स पर स्विच करने की ज़रूरत नहीं है, क्योंकि अगर स्क्रिप्ट किसी दूसरी भाषा में लिखी गई थी, या अगर एक संकलित भाषा का उपयोग किया गया था। | ||
अक्सर, अन्य प्रोग्रामिंग भाषाओं में समतुल्य कोड लिखने की तुलना में शेल स्क्रिप्ट लिखना बहुत तेज होता है। कई लाभों में आसान प्रोग्राम या फ़ाइल चयन, त्वरित प्रारंभ और इंटरैक्टिव डिबगिंग सम्मिलित हैं। एक शेल स्क्रिप्ट का उपयोग उपस्थिता कार्यक्रमों के आसपास एक अनुक्रमण और निर्णय लेने की कड़ी प्रदान करने के लिए किया जा सकता है, और मध्यम आकार की स्क्रिप्ट के लिए एक संकलन कदम की अनुपस्थिति एक फायदा है। इंटरप्रिटेटिव रनिंग डिबगिंग कोड को स्क्रिप्ट में लिखना आसान बनाता है और बग्स का पता लगाने और उन्हें ठीक करने के लिए इसे फिर से चलाता है। गैर-विशेषज्ञ उपयोगकर्ता प्रोग्राम के व्यवहार को अनुकूलित करने के लिए स्क्रिप्टिंग का उपयोग कर सकते हैं, और शेल स्क्रिप्टिंग मल्टीप्रोसेसिंग के लिए कुछ सीमित गुंजाइश प्रदान करती है। | अक्सर, अन्य प्रोग्रामिंग भाषाओं में समतुल्य कोड लिखने की तुलना में शेल स्क्रिप्ट लिखना बहुत तेज होता है। कई लाभों में आसान प्रोग्राम या फ़ाइल चयन, त्वरित प्रारंभ और इंटरैक्टिव डिबगिंग सम्मिलित हैं। एक शेल स्क्रिप्ट का उपयोग उपस्थिता कार्यक्रमों के आसपास एक अनुक्रमण और निर्णय लेने की कड़ी प्रदान करने के लिए किया जा सकता है, और मध्यम आकार की स्क्रिप्ट के लिए एक संकलन कदम की अनुपस्थिति एक फायदा है। इंटरप्रिटेटिव रनिंग डिबगिंग कोड को स्क्रिप्ट में लिखना आसान बनाता है और बग्स का पता लगाने और उन्हें ठीक करने के लिए इसे फिर से चलाता है। गैर-विशेषज्ञ उपयोगकर्ता प्रोग्राम के व्यवहार को अनुकूलित करने के लिए स्क्रिप्टिंग का उपयोग कर सकते हैं, और शेल स्क्रिप्टिंग मल्टीप्रोसेसिंग के लिए कुछ सीमित गुंजाइश प्रदान करती है। | ||
Line 170: | Line 170: | ||
विभिन्न प्लेटफॉर्मों के बीच अनुकूलता संबंधी समस्याएं भी हैं। पर्ल के निर्माता [[लैरी वॉल]] ने प्रसिद्ध रूप से लिखा है कि शेल स्क्रिप्ट की तुलना में शेल को पोर्ट करना आसान है।<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> | ||
इसी प्रकार, अधिक जटिल स्क्रिप्ट स्वयं शेल स्क्रिप्टिंग भाषा की सीमाओं में चल सकती हैं; सीमाएँ गुणवत्ता कोड लिखना मुश्किल बनाती हैं, और मूल शेल भाषा के साथ समस्याओं को सुधारने के लिए विभिन्न शेल्स द्वारा एक्सटेंशन समस्या को बदतर बना सकते हैं।<ref>{{cite web|url=https://www.ooblick.com/text/CshProgrammingConsideredHarmful.html|title=सीएसएच प्रोग्रामिंग को हानिकारक माना जाता है|author=Christiansen, Tom}}</ref> | इसी प्रकार, अधिक जटिल स्क्रिप्ट स्वयं शेल स्क्रिप्टिंग भाषा की सीमाओं में चल सकती हैं; सीमाएँ गुणवत्ता कोड लिखना मुश्किल बनाती हैं, और मूल शेल भाषा के साथ समस्याओं को सुधारने के लिए विभिन्न शेल्स द्वारा एक्सटेंशन समस्या को बदतर बना सकते हैं।<ref>{{cite web|url=https://www.ooblick.com/text/CshProgrammingConsideredHarmful.html|title=सीएसएच प्रोग्रामिंग को हानिकारक माना जाता है|author=Christiansen, Tom}}</ref> | ||
कुछ स्क्रिप्ट भाषाओं का उपयोग करने के कई नुकसान प्रोग्रामिंग भाषा सिंटैक्स या कार्यान्वयन के | कुछ स्क्रिप्ट भाषाओं का उपयोग करने के कई नुकसान प्रोग्रामिंग भाषा सिंटैक्स या कार्यान्वयन के अंदर डिज़ाइन की खामियों के कारण होते हैं, और जरूरी नहीं कि पाठ-आधारित कमांड-लाइन के उपयोग से लगाए गए हों; ऐसे कई गोले हैं जो अन्य शेल प्रोग्रामिंग भाषाओं का उपयोग करते हैं या यहाँ तक कि [[Scsh]] (जो [[योजना (प्रोग्रामिंग भाषा)]] का उपयोग करता है) जैसी पूर्ण विकसित भाषाओं का उपयोग करते हैं। | ||
== स्क्रिप्टिंग भाषाओं के बीच इंटरऑपरेबिलिटी == | == स्क्रिप्टिंग भाषाओं के बीच इंटरऑपरेबिलिटी == |
Revision as of 12:54, 9 June 2023
शेल स्क्रिप्ट कंप्यूटर प्रोग्राम है जिसे यूनिक्स खोल , कमांड-लाइन दुभाषिया द्वारा चलाने के लिए डिज़ाइन किया गया है।[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 "$@"
यहां, प्रथम पंक्ति स्क्रिप्टिंग भाषा के विन्यास विकल्प का उपयोग करती है, यह संकेत देने के लिए कि किस दुभाषिया को शेष स्क्रिप्ट को निष्पादित करना चाहिए, और दूसरी पंक्ति फ़ाइल प्रारूप संकेतकों, कॉलम, सभी फाइलों (कोई भी त्यागा नहीं) के विकल्पों के साथ सूची बनाती है, LC_COLLATE=C
ऊपरी और निचले विषय को साथ फोल्ड नहीं करने के लिए त्रुटिपूर्ण संयोजन आदेश सेट करता है, नामों में विराम चिह्नों को अनदेखा करने के पार्श्व प्रभाव के रूप में सामान्य फ़ाइल नामों के साथ मिश्रित डॉटफ़ाइल नहीं करता है (डॉटफाइल सामान्यतः केवल तभी दिखाए जाते हैं जब -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] अन्य गोले जो मशीन पर या डाउनलोड और/या खरीद के लिए उपलब्ध हो सकते हैं उनमें सम्मिलित हैं:
- अल्मक्विस्ट खोल (
ash
) - पावरशेल (
msh
) - जेड खोल (
zsh
, एक विशेष रूप से सामान्य उन्नत कोर्नशेल) - टेनेक्स सी शेल (
tcsh
).
पायथन (प्रोग्रामिंग लैंग्वेज), रूबी (प्रोग्रामिंग भाषा) , सी (प्रोग्रामिंग लैंग्वेज), जावा (प्रोग्रामिंग भाषा) , पर्ल, पास्कल (प्रोग्रामिंग भाषा) , Rexx आदि पर आधारित संबंधित प्रोग्राम भी विभिन्न रूपों में व्यापक रूप से उपलब्ध हैं। एक अन्य सामान्य खोल है पुराना खोल (osh
), जिसका मैनुअल पेज बताता है कि यह छठे संस्करण UNIX से मानक कमांड दुभाषिया का एक उन्नत, पिछड़ा-संगत पोर्ट है।[6]
तथाकथित दूरस्थ गोले जैसे
- एक रिमोट शेल (
rsh
) - एक सुरक्षित खोल (
ssh
)
रिमोट प्रणाली पर एक अधिक जटिल खोल चलाने के लिए वास्तव में केवल उपकरण हैं और विशेषताओं की प्रकार कोई 'खोल' नहीं है।
अन्य स्क्रिप्टिंग भाषाएं
कई शक्तिशाली स्क्रिप्टिंग भाषाओं को उन कार्यों के लिए पेश किया गया है जो बहुत बड़े या जटिल हैं जिन्हें साधारण शेल स्क्रिप्ट के साथ आराम से संभाला जा सकता है, किन्तु जिसके लिए एक स्क्रिप्ट के फायदे वांछनीय हैं और एक पूर्ण विकसित, संकलित प्रोग्रामिंग भाषा का विकास नुकसानदेह होगा . स्क्रिप्टिंग भाषाओं को उच्च-स्तरीय प्रोग्रामिंग भाषाओं से भिन्न करने वाली बारीकियों पर बहस का एक लगातार स्रोत है, किन्तु, सामान्यतः बोलना, एक स्क्रिप्टिंग भाषा वह है जिसके लिए एक दुभाषिया की आवश्यकता होती है।
जीवन चक्र
शेल स्क्रिप्ट अक्सर सॉफ्टवेयर विकास में एक प्रारंभिक चरण के रूप में काम करते हैं, और बाद में एक भिन्न अंतर्निहित कार्यान्वयन के लिए रूपांतरण के अधीन होते हैं, सामान्यतः पर्ल, पायथन (प्रोग्रामिंग भाषा), या सी (प्रोग्रामिंग भाषा) में परिवर्तित हो जाते हैं। दुभाषिया निर्देश फ़ाइल नाम एक्सटेंशन के रूप में उजागर होने के बजाय कार्यान्वयन विवरण को स्क्रिप्ट के अंदर पूरी प्रकार से छिपाने की अनुमति देता है, और अंतिम उपयोगकर्ताओं पर कोई प्रभाव डाले बिना विभिन्न भाषाओं में निर्बाध पुनर्कार्यान्वयन प्रदान करता है।
जबकि .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 का उपयोग स्प्रेडशीट, डेटाबेस, सभी प्रकार के स्क्रिप्ट योग्य प्रोग्राम, दूरसंचार सॉफ़्टवेयर, डेवलपमेंट टूल, ग्राफ़िक्स टूल और अन्य सॉफ़्टवेयर जैसी चीज़ों को नियंत्रित करने और संचार करने के लिए किया जा सकता है, जिन्हें घटक वस्तु मॉडल के माध्यम से एक्सेस किया जा सकता है।
यह भी देखें
- गोंद कोड
- दुभाषिया निर्देश
- शेबांग (यूनिक्स) | शेबांग प्रतीक (#!)
- यूनिक्स गोले
- पावरशेल
- विंडोज स्क्रिप्ट होस्ट
संदर्भ
- ↑ 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