बैश शेल स्क्रिप्ट के लिए स्क्रिप्टिंग विकल्प


17

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

  1. वास्तविक दुनिया की दुकानों द्वारा किस पटकथा भाषा का सबसे अधिक उपयोग किया जाता है?
  2. कौन सी स्क्रिप्टिंग भाषा सबसे अधिक बारीकी से C / C ++ सिंटैक्स से मिलती है?
  3. क्या कोई अन्य स्क्रिप्टिंग भाषा है जिसके बारे में मुझे जानकारी नहीं है?

आपकी सहायता के लिए धन्यवाद,

स्कॉट


2
यह शायद सामुदायिक विकि होना चाहिए।
ईबीग्रीन

2
मैं वास्तव में अब ज्यादातर सिस्टम कार्यों के लिए PHP का उपयोग करता हूं। मैं जल्द ही इसके साथ एक उचित उत्तर दूंगा। इसमें बहुत सारे पुस्तकालय बनाए गए हैं, जो आसान है।
काइल हॉजसन ने

शैल-अभिप्रेत भाषाएं कुछ ऐसा करती हैं जो अन्य भाषाएं नहीं कर सकती हैं; जिसका प्रबंधन किया गया है और सभी बच्चों की प्रक्रियाओं की पुनरावृत्ति की जा रही है। ब्लॉग विज्ञापन फ़्यूज़न पैसेंजर बताते हैं कि क्यों विस्तार से: phusion.github.io/baseimage-docker संक्षेप में, लैंग-एक्स में लिखी गई आपकी स्क्रिप्ट शायद शटडाउन रूटीन को ठीक से नहीं संभालती हैं। जो पूरी तरह से ठीक है जब तक आप उन्हें एक वास्तविक शेल प्रक्रिया के बच्चों के रूप में चलाते हैं। डिस्क्लेमर, मैं कोई एक्सपर्ट नहीं हूं। यह जानकारी केवल मेरी समझ के लिए सर्वोत्तम है जो त्रुटिपूर्ण हो सकती है।
ThorSummoner

जवाबों:


12

कुछ हद तक यह व्यक्तिगत पसंद की बात है। लोकप्रियता के मामले में पर्ल और पायथन निश्चित रूप से ऊपर हैं।

हालांकि, आपके दो तीन सवालों के जवाब देने के लिए:

  1. मुझे लगता है कि बैश का सबसे व्यापक रूप से उपयोग किया जाता है, शायद पर्ल के बाद। बस अनुमान लगा रहा है, अगर किसी ने एक सर्वेक्षण किया है तो पता नहीं। :)
  2. वहाँ बाहर स्क्रिप्टिंग भाषाओं के bazillions हैं। :)

मेरी सिफारिश हालांकि पायथन है। यह पढ़ना और लिखना आसान है, बहुत शक्तिशाली है, और इसे सीखने के लिए वेब पर बहुत सारे उपयोगी संसाधन हैं, न कि उस कोड का उल्लेख करने के लिए जिसे आप कॉपी कर सकते हैं और पुन: उद्देश्य कर सकते हैं।


1
मुझे भी वह पता हैं। मुझे पाइथन सीखने में आसान लगता है और मैं इसे फेंकने में कुछ भी करने में सक्षम हूं क्योंकि यह अच्छे पुराने OS में है / REXX के साथ 2 दिन।
slovon

3
पायथन के लिए +1 ... एक स्क्रिप्टिंग भाषा में सी की शक्ति। आप अपनी स्क्रिप्ट को जितना चाहें उतना सरल या जटिल बना सकते हैं;)
KFro

2
गैर NT प्रणालियों पर अजगर मॉड्यूल shएक शेल स्क्रिप्टिंग भाषा के रूप में सुलभ अजगर का उपयोग करता है; हालाँकि, अगर आप किनारे के मामलों में भाग लेते हैं (जैसे कि मल्टीप्रोसेसिंग) तो आपको सबप्रोसेस मॉड्यूल सीखना होगा, जो कि आज तक मुझे बस उपयोग करने के लिए बहुत कठिन लगता है।
ThorSummoner

5

पर्ल और पायथन स्पष्ट रूप से उत्तर हैं; लेकिन उनमें से प्रत्येक का उपयोग विभिन्न कार्यों को पूरा करने के लिए किया जाता है:

  1. बैश - सीखने के लिए सबसे आसान हाथ। बैश स्क्रिप्ट के साथ आप कमांड चलाते हैं और आउटपुट में हेरफेर करते हैं।
  2. अजगर - सीखने के लिए दूसरा सबसे आसान। पाइथन बैश की तुलना में अधिक उपयोगी है क्योंकि आप पूर्ण कार्यक्रमों को लिखने के लिए पाइथन का उपयोग कर सकते हैं, और यह समुदाय द्वारा अच्छी तरह से समर्थित है। पायथन भी बहुत पठनीय है और महीनों बाद संपादित करना आसान है।
  3. पर्ल - तीनों में से सबसे अच्छा (स्क्रिप्टिंग के लिए), लेकिन आसानी से सबसे कठिन सीखने की अवस्था। बहुत अच्छी नियमित अभिव्यक्ति का समर्थन है (जो कि आज भी इसका उपयोग करने का मुख्य कारण है), और आप शायद समय के साथ बहुत सारे पर्ल स्क्रिप्ट में भाग लेंगे। पर्ल के साथ मुख्य समस्या कोड पठनीयता है - कोड लिखने के महीनों बाद आप यह पता लगाने में सक्षम नहीं होंगे कि यह क्या करता है। इसलिए आप बेहतर टिप्पणी करेंगे।
  4. Awk / Sed - दोनों ही बहुत उपयोगी हैं, लेकिन दोनों को सीखना बहुत कठिन है। जब तक आप पैटर्न में अच्छे नहीं होंगे, मैं इन आखिरी से निपटने का सुझाव दूंगा।

के बारे में जो अभी सीखने के लिए (क्योंकि आप संभवतः उनमें से कोई भी नहीं जानते हैं), मैं अजगर सीखना होगा। यह जानने में सबसे सरल और उपयोगी है।

और अपने सवालों के जवाब के लिए:

वास्तविक दुनिया की दुकानों द्वारा किस पटकथा भाषा का सबसे अधिक उपयोग किया जाता है?

उन सभी को, लेकिन मुझे लगता है कि पर्ल को यहां थोड़ा फायदा है (यह होने के नाते कि यह सिस्टम प्रशासन में लंबे समय तक उपयोग में रहा है)।

कौन सी स्क्रिप्टिंग भाषा सबसे अधिक बारीकी से C / C ++ सिंटैक्स से मिलती है?

पर्ल

क्या कोई अन्य स्क्रिप्टिंग भाषा है जिसके बारे में मुझे जानकारी नहीं है?

रूबी, Tcsh / Csh, http://en.wikipedia.org/wiki/Interpreted_language


2
यदि आप पर्ल में कुछ समय लगाते हैं, तो आप पूरी तरह से पढ़ने योग्य पर्ल लिख सकते हैं। जो लोग स्पेगेटी कोड लिखते हैं, वे अपनी असफलताओं के लिए पर्ल को दोषी ठहराने के लिए बहुत जल्दी हैं।
सियान

1
मैं केवल एक sysadmin के रूप में अनुभवों पर आधारित बोल रहा हूँ; मुझे कोड को बनाए रखना है अन्य लोगों ने लिखा है कि पढ़ने के लिए असंभव के पास लानत है। आमतौर पर मैं पायथन में कोड को फिर से लिखना समाप्त करता हूं।
बजे माइकल पोबेगा

3

छोटी नौकरियों के लिए जाग, अधिक से अधिक oneliners के लिए अजगर।

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

हमारी कंपनी में हम आवेदन के लिए सभी स्क्रिप्टिंग, निगरानी, ​​... और जावा के लिए अजगर का उपयोग करते हैं, और हम विषम वातावरण में बंद हैं।


2

Sh (bourne shell), grep, awk और sed हमेशा पकड़ में आने के लिए एक अच्छी चीज है। पर्ल बहुत बढ़िया है अगर आप बहुत सारे टेक्स्ट रिजेक्ट नहीं कर रहे हैं और स्थिरता बरकरार नहीं है तो यह महत्वपूर्ण नहीं है (यह कहना संभव नहीं है कि यह संभव नहीं है)। अजगर; अगर पठनीयता आपके लिए महत्वपूर्ण है। मेरी प्राथमिकता पाइथन है लेकिन ये सभी उपकरण आपके द्वारा फेंकी गई अधिकांश चीज़ों के लिए अच्छे हैं। आप सी / सी + + सिंटैक्स की आवश्यकता पर पुनर्विचार करना चाहते हैं, इस पर अटके रहने से आपको लंबे समय तक मदद नहीं मिलेगी।


धन्यवाद मार्टिन। मैंने देखा है (वेब ​​पर नमूनों से), कि पर्ल PHP के लिए एक उल्लेखनीय समानता रखता है (हालांकि मुझे यकीन है कि यह PHP से पहले पर्ल था, ऐतिहासिक रूप से)। क्या यह उचित कथन है?
स्कॉट डेविस

PHP 1.0 एक अनुगामी स्क्रिप्ट थी, इसलिए यह संयोग नहीं है :)
बिल वीस

2
  • माणिक
  • अजगर
  • गो - एक क्रॉस-प्लेटफ़ॉर्म भाषा, स्क्रिप्टिंग को गो की ताकत में से एक के रूप में उल्लेख किया गया है ।
  • Node.js - Grunt.js, Gulp.js. देखें कई प्रोजेक्ट अब शेल ऑटोमेशन टूल के रूप में Node.js का उपयोग कर रहे हैं।
  • पर्ल

1

मैं कहूंगा कि पर्ल और पायथन शायद दो सबसे अच्छे विकल्प हैं। आप सेड के साथ-साथ बहुत कुछ कर सकते हैं।


1

यदि आप स्क्रैच से कुछ सीखना चाह रहे हैं, तो शायद यह सबसे अच्छा है (पुनः) बैश सीखें।

इन दिनों परे और पर्ल इन दिनों लोकप्रिय हैं; मैं पर्ल के लिए आंशिक हूं, लेकिन पर्ल 4 के आउट होने के बाद से मेरी पर्ल स्क्रिप्टिंग शैली में बहुत बदलाव नहीं आया है।

मैं किसी भी "सी-सिंटेक्स-जैसी" स्क्रिप्टिंग भाषाओं से अवगत नहीं हूं।


1

पर्ल, नीचे हाथ, अगर केवल CPAN ( http://search.cpan.org/ ) के अविश्वसनीय संसाधन के लिए । इतने बड़े पैमाने पर योगदान देने वाले समुदाय के साथ एक स्क्रिप्टिंग भाषा का उपयोग करने का लाभ यह है कि आपको कभी भी अपने आप को कुछ आविष्कार करने की आवश्यकता नहीं है।

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

अकेले स्क्रिप्टिंग भाषाओं के बीच अंतर स्पष्ट विजेता चुनने के लिए पर्याप्त गंभीर नहीं हैं, लेकिन आपको मुख्य रूप से इस बात पर ध्यान देना चाहिए कि आपके लिए उन विषयों पर जानकारी प्राप्त करना कितना आसान होगा, जिनकी आप परवाह करते हैं।

पर्ल सिंटैक्स स्ट्राइकली सी के करीब हो सकता है, जब तक आप टाइपिंग की कमी और सिगल्स के आसपास हो सकते हैं; उन्नत पर्ल का उपयोग स्वाभाविक रूप से तब होगा जब आप अंततः भाषा की ताकत सीखेंगे।

और पठनीयता के मोर्चे पर naysayers के लिए: आप किसी भी भाषा में कोड पढ़ने के लिए कठिन लिख सकते हैं। यदि आप 4 महीने पहले से अपने कोड को देखते हैं और इसे समझ नहीं पाते हैं, तो आप कुछ गलत कर रहे हैं।

ps यह पोस्ट CPAN पर विभिन्न प्रशासन के अनुकूल मॉड्यूल के लिंक से भरी हुई थी, लेकिन जाहिर तौर पर नए उपयोगकर्ता केवल एक लिंक पोस्ट कर सकते हैं, इसलिए CPAN लिंक का उपयोग 'CVS' 'SVN' 'क्रोन' और 'Moose' जैसी चीजों की खोज के लिए करें ( व्यापक वस्तु प्रणाली)


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

    • C सिंटैक्स: csh है , लेकिन आप TCC को आसानी से स्थापित कर सकते हैं और वास्तविक C को स्क्रिप्टिंग भाषा के रूप में उपयोग कर सकते हैं, जो अन्य भाषाओं के स्टार्टअप की तुलना में कम समय में स्रोत से संकलित है।

    • अन्य स्क्रिप्टिंग भाषाएँ: बहुत सारी! लुआ , रूबी , जावास्क्रिप्ट ...


1

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

अंतिम लेकिन कम से कम मैं पर्ल या अजगर का उपयोग नहीं करूंगा यदि मुझे करना है, तो आइए, हर रात एक mysql सर्वर से सभी डेटाबेस को डंप करें (प्रत्येक डेटाबेस में यह स्वयं डंप फ़ाइल है), उन्हें टार करें और rsync करें कि किसी अन्य सर्वर पर। क्यों ? क्योंकि यह तेज और आसान है इसे bash में लिखना :)

अंत में, आपको जो भी भाषा आपके वर्तमान कार्य के लिए उपयुक्त होती है उसका उपयोग करना चाहिए और किसी दिए गए स्क्रिप्टिंग भाषा का उपयोग केवल इसलिए नहीं करना चाहिए क्योंकि आप इसे सबसे अधिक पसंद करते हैं।


1

[सामान्य स्क्रिप्टिंग सलाह के लिए, अन्य उत्तर देखें]

यह उत्तर कमांड-लाइन कार्यक्रमों के उपयोग और उनमें से बड़ी श्रृंखलाओं के बारे में है।

सीएलआई कार्यक्रमों की श्रृंखला चलाने के लिए, और शायद अनुक्रम में कई श्रृंखलाएं, बैश सबसे आसान है। पर्ल वही कर सकता है लेकिन भाषा सीखने के लिए बहुत कठिन है और कहीं अधिक जटिल है, और जैसा कि कई ने बताया है, समझदार पर्ल लिखना आसान है।

यदि आप फ़ाइलों और मापदंडों पर पुनरावृत्ति कर रहे हैं, तो bash को b / c में प्राप्त करना सबसे आसान है, आप शेल में प्रोटोटाइप कर सकते हैं, फिर एक स्क्रिप्ट में कॉपी करें और न्यूनतम ओवरहेड के साथ कुछ सरणियों और छोरों को जोड़ें।

मेरे कहने के उदाहरण:

$ cat input.dat | numerical_model source_data ${SRC} grid_size ${GRID_SIZE} param1 ${P1} param2 ${P2} | tee ${OUTPUT} | plotter title ${TITLE} ylabel ${YLABEL} xlabel ${XLABEL} > ${OUTPUT_FIG}
$ cat ${OUTPUT} | stats_cmd bin_size ${BINSIZE} dist_type ${DIST_TYPE} | tee ${OUTPUT_STATS} | plotter plot_type ${PLOT_TYPE} title ${TITLE_STATS} > ${OUTPUT_FIG_STATS}

बैश में, उन कुछ मापदंडों में से कुछ छोरों में लपेटना आसान है। हालाँकि , स्क्रिप्ट को कुछ दसियों लाइनों से अधिक हो जाने पर कोड को पढ़ना मुश्किल हो जाता है। --- तीस अलग-अलग डेटा भूखंडों के लिए कमांड के 30 सेट (प्रत्येक कुछ पंक्तियाँ) की कल्पना करें ---

पर्ल और पायथन बड़ी स्क्रिप्ट के लिए बेहतर हो सकते हैं क्योंकि उनके पास लूपिंग और वैरिएबल के लिए क्लीनर सिंटैक्स है, लेकिन बैश कमांड को स्ट्रिंग्स के रूप में उत्पन्न किया जाना चाहिए, उपप्रोसेस के रूप में चलाएं, और स्टड, स्टैडआउट कैप्चर किया गया। यह किया जा सकता है, लेकिन यह मूल शेल वातावरण को पूरी तरह से बदल नहीं सकता है।

यदि गोले एक बेहतर भाषा होती तो यह सब टाला जाता।


0

मुझे माणिक पसंद है। इसके साथ प्रोग्राम करना सरल और आसान है। माणिक का उपयोग करते हुए सिस्टम प्रशासन पर एक उत्कृष्ट पुस्तक है ।

रूबी का उपयोग कई विन्यास प्रबंधन प्रणालियों (कैपिस्ट्रानो, शेफ, कठपुतली) और मेटास्प्लोइट के अंतिम संस्करण में किया जाता है।

आप भीड़ का उपयोग कर सकते हैं , रूबी सिंटैक्स के साथ यूनिक्स शेल के लिए एक प्रतिस्थापन और इस तरह की चीजें कर सकते हैं:

local = Rush::Box.new('localhost') 
remote = Rush::Box.new('my.remote.server.com')     
local_dir = local['/Users/adam/myproj/']
remote_dir = remote['/home/myproj/app/']

local_dir.copy_to remote_dir
remote_dir['**/.svn/'].each { |d| d.destroy }

धन्यवाद चमीये। मुझे नहीं पता था कि आप रूबी को sysadmin के लिए उपयोग कर सकते हैं - मैंने हमेशा सोचा था कि यह वेब-केंद्रित था। मैं ज्यादातर संगठनों में उपयोग के लिए कुछ देख रहा हूँ। क्या यह कहना उचित है कि रुसी के लिए sysadmin अभी भी बहुत खून बह रहा है किनारे?
स्कॉट डेविस

1
शेल / पर्ल केवल दो भाषाएँ हैं जिन्हें आप मज़बूती से हर जगह स्थापित कर सकते हैं। पाइथन शायद अगले सबसे आम, रूबी के साथ एक बहुत दूर चौथे (वास्तव में, शायद पांचवें, awk के पीछे) चल रहा है।
सियान

@ScottDavies PHP और ASP.net केवल वेब-केंद्रित भाषाएँ हैं, जिनके बारे में मुझे पता है; यहां तक ​​कि जावास्क्रिप्ट विशेष रूप से वेब पर चलाने के लिए डिज़ाइन किया गया है जो पिछले रूप में सत्यापन के लिए अभाव है। हालाँकि आप html को किसी भी भाषा के साथ भेज सकते हैं, यहाँ तक कि जाहिरा तौर पर मार सकते हैं
ThorSummoner

0

रूबी वन-लाइनर्स उदाहरण:

> echo 'Shell is the best!' | ruby -pe 'gsub("Shell", "Ruby")' 

Ruby is the best!

> printf "foo\nbar\nbaz\n" |  ruby -ne 'BEGIN { i = 1 }; puts "#{i} #{$_}"; i += 1'

1 foo
2 bar
3 baz

मैं माणिक का उपयोग करूँगा।

श की तुलना में, यह आधुनिक और शक्तिशाली है।

अजगर की तुलना में, यह स्थिरता, एक संस्करण, एक पैकेज प्रबंधक है। और मुझे इंडेंटेशन सिंटैक्स पसंद नहीं है।

पर्ल की तुलना में, पुराने स्कूल का थोड़ा सा और वाक्यविन्यास मेरे लिए बहुत जटिल है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.