2009-04-28 21 views
76

की तुलना में शैल स्क्रिप्टिंग की ताकतें मैंने शैल (बैश) स्क्रिप्टिंग को कुछ बार सीखने की कोशिश की लेकिन सिंटैक्स से दूर चला गया। तब मुझे पाइथन मिला और पाइथन में एक शेल स्क्रिप्ट कर सकते हैं जो ज्यादातर चीजें करने में सक्षम था। अब मुझे यकीन नहीं है कि मुझे अपना समय शैल स्क्रिप्टिंग सीखने में निवेश करना चाहिए या नहीं। तो मैं पूछना चाहता हूं:पायथन

शैल स्क्रिप्टिंग की ताकत क्या है जो इसे पायथन की तुलना में एक अनिवार्य उपकरण बनाती है?

मैं पेशे से सिस्टम प्रशासन नहीं हूं, लेकिन मुझे घर उपयोगकर्ताओं के लिए लिनक्स सिस्टम स्थापित करने में दिलचस्पी है, इसलिए मुझे लगता है कि शैल स्क्रिप्टिंग सीखना आवश्यक हो सकता है।

उत्तर

65
  • शैल स्क्रिप्टिंग में I/O पुनर्निर्देशन के लिए सरल नोटेशन हैं।
  • शैल में मौजूदा कार्यक्रमों से पाइपलाइन बनाने के लिए यह आसान है।
  • शैल स्क्रिप्टिंग पूरे कार्यक्रमों का पुन: उपयोग करती है।
  • शैल सार्वभौमिक रूप से उपलब्ध है (यूनिक्स की तरह कुछ भी) - पायथन आवश्यक रूप से स्थापित नहीं है।

'यह सच है कि आप पाइथन में सब कुछ कर सकते हैं जिसे आप खोल में कर सकते हैं; 'यह भी सच है कि ऐसी चीजें हैं जो पाइथन में आसान होती हैं जो कि खोल में कठिन होती हैं (जैसे चीजें हैं जो शैल में आसान होती हैं लेकिन पाइथन में कठिन होती हैं)। दोनों को जानना लंबी अवधि में सबसे अच्छा होगा।

+14

1 और 2, अच्छे अंक। # 3 एक कमजोरी है, क्योंकि यह बहुत अधिक उपर की ओर जाता है कि पायथन से बच सकते हैं। # 4 काफी हद तक असत्य हो सकता है। पाइथन अब अधिकांश लिनक्स distros का हिस्सा है। –

+0

मुझे ओवरहेड नहीं दिख रहा है। क्या आपके पास कुछ संख्याएं हैं? – Svante

+0

पायथन के बारे में - हाँ, यह लिनक्स पर काफी सार्वभौमिक रूप से उपलब्ध है; हालांकि, पूरी दुनिया एक लिनक्स बॉक्स नहीं है। यह कहकर, यह प्रत्येक यूनिक्स-जैसे मंच के लिए उपलब्ध है। फिर भी, मेरे सोलारिस बॉक्स पर, यह कुछ हद तक बाहर स्थापित है (/ usr/sfw/bin/python); मुझे केवल पिछले वर्ष या तो निर्देशिका में ही मिला। –

10

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

मुझे पाइथन की तुलना में शैल स्क्रिप्ट में डेटा के पाइप से निपटना भी आसान लगता है, हालांकि यह पाइथन से पूरी तरह से करने योग्य है।

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

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

5

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

कुछ खोल स्क्रिप्टिंग सीखना आपको कुछ कमांड लाइन चाल सीखने में भी मदद कर सकता है, क्योंकि कमांड लाइन अच्छी तरह से खोल है। कुछ काफी लंबी और जटिल कमांड लाइन लेने के लिए भी अच्छा है, और इसे समझने के बाद इसे एक और सामान्य स्क्रिप्ट में परिवर्तित करना आपको इसकी आवश्यकता होगी।

शैल में कुछ सुंदर शक्तिशाली विशेषताएं भी हैं; पाइपलाइन एक वास्तव में दिलचस्प नियंत्रण निर्माण है जो कि केवल शैल के मूल निवासी है, जहां तक ​​मुझे पता है।

45

"शैल स्क्रिप्टिंग की ताकत क्या है जो इसे पायथन की तुलना में एक अनिवार्य उपकरण बनाती है?"

खोल अनिवार्य नहीं है। तुम्हें क्या लगता है देखते हैं तो कई? बैश, tcsh, csh, श, आदि, आदि,

अजगर एक खोल है। ऐसा नहीं है कि आप एक 'सभी आदेशों को चलाने के लिए घ उपयोग करते हैं, लेकिन पटकथा के लिए, यह आदर्श है।

अजगर सभी लिनक्स distro के एक अधिक या कम मानक हिस्सा है।

अधिक परंपरागत गोले भी कई बातें करते हैं।

  1. उनके पास आदेश चलाने के लिए एक आसान उपयोगकर्ता इंटरफ़ेस है। इसमें एक-पंक्ति कमांड शामिल हैं जहां शैल आपके पाथ, कांटे की खोज करता है और अनुरोधित प्रोग्राम निष्पादित करता है। इसमें पाइपलाइन, अनुक्रम और समवर्ती कार्यक्रम भी शामिल हैं (;, | और &) के साथ-साथ कुछ पुनर्निर्देशन (> और < का उपयोग करके) शामिल हैं।

  2. उनके पास स्क्रिप्ट चलाने के लिए एक क्रमी छोटी प्रोग्रामिंग-भाषा जैसी क्षमता है। यह भाषा उपयोग करने के लिए कठिन है और बेहद अक्षम है। इस भाषा के अधिकांश बयानों में एक या अधिक अतिरिक्त प्रक्रियाओं को फोर्क करने की आवश्यकता होती है, जो समय और स्मृति बर्बाद कर देती है।

खोल से प्रोग्राम चलाना, stderr को लॉग फ़ाइल में रीडायरेक्ट करना और उस तरह की चीज़ अच्छी है। खोल में वह करो।

लगभग हर चीज को पाइथन लिपि के रूप में अधिक कुशलतापूर्वक और अधिक स्पष्ट रूप से किया जा सकता है।

आपको दोनों की आवश्यकता है। हालांकि, आपको पारंपरिक शैल भाषा में if-statement या loops के साथ कभी भी एक स्क्रिप्ट नहीं लिखनी चाहिए।

+0

-1 में कठिन है। ए) विभिन्न गोले के प्रसार की उपस्थिति, इस बात से निपटने के बजाय, यूनिक्स प्रणाली के उपयोग के लिए कुछ किस्मों का एक खोल आवश्यक है, को रोकने के लिए प्रमाणित करता है। बी) ओपी निर्दिष्ट "यूनिक्स खोल", न सिर्फ "खोल"। पायथन दुभाषिया एक यूनिक्स खोल नहीं है, यह एक पायथन "खोल" है। पायथन प्रोग्रामिंग भाषा प्रक्रियात्मक प्रोग्रामिंग और डेटा हेरफेर के लिए उन्मुख है; शैल भाषाएं प्रोग्राम निष्पादित करने और उनके आउटपुट में हेरफेर करने के लिए उन्मुख होती हैं। सी) आपकी बिंदु # 2 सच हो सकती है यदि किसी भी स्क्रिप्ट के कथन नियंत्रण प्रवाह विवरण जैसे 'if' या' while' हैं। – intuited

+1

@intuited। ए) विभिन्न गोले का प्रसार "खोल" में अर्जित सुविधाओं की संख्या को प्रमाणित करता है; यह आवश्यक भूमिका नहीं है, लेकिन यह सभी सुविधाओं के लिए पकड़ है। बी) पायथन दुभाषिया एक उचित यूनिक्स खोल है, यह #! का उपयोग करता है। सी) एक "सरल" खोल 'if' कथन में अक्सर 'test' प्रोग्राम चलाने में शामिल होता है। खोल सभी मामलों में एक क्रमी प्रोग्रामिंग भाषा है। –

+3

@ एस। लॉट: ऐसा लगता है कि सर्किट्री में कुछ अर्थपूर्ण विसंगति है।यूनिक्स शैल की मेरी परिभाषा एक दुभाषिया होगी जिसका भाषा मुख्य रूप से एक उच्च स्तर पर, यूनिक्स प्रणाली के संचालन को नियंत्रित करने के लिए तैयार की जाती है। इस परिभाषा के अनुसार, यूनिक्स सिस्टम के संचालन के लिए कुछ प्रकार का एक खोल निश्चित रूप से आवश्यक है, और पायथन योग्य नहीं है। आप उस शब्द को कैसे परिभाषित करेंगे? – intuited

25

शैल अधिक जटिल चीजों को और अधिक जटिल बनाने के खर्च पर, सामान्य और सरल कार्यों को वास्तव में सरल बनाता है।

आम तौर पर, एक छोटी शेल स्क्रिप्ट संबंधित पायथन प्रोग्राम की तुलना में कम और सरल होगी, लेकिन पाइथन प्रोग्राम में संशोधन को स्वीकार करने की इच्छा होगी, जबकि शेल स्क्रिप्ट को कोड जोड़ा जाने के साथ कम और कम बनाए रखने योग्य होगा।

इसका नतीजा यह है कि इष्टतम दिन-प्रति-दिन उत्पादकता के लिए आपको शेल-स्क्रिप्टिंग की आवश्यकता होती है, लेकिन आपको इसे ज्यादातर फेंकने वाली स्क्रिप्ट के लिए उपयोग करना चाहिए, और हर जगह पाइथन का उपयोग करना चाहिए।

7

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

अधिकांश प्रोग्रामर पाते हैं कि नई भाषा सीखना हर बार बढ़ता जा रहा है। (यह भी प्राकृतिक भाषाओं के बारे में काफी हद तक सच है।) और पहले आप शुरू करते हैं, बेहतर।

प्लस: एक भाषा सीखने से आप पूरी तरह से ज्ञान और परिचितता की स्थिति से अपनी सीमाओं को अलग कर सकते हैं। यह शायद आपको नहीं मिलेगा, लेकिन आप अपने साथियों से एक बियर कमा सकते हैं!

6

मैं पिछले पिछले उत्तरों से सहमत हूं। मैं शेल कमांड को फाइल सिस्टम-उन्मुख कार्यों (प्रतिलिपि बनाने और फ़ाइलों को स्थानांतरित करने, grep, आदि) करने के लिए सबसे उपयुक्त मानता हूं।शैल बेहतर मेरी राय में आप पढ़ सकते हैं और फ़ाइल पर लिखने में है, के बाद से एक भी >>file.txt पुनर्निर्देशन तुरंत दर्ज करने के लिए,,

संलग्न कर देता है बजाय ज़रूरत है, कहते हैं, file=open('file.txt','a'); file.write() की आदि वर्तमान में, मेरी निजी इस्तेमाल के लिए, है, मैं पाइथन की तुलना में शैल में कुछ क्रिया आसान होने पर, दोनों को एक पायथन स्क्रिप्ट बनाना और os.system ('command') या os.popen ('command') को कॉल करना, दोनों को मिलाएं।

3

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