शैल स्क्रिप्ट: Difference between revisions
No edit summary |
No edit summary |
||
Line 158: | Line 158: | ||
== लाभ और | == लाभ और हानि == | ||
शेल स्क्रिप्ट लिखने का | शेल स्क्रिप्ट लिखने का संभवता सबसे बड़ा लाभ यह है कि कमांड और सिंटैक्स वही होते हैं जो सीधे कमांड-लाइन पर अंकित किए जाते हैं। प्रोग्रामर को पूर्ण रूप से भिन्न सिंटैक्स पर स्विच करने की ज़रूरत नहीं है, क्योंकि यदि स्क्रिप्ट किसी दूसरी भाषा में लिखी गई थी, या यदि संकलित भाषा का उपयोग किया गया था। | ||
प्रायः | प्रायः अन्य प्रोग्रामिंग भाषाओं में समतुल्य कोड लिखने की तुलना में शेल स्क्रिप्ट लिखना अत्यधिक तीव्र होता है। कई लाभों में सरल प्रोग्राम या फ़ाइल चयन, त्वरित प्रारंभ और इंटरैक्टिव डिबगिंग सम्मिलित हैं। शेल स्क्रिप्ट का उपयोग उपस्थिता कार्यक्रमों के निकटतम अनुक्रमण और निर्णय लेने की कड़ी प्रदान करने के लिए किया जा सकता है, और मध्यम आकार की स्क्रिप्ट के लिए संकलन कदम की अनुपस्थिति लाभ है। इंटरप्रिटेटिव रनिंग डिबगिंग कोड को स्क्रिप्ट में लिखना सरल बनाता है और बग्स की जानकारी प्राप्त करने और उन्हें ठीक करने के लिए इसे तत्पश्चात से चलाता है। गैर-विशेषज्ञ उपयोगकर्ता प्रोग्राम के व्यवहार को अनुकूलित करने के लिए स्क्रिप्टिंग का उपयोग कर सकते हैं, और शेल स्क्रिप्टिंग बहु प्रसंस्करण के लिए कुछ सीमित स्थान प्रदान करती है। | ||
दूसरी ओर, शेल स्क्रिप्टिंग महंगी त्रुटियों से ग्रस्त है। असावधानीवश टंकण त्रुटियाँ जैसे <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>, वगैरह। | ||
Line 167: | Line 167: | ||
एक और महत्वपूर्ण नुकसान धीमी गति से निष्पादन की गति और निष्पादित लगभग हर शेल कमांड के लिए एक नई प्रक्रिया प्रारम्भ करने की आवश्यकता है। जब एक [[पाइपलाइन (कंप्यूटिंग)]] स्थापित करके एक स्क्रिप्ट का कार्य पूरा किया जा सकता है जिसमें कुशल फ़िल्टर (सॉफ़्टवेयर) कमांड अधिकांश कार्य करते हैं, तो मंदी कम हो जाती है, किन्तु एक जटिल स्क्रिप्ट सामान्यतः एक पारंपरिक संकलित प्रोग्राम की तुलना में धीमी परिमाण के कई ऑर्डर होते हैं। जो समान कार्य करता है। | एक और महत्वपूर्ण नुकसान धीमी गति से निष्पादन की गति और निष्पादित लगभग हर शेल कमांड के लिए एक नई प्रक्रिया प्रारम्भ करने की आवश्यकता है। जब एक [[पाइपलाइन (कंप्यूटिंग)]] स्थापित करके एक स्क्रिप्ट का कार्य पूरा किया जा सकता है जिसमें कुशल फ़िल्टर (सॉफ़्टवेयर) कमांड अधिकांश कार्य करते हैं, तो मंदी कम हो जाती है, किन्तु एक जटिल स्क्रिप्ट सामान्यतः एक पारंपरिक संकलित प्रोग्राम की तुलना में धीमी परिमाण के कई ऑर्डर होते हैं। जो समान कार्य करता है। | ||
विभिन्न प्लेटफॉर्मों के बीच अनुकूलता संबंधी समस्याएं भी हैं। पर्ल के निर्माता [[लैरी वॉल]] ने प्रसिद्ध रूप से लिखा है कि शेल स्क्रिप्ट की तुलना में शेल को पोर्ट करना | विभिन्न प्लेटफॉर्मों के बीच अनुकूलता संबंधी समस्याएं भी हैं। पर्ल के निर्माता [[लैरी वॉल]] ने प्रसिद्ध रूप से लिखा है कि शेल स्क्रिप्ट की तुलना में शेल को पोर्ट करना सरल है।<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]] (जो [[योजना (प्रोग्रामिंग भाषा)]] का उपयोग करता है) जैसी पूर्ण विकसित भाषाओं का उपयोग करते हैं। | कुछ स्क्रिप्ट भाषाओं का उपयोग करने के कई नुकसान प्रोग्रामिंग भाषा सिंटैक्स या कार्यान्वयन के अंदर डिज़ाइन की खामियों के कारण होते हैं, और जरूरी नहीं कि पाठ-आधारित कमांड-लाइन के उपयोग से लगाए गए हों; ऐसे कई वृत्त हैं जो अन्य शेल प्रोग्रामिंग भाषाओं का उपयोग करते हैं या यहाँ तक कि [[Scsh]] (जो [[योजना (प्रोग्रामिंग भाषा)]] का उपयोग करता है) जैसी पूर्ण विकसित भाषाओं का उपयोग करते हैं। | ||
Line 183: | Line 183: | ||
कंसोल विकल्प [[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 अभी भी बहुत तेज़ हैं) और कार्यक्षमता जोड़ने के लिए जो शेल में उपलब्ध नहीं है भाषा जैसे सॉकेट और अन्य कनेक्टिविटी फ़ंक्शंस, हेवी-ड्यूटी टेक्स्ट प्रोसेसिंग, | परिभाषा के अनुसार, स्क्रिप्टिंग भाषाएँ विस्तारित की जा सकती हैं; उदाहरण के लिए, एक 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 13:58, 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 कमांड का उपयोग करने का प्रयत्न करें।
बैच जॉब्स
शेल स्क्रिप्ट कई कमांड की अनुमति देती है जो मैन्युअल रूप से कमांड-लाइन इंटरफ़ेस पर स्वचालित रूप से निष्पादित होने के लिए अंकित की जाएगी, और उपयोगकर्ता द्वारा अनुक्रम के प्रत्येक चरण को ट्रिगर करने के लिए प्रतीक्षा किए बिना उदाहरण के लिए, तीन सी स्रोत कोड फ़ाइलों वाली निर्देशिका में, उनमें से अंतिम प्रोग्राम बनाने के लिए आवश्यक चार आदेशों को मैन्युअल रूप से चलाने के अतिरिक्त, कोई इसके अतिरिक्त पॉज़िक्स- संगत शेल के लिए स्क्रिप्ट बना सकता है, जिसका नाम यहां दिया गया है 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] तथाकथित दूरस्थ वृत्त जैसे
- रिमोट शेल (
rsh
) - सुरक्षित शेल (
ssh
)
रिमोट प्रणाली पर अधिक जटिल शेल चलाने के लिए वास्तव में केवल उपकरण हैं और विशेषताओं की प्रकार कोई 'शेल' नहीं है।
अन्य स्क्रिप्टिंग भाषाएं
कई शक्तिशाली स्क्रिप्टिंग भाषाओं को उन कार्यों के लिए प्रस्तुत किया गया है जो अधिक बड़े या जटिल हैं जिन्हें साधारण शेल स्क्रिप्ट के साथ आराम से संरक्षित किया जा सकता है, किन्तु जिसके लिए स्क्रिप्ट के लाभ वांछनीय हैं और पूर्ण विकसित, संकलित प्रोग्रामिंग भाषा का विकास हानिकारक होगा। स्क्रिप्टिंग भाषाओं को उच्च-स्तरीय प्रोग्रामिंग भाषाओं से भिन्न करने वाले सूक्ष्म पर वादविवाद का निरंतर स्रोत है, किन्तु, सामान्यतः बोलना, स्क्रिप्टिंग भाषा वह है जिसके लिए दुभाषिया की आवश्यकता होती है।
जीवन चक्र
शेल स्क्रिप्ट प्रायः सॉफ्टवेयर विकास में प्रारंभिक चरण के रूप में कार्य करते हैं, और पश्चात में भिन्न अंतर्निहित कार्यान्वयन के लिए रूपांतरण के अधीन होते हैं, सामान्यतः पर्ल, पायथन (प्रोग्रामिंग भाषा), या सी (प्रोग्रामिंग भाषा) में परिवर्तित हो जाते हैं। दुभाषिया निर्देश फ़ाइल नाम व्याप्ति के रूप में उजागर होने के अतिरिक्त कार्यान्वयन विवरण को स्क्रिप्ट के अंदर पूर्ण रूप से लुप्त करने की अनुमति देता है, और अंतिम उपयोगकर्ताओं पर कोई प्रभाव डाले बिना विभिन्न भाषाओं में निर्बाध पुनर्कार्यान्वयन प्रदान करता है।
जबकि, sh फाइल एक्सटेंशन वाली फ़ाइलें सामान्यतः किसी प्रकार की शेल स्क्रिप्ट होती हैं, अधिकांश शेल स्क्रिप्ट में कोई फ़ाइल नाम एक्सटेंशन नहीं होता है।[7][8][9][10]
लाभ और हानि
शेल स्क्रिप्ट लिखने का संभवता सबसे बड़ा लाभ यह है कि कमांड और सिंटैक्स वही होते हैं जो सीधे कमांड-लाइन पर अंकित किए जाते हैं। प्रोग्रामर को पूर्ण रूप से भिन्न सिंटैक्स पर स्विच करने की ज़रूरत नहीं है, क्योंकि यदि स्क्रिप्ट किसी दूसरी भाषा में लिखी गई थी, या यदि संकलित भाषा का उपयोग किया गया था।
प्रायः अन्य प्रोग्रामिंग भाषाओं में समतुल्य कोड लिखने की तुलना में शेल स्क्रिप्ट लिखना अत्यधिक तीव्र होता है। कई लाभों में सरल प्रोग्राम या फ़ाइल चयन, त्वरित प्रारंभ और इंटरैक्टिव डिबगिंग सम्मिलित हैं। शेल स्क्रिप्ट का उपयोग उपस्थिता कार्यक्रमों के निकटतम अनुक्रमण और निर्णय लेने की कड़ी प्रदान करने के लिए किया जा सकता है, और मध्यम आकार की स्क्रिप्ट के लिए संकलन कदम की अनुपस्थिति लाभ है। इंटरप्रिटेटिव रनिंग डिबगिंग कोड को स्क्रिप्ट में लिखना सरल बनाता है और बग्स की जानकारी प्राप्त करने और उन्हें ठीक करने के लिए इसे तत्पश्चात से चलाता है। गैर-विशेषज्ञ उपयोगकर्ता प्रोग्राम के व्यवहार को अनुकूलित करने के लिए स्क्रिप्टिंग का उपयोग कर सकते हैं, और शेल स्क्रिप्टिंग बहु प्रसंस्करण के लिए कुछ सीमित स्थान प्रदान करती है।
दूसरी ओर, शेल स्क्रिप्टिंग महंगी त्रुटियों से ग्रस्त है। असावधानीवश टंकण त्रुटियाँ जैसे rm -rf * /
(इरादे के अतिरिक्त rm -rf */
) यूनिक्स समुदाय में लोकगीत हैं; एक अतिरिक्त स्थान कमांड को एक से परिवर्तित करता है जो वर्तमान निर्देशिका में निहित सभी उपनिर्देशिकाओं को हटा देता है, जो फ़ाइल प्रणाली की रूट निर्देशिका से सब कुछ हटा देता है। इसी प्रकार की समस्याएं रूपांतरित हो सकती हैं cp
और mv
खतरनाक हथियारों में, और का दुरुपयोग >
रीडायरेक्ट फ़ाइल की सामग्री को हटा सकता है। यह इस तथ्य से और अधिक समस्याग्रस्त हो जाता है कि कई यूनिक्स आदेश केवल एक अक्षर से नाम में भिन्न होते हैं: cp
, cd
, dd
, df
, वगैरह।
एक और महत्वपूर्ण नुकसान धीमी गति से निष्पादन की गति और निष्पादित लगभग हर शेल कमांड के लिए एक नई प्रक्रिया प्रारम्भ करने की आवश्यकता है। जब एक पाइपलाइन (कंप्यूटिंग) स्थापित करके एक स्क्रिप्ट का कार्य पूरा किया जा सकता है जिसमें कुशल फ़िल्टर (सॉफ़्टवेयर) कमांड अधिकांश कार्य करते हैं, तो मंदी कम हो जाती है, किन्तु एक जटिल स्क्रिप्ट सामान्यतः एक पारंपरिक संकलित प्रोग्राम की तुलना में धीमी परिमाण के कई ऑर्डर होते हैं। जो समान कार्य करता है।
विभिन्न प्लेटफॉर्मों के बीच अनुकूलता संबंधी समस्याएं भी हैं। पर्ल के निर्माता लैरी वॉल ने प्रसिद्ध रूप से लिखा है कि शेल स्क्रिप्ट की तुलना में शेल को पोर्ट करना सरल है।[11] इसी प्रकार, अधिक जटिल स्क्रिप्ट स्वयं शेल स्क्रिप्टिंग भाषा की सीमाओं में चल सकती हैं; सीमाएँ गुणवत्ता कोड लिखना मुश्किल बनाती हैं, और मूल शेल भाषा के साथ समस्याओं को सुधारने के लिए विभिन्न शेल्स द्वारा एक्सटेंशन समस्या को बदतर बना सकते हैं।[12] कुछ स्क्रिप्ट भाषाओं का उपयोग करने के कई नुकसान प्रोग्रामिंग भाषा सिंटैक्स या कार्यान्वयन के अंदर डिज़ाइन की खामियों के कारण होते हैं, और जरूरी नहीं कि पाठ-आधारित कमांड-लाइन के उपयोग से लगाए गए हों; ऐसे कई वृत्त हैं जो अन्य शेल प्रोग्रामिंग भाषाओं का उपयोग करते हैं या यहाँ तक कि Scsh (जो योजना (प्रोग्रामिंग भाषा) का उपयोग करता है) जैसी पूर्ण विकसित भाषाओं का उपयोग करते हैं।
स्क्रिप्टिंग भाषाओं के बीच इंटरऑपरेबिलिटी
विभिन्न स्क्रिप्टिंग भाषाएं कई सामान्य तत्वों को साझा कर सकती हैं, मुख्य रूप से पॉज़िक्स आधारित होने के कारण, और कुछ शैल विभिन्न शैलों का अनुकरण करने के लिए मोड प्रदान करते हैं। यह एक स्क्रिप्टिंग भाषा में लिखी गई शेल स्क्रिप्ट को दूसरे में अनुकूलित करने की अनुमति देता है।
इसका एक उदाहरण बैश है, जो बॉर्न शेल के समान व्याकरण और सिंटैक्स प्रदान करता है, और जो एक पॉज़िक्स-अनुपालन मोड भी प्रदान करता है।[13] जैसे, बॉर्न शेल के लिए लिखी गई अधिकांश शेल स्क्रिप्ट्स को BASH में चलाया जा सकता है, किन्तु हो सकता है कि इसका उल्टा सही न हो क्योंकि BASH के एक्सटेंशन हैं जो बॉर्न शेल में उपस्थित नहीं हैं। जैसे, इन विशेषताओं को विक्ट: बैशिज्म के रूप में जाना जाता है।[14]
अन्य ऑपरेटिंग प्रणाली पर शेल स्क्रिप्टिंग
सिग्विन, एमकेएस उपकरण, इंटरिक्स (जो कि यूनिक्स के लिए माइक्रोसॉफ्ट विंडोज सेवाओं में उपलब्ध है), हैमिल्टन सी शेल , यूडब्ल्यूआईएन (विंडोज़ के लिए एटी एंड टी यूनिक्स) और अन्य जैसे इंटरऑपरेबिलिटी सॉफ़्टवेयर विंडोज़ एनटी चलाने वाली मशीनों पर यूनिक्स शैल प्रोग्राम चलाने की अनुमति देते हैं। इसके उत्तराधिकारी, MS-DOS-Windows 95 शाखा पर कार्यक्षमता के कुछ नुकसान के साथ-साथ OS/2 के लिए पहले के MKS उपकरण संस्करण। विंडोज प्रकार के ऑपरेटिंग प्रणाली के लिए कम से कम तीन डीसीएल कार्यान्वयन - एक्सएलएनटी के अलावा, एक बहु-उपयोग वाली स्क्रिप्टिंग भाषा पैकेज जो कमांड शेल, विंडोज स्क्रिप्ट होस्ट और कॉमन गेटवे इंटरफ़ेस प्रोग्रामिंग के साथ प्रयोग किया जाता है - इन प्रणालीों के लिए भी उपलब्ध हैं। मैक ओएस एक्स और उसके पश्चात के संस्करण भी यूनिक्स जैसे हैं।[15] पूर्वोक्त उपकरणों के अलावा, कुछ पॉज़िक्स और 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