द बिगिनिंग गाइड टू शैल स्क्रिप्टिंग द बेसिक्स
शब्द "शेल स्क्रिप्टिंग" लिनक्स मंचों में अक्सर उल्लेख किया जाता है, लेकिन कई उपयोगकर्ता इससे परिचित नहीं हैं। इस आसान और शक्तिशाली प्रोग्रामिंग पद्धति को सीखने से आपको समय बचाने में मदद मिल सकती है, कमांड-लाइन को बेहतर ढंग से सीख सकते हैं, और थकाऊ फ़ाइल प्रबंधन कार्यों को गायब कर सकते हैं.
शेल स्क्रिप्टिंग क्या है?
लिनक्स उपयोगकर्ता होने का मतलब है कि आप कमांड-लाइन के साथ खेलते हैं। यह पसंद है या नहीं, बस कुछ चीजें हैं जो इंगित और क्लिक करके इस इंटरफ़ेस के माध्यम से बहुत आसानी से की जाती हैं। जितना अधिक आप कमांड-लाइन का उपयोग करते हैं और सीखते हैं, उतना ही आप इसकी क्षमता देखते हैं। खैर, कमांड-लाइन खुद एक प्रोग्राम है: शेल। अधिकांश लिनक्स डिस्ट्रोस आज बैश का उपयोग करते हैं, और यही आप वास्तव में कमांड में प्रवेश कर रहे हैं.
अब, आप में से कुछ जिन्होंने लिनक्स का उपयोग करने से पहले विंडोज का उपयोग किया था, वे बैच फ़ाइलों को याद कर सकते हैं। ये छोटी पाठ फाइलें थीं जिन्हें आप निष्पादित करने के लिए आदेशों के साथ भर सकते हैं और विंडोज उन्हें बदले में चलाएगा। यह कुछ चीजों को प्राप्त करने का एक चतुर और साफ-सुथरा तरीका था, जैसे आपके हाई स्कूल कंप्यूटर लैब में गेम चलाना जब आप सिस्टम फ़ोल्डर नहीं खोल सकते थे या शॉर्टकट नहीं बना सकते थे। Windows में बैच फ़ाइलें, जबकि उपयोगी, शेल स्क्रिप्ट का एक सस्ता नकली हैं.
शेल स्क्रिप्ट हमें जंजीरों में आदेशों को प्रोग्राम करने की अनुमति देती हैं और सिस्टम को स्क्रिप्ट की गई घटना के रूप में निष्पादित करता है, बैच फ़ाइलों की तरह। वे कमांड प्रतिस्थापन जैसे अधिक उपयोगी कार्यों के लिए भी अनुमति देते हैं। आप किसी आदेश को दिनांक की तरह लागू कर सकते हैं, और इसका उपयोग फ़ाइल-नामकरण योजना के भाग के रूप में कर सकते हैं। आप बैकअप को स्वचालित कर सकते हैं और प्रत्येक कॉपी की गई फ़ाइल में उसके नाम के अंत में संलग्न वर्तमान तिथि हो सकती है। लिपियों का आदेशों का सिर्फ चालान नहीं है, या तो। वे अपने आप में कार्यक्रम हैं। स्क्रिप्टिंग आपको प्रोग्रामिंग कार्यों का उपयोग करने की अनुमति देता है - जैसे कि 'लूप्स के लिए', अगर / फिर / अन्यथा स्टेटमेंट, और इसके बाद - सीधे आपके ऑपरेटिंग सिस्टम के इंटरफेस के भीतर। और, आपको दूसरी भाषा सीखने की ज़रूरत नहीं है क्योंकि आप जो पहले से जानते हैं उसका उपयोग कर रहे हैं: कमांड-लाइन.
मुझे लगता है कि स्क्रिप्टिंग की ताकत वास्तव में है। अधिकांश प्रमुख प्रोग्रामिंग भाषाओं के स्टेपल सीखते हुए, आप पहले से ही ज्ञात कमांड के साथ प्रोग्राम कर सकते हैं। कुछ दोहराव और थकाऊ करने की आवश्यकता है? यह स्क्रिप्ट! एक बहुत जटिल कमांड के लिए एक शॉर्टकट की आवश्यकता है? यह स्क्रिप्ट! कुछ के लिए कमांड-लाइन इंटरफ़ेस का उपयोग करना वास्तव में आसान बनाना चाहते हैं? इसे स्क्रिप्ट करें!
शुरू करने से पहले
अपनी स्क्रिप्टिंग श्रृंखला शुरू करने से पहले, आइए कुछ बुनियादी जानकारी को कवर करें। हम बैश शेल का उपयोग करेंगे, जो कि अधिकांश लिनक्स वितरण मूल रूप से उपयोग करते हैं। बैश मैक ओएस उपयोगकर्ताओं और विंडोज पर सिगविन के लिए भी उपलब्ध है। चूंकि यह इतना सार्वभौमिक है, इसलिए आपको अपने प्लेटफॉर्म की परवाह किए बिना स्क्रिप्ट करने में सक्षम होना चाहिए। इसके अलावा, जब तक संदर्भित किए जाने वाले सभी आदेश मौजूद हैं, तब तक स्क्रिप्ट कई प्लेटफार्मों पर काम कर सकती हैं, जिनमें बहुत कम समय में कोई ट्वीकिंग की आवश्यकता नहीं है.
स्क्रिप्टिंग आसानी से "प्रशासक" या "सुपरसुअर" विशेषाधिकारों का उपयोग कर सकती है, इसलिए इससे पहले कि आप उन्हें काम पर रखें, स्क्रिप्ट का परीक्षण करना सबसे अच्छा है। सामान्य ज्ञान का भी उपयोग करें, जैसे यह सुनिश्चित करना कि आपके पास उन फ़ाइलों का बैकअप है जिनके बारे में आप स्क्रिप्ट चलाने वाले हैं। यह सही विकल्पों का उपयोग करने के लिए वास्तव में महत्वपूर्ण है, जैसे- rm कमांड के लिए, ताकि आपकी सहभागिता की आवश्यकता हो। इससे कुछ गलत गलतियों को रोका जा सकता है। जैसे, आपके द्वारा डाउनलोड की जाने वाली स्क्रिप्ट के माध्यम से पढ़ें और आपके पास मौजूद डेटा से सावधान रहें, बस अगर चीजें गलत हो जाती हैं.
उनके मूल में, स्क्रिप्ट केवल सादे पाठ फ़ाइलें हैं। आप उन्हें लिखने के लिए किसी भी टेक्स्ट एडिटर का उपयोग कर सकते हैं: gedit, emacs, vim, nano… यह सूची आगे बढ़ती है। बस इसे सादे पाठ के रूप में सहेजना सुनिश्चित करें, न कि समृद्ध पाठ या किसी शब्द दस्तावेज़ के रूप में। चूंकि मुझे नैनो का उपयोग करने में आसानी होती है, इसलिए मैं इसका उपयोग करूंगा.
स्क्रिप्ट अनुमतियाँ और नाम
लिपियों को कार्यक्रमों की तरह निष्पादित किया जाता है, और ऐसा होने के लिए उन्हें उचित अनुमतियों की आवश्यकता होती है। आप इस पर निम्नलिखित कमांड चलाकर स्क्रिप्ट को निष्पादन योग्य बना सकते हैं:
chmod + x ~ / somecrazyfolder / script1
इससे कोई भी उस विशेष स्क्रिप्ट को चला सकेगा। यदि आप इसके उपयोग को केवल अपने उपयोगकर्ता तक सीमित रखना चाहते हैं, तो आप इसके बजाय इसका उपयोग कर सकते हैं:
chmod u + x ~ / somecrazyfolder / script1
इस लिपि को चलाने के लिए, आपको उचित निर्देशिका में सीडी और फिर स्क्रिप्ट को इस तरह चलाना होगा:
सीडी ~ / somecrazyfolder
./ script1
चीजों को अधिक सुविधाजनक बनाने के लिए, आप अपने घर की निर्देशिका में "बिन" फ़ोल्डर में स्क्रिप्ट रख सकते हैं:
~ / Bin
कई आधुनिक डिस्ट्रोस में, यह फ़ोल्डर अब डिफ़ॉल्ट रूप से नहीं बनाया गया है, लेकिन आप इसे बना सकते हैं। यह आमतौर पर जहां निष्पादन योग्य फ़ाइलों को संग्रहीत किया जाता है जो आपके उपयोगकर्ता से संबंधित हैं और अन्य उपयोगकर्ताओं के लिए नहीं। लिपियों को यहाँ रखकर, आप बस अन्य कमांडों की तरह, उनके नाम को टाइप करके चला सकते हैं, बजाय इसके चारों ओर सीडी लगाने और './' उपसर्ग का उपयोग करने के लिए।.
इससे पहले कि आप एक स्क्रिप्ट का नाम दें, हालाँकि, आपको यह जाँचने के लिए निम्नलिखित कमांड होनी चाहिए कि क्या आपके पास कोई प्रोग्राम स्थापित है जो उस नाम का उपयोग करता है:
जो [कमांड]
बहुत सारे लोग अपनी शुरुआती स्क्रिप्ट को "परीक्षण" नाम देते हैं, और जब वे इसे कमांड-लाइन में चलाने की कोशिश करते हैं, तो कुछ भी नहीं होता है। ऐसा इसलिए है क्योंकि यह परीक्षण कमांड के साथ टकराव करता है, जो तर्कों के बिना कुछ भी नहीं करता है। हमेशा सुनिश्चित करें कि आपके स्क्रिप्ट के नाम कमांड के साथ संघर्ष नहीं करते हैं, अन्यथा आप अपने आप को ऐसी चीजें कर सकते हैं जो आप करने का इरादा नहीं रखते हैं!
स्क्रिप्टिंग दिशानिर्देश
जैसा कि मैंने पहले उल्लेख किया है, प्रत्येक स्क्रिप्ट फ़ाइल अनिवार्य रूप से सादा पाठ है। इसका मतलब यह नहीं है कि आप लिख सकते हैं कि आप क्या चाहते हैं। जब एक पाठ फ़ाइल को निष्पादित करने का प्रयास किया जाता है, तो गोले उनके माध्यम से सुराग के लिए पार्स करेंगे कि क्या वे स्क्रिप्ट हैं या नहीं, और कैसे सब कुछ ठीक से संभालना है। इस वजह से, कुछ दिशानिर्देश हैं जिन्हें आपको जानना आवश्यक है.
- हर लिपि "#! / बिन / बाश" के साथ होनी चाहिए
- हर नई लाइन एक नई कमांड है
- टिप्पणी लाइनें एक # से शुरू होती हैं
- कमांडों से घिरा हुआ है ()
हैश-बैंग हैक
जब शेल पाठ फ़ाइल के माध्यम से पार्स करता है, तो फ़ाइल को स्क्रिप्ट के रूप में पहचानने का सबसे सीधा तरीका आपकी पहली पंक्ति है:
#! / Bin / bash
यदि आप एक और शेल का उपयोग करते हैं, तो इसके पथ को यहां प्रतिस्थापित करें। टिप्पणी लाइनें हैश (#) के साथ शुरू होती हैं, लेकिन बैंग (!) और शेल पथ को जोड़ने के बाद यह एक तरह का हैक है जो इस टिप्पणी नियम को बायपास करेगा और स्क्रिप्ट को उस शेल के साथ निष्पादित करने के लिए मजबूर करेगा जिसे यह रेखा इंगित करती है.
नई पंक्ति = नई कमान
प्रत्येक नई पंक्ति को एक नई कमांड, या एक बड़ी प्रणाली का एक घटक माना जाना चाहिए। उदाहरण के लिए, अगर / फिर / अन्यथा बयान, कई लाइनों पर ले जाएगा, लेकिन उस प्रणाली के प्रत्येक घटक एक नई लाइन में है। एक कमांड को अगली लाइन में ब्लीड न करें, क्योंकि इससे पिछली कमांड को छोटा किया जा सकता है और आपको अगली लाइन पर एक एरर दे सकता है। यदि आपका टेक्स्ट एडिटर ऐसा कर रहा है, तो आपको सुरक्षित साइड में रहने के लिए टेक्स्ट-रैपिंग बंद कर देना चाहिए। आप नैनो बिट मार ALT + L में टेक्स्ट रैपिंग बंद कर सकते हैं.
अक्सर # के साथ टिप्पणी करें
यदि आप एक # के साथ एक लाइन शुरू करते हैं, तो लाइन को नजरअंदाज कर दिया जाता है। यह एक टिप्पणी लाइन में बदल जाता है, जहां आप खुद को याद दिला सकते हैं कि पिछली कमांड का आउटपुट क्या था, या अगला कमांड क्या करेगा। फिर से, टेक्स्ट रैपिंग बंद करें, या आप कई लाइनों में टिप्पणी करते हैं जो सभी एक हैश से शुरू करते हैं। बहुत सारी टिप्पणियों का उपयोग करना एक अच्छा अभ्यास है, क्योंकि यह आपको और अन्य लोगों को आपकी लिपियों को अधिक आसानी से ट्विक करने देता है। एकमात्र अपवाद उपरोक्त हैश-बैंग हैक है, इसलिए s के साथ #s का पालन न करें। ;-)
कोष्ठक से घिरा हुआ है
पुराने दिनों में, कमांड विकल्प एकल टिक मार्क (', शेयर ~ की) के साथ किए गए थे। हम अभी तक इसे छूने नहीं जा रहे हैं, लेकिन जैसा कि ज्यादातर लोग बंद हो जाते हैं और मूल बातें सीखने के बाद पता लगाते हैं, शायद यह उल्लेख करना एक अच्छा विचार है कि आपको इसके बजाय कोष्ठक का उपयोग करना चाहिए। यह मुख्य रूप से है क्योंकि जब आप घोंसला बनाते हैं - अन्य कमांड के अंदर कमांड डालते हैं - कोष्ठक बेहतर काम करते हैं.
आपकी पहली स्क्रिप्ट
आइए एक सरल स्क्रिप्ट के साथ शुरू करें जो आपको फ़ाइल नाम को कॉपी करने और फ़ाइल नाम के अंत में तारीखों को जोड़ने की अनुमति देता है। चलो इसे "डेटकप" कहते हैं। सबसे पहले, यह देखने के लिए जांचें कि क्या नाम कुछ के साथ टकराव करता है:
आप देख सकते हैं कि किस कमांड का कोई आउटपुट नहीं है, इसलिए हम इस नाम का उपयोग करने के लिए पूरी तरह तैयार हैं.
चलो ~ / बिन फ़ोल्डर में एक खाली फ़ाइल बनाएँ:
टच ~ / बिन / datecp
और, हम अब भूल जाने से पहले अनुमति बदल दें:
चलो हमारी स्क्रिप्ट का निर्माण शुरू करते हैं। अपनी पसंद के टेक्स्ट एडिटर में उस फाइल को खोलें। जैसा मैंने कहा, मुझे नैनो की सादगी पसंद है.
नैनो ~ / बिन / datecp
और, चलो आगे बढ़ते हैं और पूर्वापेक्षा की पहली पंक्ति में डालते हैं, और इस स्क्रिप्ट के बारे में एक टिप्पणी करते हैं.
अगला, एक चर घोषित करते हैं। यदि आपने कभी बीजगणित लिया है, तो आप शायद जानते हैं कि यह क्या है। एक चर हमें जानकारी संग्रहीत करने और इसके साथ काम करने की अनुमति देता है। अन्यत्र संदर्भित होने पर चर "विस्तार" कर सकते हैं। यही है, वे अपना नाम प्रदर्शित करने के बजाय, अपनी संग्रहीत सामग्री प्रदर्शित करेंगे। आप बाद में विभिन्न सूचनाओं को संग्रहीत करने के लिए उसी चर को बता सकते हैं, और उसके बाद होने वाले किसी भी निर्देश को नई जानकारी का उपयोग करेंगे। यह वास्तव में फैंसी प्लेसहोल्डर है.
हम बाहर चर में क्या डालेंगे? खैर, चलो तारीख और समय की दुकान! ऐसा करने के लिए, हम तिथि आदेश पर कॉल करेंगे.
दिनांक कमांड के आउटपुट का निर्माण कैसे करें, इसके लिए नीचे दिए गए स्क्रीनशॉट पर एक नज़र डालें:
आप देख सकते हैं कि% के साथ शुरू होने वाले अलग-अलग चर जोड़कर, आप कमांड के आउटपुट को बदल सकते हैं जो आप चाहते हैं। अधिक जानकारी के लिए, आप डेट कमांड के लिए मैनुअल पेज देख सकते हैं.
आइए, दिनांक कमांड के उस अंतिम पुनरावृत्ति का उपयोग करें, "दिनांक +% m_% d_% y-% H.% M.% S", और हमारी स्क्रिप्ट में उसका उपयोग करें.
यदि हम अभी इस स्क्रिप्ट को सहेजते हैं, तो हम इसे चला सकते हैं और यह हमें तारीख कमांड का आउटपुट देगा जैसे हम उम्मीद करेंगे:
लेकिन, चलो कुछ अलग करते हैं। इस कमांड को date_formatted जैसा एक वैरिएबल नाम दें। इसके लिए उचित सिंटैक्स निम्नानुसार है:
चर = $ (कमांड-अडॉप्शन तर्क)
और हमारे लिए, हम इसे इस तरह से बनाएंगे:
date_formatted = $ (दिनांक +% m_% d_% y-% H.% M.% S)
इसे हम कमांड प्रतिस्थापन कहते हैं। हम अनिवार्य रूप से बता रहे हैं कि जब भी चर "date_formatted" दिखाता है, कोष्ठक के अंदर कमांड चलाने के लिए। फिर, जो भी आउटपुट कमांड देता है, उसे वेरिएबल के नाम के बजाय प्रदर्शित किया जाना चाहिए, "date_formatted".
यहाँ एक उदाहरण स्क्रिप्ट और इसका आउटपुट है:
ध्यान दें कि आउटपुट में दो स्थान हैं। इको कमांड के कोट्स के भीतर का स्पेस और वेरिएबल के सामने का स्पेस दोनों ही प्रदर्शित होते हैं। यदि आप उन्हें दिखाना नहीं चाहते तो रिक्त स्थान का उपयोग न करें। यह भी ध्यान दें कि इस "इको" लाइन के बिना, स्क्रिप्ट बिल्कुल कोई आउटपुट नहीं देगी.
आइए अपनी स्क्रिप्ट पर वापस जाएं। चलिए अगले कमांड के प्रतिलिपि भाग में जोड़ते हैं.
cp -iv $ 1 $ 2. $ date_formatted
यह -i और -v विकल्पों के साथ कॉपी कमांड को इनवाइट करेगा। पूर्व आपसे एक फ़ाइल अधिलेखित करने से पहले सत्यापन के लिए पूछेगा, और बाद वाला प्रदर्शित करेगा कि कमांड-लाइन पर क्या हो रहा है.
अगला, आप देख सकते हैं कि मैंने "$ 1" विकल्प जोड़ा है। जब स्क्रिप्टिंग, एक डॉलर चिह्न ($) एक संख्या के बाद होता है, तो उस स्क्रिप्ट के उस गिने हुए तर्क को निरूपित करेगा जब इसे लागू किया गया था। उदाहरण के लिए, निम्नलिखित कमांड में:
cp -iv Trogdor2.mp3 ringtone.mp3
पहला तर्क "Trogdor2.mp3" है और दूसरा तर्क "Ringt.mp3" है.
हमारी स्क्रिप्ट पर पीछे मुड़कर देखें, तो हम देख सकते हैं कि हम दो तर्क दे रहे हैं:
इसका मतलब है कि जब हम स्क्रिप्ट चलाते हैं, तो हमें स्क्रिप्ट को सही ढंग से चलाने के लिए दो तर्क देने होंगे। पहला तर्क, $ 1, वह फ़ाइल है जिसे कॉपी किया जाएगा, और जिसे "cp -iv" कमांड के पहले तर्क के रूप में प्रतिस्थापित किया गया है.
दूसरा तर्क, $ 2, उसी कमांड के आउटपुट फ़ाइल के रूप में कार्य करेगा। लेकिन, आप यह भी देख सकते हैं कि यह अलग है। हमने एक अवधि जोड़ी है और हमने ऊपर से "date_formatted" चर संदर्भित किया है। यह क्या करता है के रूप में उत्सुक?
यहाँ क्या होता है जब स्क्रिप्ट चलती है:
आप देख सकते हैं कि आउटपुट फ़ाइल को मैंने $ 2 के लिए जो कुछ भी दर्ज किया है, उसके बाद की अवधि के बाद सूचीबद्ध किया गया है; समझ में आता है, सही है?
अब जब मैं डेटकैप कमांड चलाता हूं, तो यह इस स्क्रिप्ट को चलाएगा और मुझे किसी भी फाइल को एक नए स्थान पर कॉपी करने की अनुमति देगा, और स्वचालित रूप से फ़ाइल का नाम समाप्त होने की तारीख और समय जोड़ देगा। सामान संग्रह करने के लिए उपयोगी है!
शेल स्क्रिप्टिंग आपके ओएस को आपके लिए काम करने के दिल में है। आपको ऐसा करने के लिए एक नई प्रोग्रामिंग भाषा सीखने की ज़रूरत नहीं है। घर पर कुछ बुनियादी आदेशों के साथ स्क्रिप्टिंग का प्रयास करें और यह सोचना शुरू करें कि आप इसके लिए क्या उपयोग कर सकते हैं.
क्या आप स्क्रिप्ट? Newbies के लिए कोई सलाह है? टिप्पणियों में अपने विचारों का साझा करें! इस श्रृंखला में आने के लिए और भी बहुत कुछ है!