अनुभवी डेवलपर्स जो कठोर, गुणवत्तापूर्ण सॉफ़्टवेयर बनाने में माहिर हैं, वे अपना अधिकांश काम स्क्रिप्ट लिखकर स्वचालित कर लेते हैं। ये स्क्रिप्ट सरल बैश एलियास कमांड से लेकर सर्वर पर चलने वाले दोहराए जाने वाले क्रॉन ट्रिगर तक हो सकते हैं।
स्क्रिप्ट क्या है?
स्क्रिप्ट किसी भी स्क्रिप्टिंग भाषा (जैसे बैश, पायथन, जावास्क्रिप्ट, आदि) में लिखे गए निर्देशों का एक समूह है जो कार्यों को स्वचालित करने या प्रक्रियाओं को नियंत्रित करने में मदद करता है। संकलित प्रोग्राम के विपरीत, स्क्रिप्ट आमतौर पर इंटरप्रेटेड होती हैं, जिसका अर्थ है कि उन्हें पूर्व संकलन के बिना रनटाइम वातावरण द्वारा सीधे निष्पादित किया जाता है।
स्क्रिप्ट दोहराए जाने वाले कार्यों को स्वचालित करने, वर्कफ़्लो प्रबंधित करने, और छोटी (और कभी-कभी बड़ी) समस्याओं को कुशलतापूर्वक हल करने के लिए शक्तिशाली उपकरण हैं। चाहे आप नौसिखिया हों या अनुभवी डेवलपर, स्क्रिप्ट लिखना सीखना आपकी उत्पादकता बढ़ा सकता है और आपकी तकनीकी क्षमताओं का विस्तार कर सकता है।
स्क्रिप्ट क्यों लिखें?
मैं पहले ही बता चुका हूँ कि स्क्रिप्ट से आप क्या कर सकते हैं। अब आइए उनके फायदों (और चुनौतियों) पर नज़र डालते हैं ताकि आप समझ सकें कि वे इतने शक्तिशाली क्यों हैं - और कब उनका उपयोग करना चाहिए।
स्क्रिप्ट के फायदे
स्वचालन: स्क्रिप्ट डेटा प्रोसेसिंग या फ़ाइल प्रबंधन जैसे दोहराए जाने वाले कार्यों को सरल बनाने में मदद कर सकती हैं।
दक्षता: वे उन कार्यों को स्वचालित करके समय बचाते हैं जिन्हें अन्यथा आपको मैन्युअल रूप से करना पड़ता।
त्रुटि में कमी: स्क्रिप्ट निर्देशों के सुसंगत निष्पादन के माध्यम से मानवीय त्रुटियों को कम करने में मदद करती हैं।
लचीलापन: स्क्रिप्ट न्यूनतम संशोधन के साथ विभिन्न प्रकार के कार्यों के अनुकूल हो सकती हैं।
एकीकरण: वे अन्य प्रणालियों, उपकरणों या वर्कफ़्लो के साथ सहजता से एकीकृत हो सकते हैं।
स्क्रिप्ट के साथ चुनौतियाँ
प्रदर्शन: इंटरप्रिटेशन ओवरहेड के कारण स्क्रिप्ट संकलित प्रोग्राम की तुलना में धीमी हो सकती हैं।
स्केलेबिलिटी: वे बड़े पैमाने पर या अत्यधिक जटिल कार्यों के लिए हमेशा उपयुक्त नहीं होती हैं।
डिबगिंग: उनकी गतिशील प्रकृति के कारण स्क्रिप्ट को डीबग करना कभी-कभी चुनौतीपूर्ण हो सकता है।
सुरक्षा जोखिम: खराब लिखी गई स्क्रिप्ट कमजोरियों को उजागर कर सकती हैं, खासकर यदि वे सिस्टम-स्तरीय कमांड निष्पादित करती हैं।
स्क्रिप्ट का उपयोग कब करें और कब नहीं
स्क्रिप्ट के लिए आदर्श हैं:
सरल, अच्छी तरह से परिभाषित, या एकबारगी कार्य
प्रोटोटाइपिंग या किसी प्रक्रिया को त्वरित रूप से स्वचालित करना
दायरा इतना छोटा हो कि जटिलता से बचा जा सके
स्क्रिप्ट के लिए आदर्श नहीं हैं:
उच्च दक्षता की आवश्यकता वाले प्रदर्शन-महत्वपूर्ण कार्य। स्क्रिप्ट के बजाय, एक समर्पित ETL (एक्सट्रैक्ट, ट्रांसफॉर्म, लोड) टूल या मैसेज ब्रोकर, या आपके उपयोग के मामले में फिट होने वाले समान वैकल्पिक टूल आज़माएं।
व्यापक उपयोगकर्ता इंटरफ़ेस वाले एप्लिकेशन। इसके बजाय, आप उचित लॉगिंग, परीक्षण और दस्तावेज़ीकरण के साथ एक छोटा एप्लिकेशन या मॉड्यूलर सिस्टम बना सकते हैं।
ऐसे परिदृश्य जिनमें दीर्घकालिक रखरखाव की आवश्यकता होती है, जहां संकलित प्रोग्राम अधिक स्थिर हो सकते हैं। इसके बजाय, CRON, Airflow, AWS Lambda/GCP Functions जैसे टास्क शेड्यूलर या वर्कफ़्लो मैनेजर का उपयोग करें।
प्रभावी स्क्रिप्ट कैसे लिखें
यह वह प्रक्रिया है जिसका उपयोग मैं सहायक स्क्रिप्ट लिखने के लिए करता हूँ। इसके बाद, हम विभिन्न भाषाओं में कुछ उदाहरण स्क्रिप्ट देखेंगे ताकि आपको कुछ व्यावहारिक अभ्यास मिल सके।
समस्या को परिभाषित करें: स्क्रिप्ट लिखने से पहले, उस समस्या की पहचान करें जिसे यह हल करेगी। स्वचालित किए जाने वाले कार्यों और अपेक्षित परिणामों के बारे में स्पष्ट रहें।
सही भाषा चुनें:
बैश: फ़ाइल संचालन या सर्वर प्रबंधन जैसे सिस्टम-स्तरीय कार्यों के लिए आदर्श।
पायथन: डेटा प्रोसेसिंग, वेब स्क्रैपिंग, और अधिक जटिल स्वचालन के लिए बढ़िया।
जावास्क्रिप्ट: वेब विकास और ब्राउज़र-आधारित स्वचालन के लिए उपयुक्त।
स्क्रिप्ट लिखें: टेक्स्ट एडिटर या इंटीग्रेटेड डेवलपमेंट एनवायरनमेंट (IDE) का उपयोग करें, और सुनिश्चित करें कि आप कमेंट्स, सार्थक वेरिएबल नाम, और मॉड्यूलर कोड जैसे सर्वोत्तम प्रथाओं का पालन करते हैं। हम इसे नीचे कवर करेंगे।
स्क्रिप्ट का परीक्षण करें: नियंत्रित वातावरण में स्क्रिप्ट का परीक्षण करें ताकि यह सुनिश्चित हो सके कि यह त्रुटियों का कारण बने बिना अपेक्षा के अनुरूप प्रदर्शन करती है।
निष्पादित और तैनात करें: स्क्रिप्ट को उसके इच्छित वातावरण में चलाएं। यदि आवश्यक हो, तो Cron (बैश के लिए) या टास्क शेड्यूलर जैसे टूल का उपयोग करके इसके निष्पादन को शेड्यूल करें।
उदाहरण स्क्रिप्ट
अब जब आप मूल बातें जानते हैं, तो आइए कुछ अभ्यास करते हैं। मान लें कि आपके पास लगभग 100 फाइलें हैं जिनके नाम "book-part-1.pdf", "book-part-2.pdf", …, "book-part-100.pdf" हैं। आप फ़ाइल नामों में सभी हाइफ़न (-) को अंडरस्कोर (_) से बदलना चाहते हैं, क्योंकि जिस वेबसाइट पर आप ये दस्तावेज़ अपलोड करने का प्रयास कर रहे हैं, वह हाइफ़न वाले नामों वाली फ़ाइलों को अपलोड करने की अनुमति नहीं देती है।
यहां तीन अलग-अलग भाषाओं में लिखी गई स्क्रिप्ट हैं जो सभी एक ही ऑपरेशन करती हैं। प्रक्रिया इस तरह दिखती है:
एक डायरेक्टरी में सभी फाइलें ढूंढें,
जांचें कि क्या उनके नाम में हाइफ़न (-) हैं, और
किसी भी हाइफ़न को अंडरस्कोर (_) से बदलें।
शुरुआत में फ़ाइल नाम (हाइफ़न वाले):

बैश स्क्रिप्ट
हम बैश स्क्रिप्ट से शुरू करेंगे। यहां यह है:
#!/bin/bash # फ़ाइल नामों में "-" को "_" से बदलें DIRECTORY="/path/to/your/folder" for FILE in "$DIRECTORY"/*; do if [[ "$FILE" == *-* ]]; then NEW_NAME=$(echo "$FILE" | sed 's/-/_/g') mv "$FILE" "$NEW_NAME" echo "Renamed: $FILE -> $NEW_NAME" fi done
हम शीर्ष पर डायरेक्टरी (फ़ोल्डर) को परिभाषित करते हैं जहां हमारी फाइलें रहती हैं। डायरेक्टरी में प्रत्येक फाइल के लिए, हम जांचते हैं कि क्या नाम में - है। ऐसे मामले में, हम echo कमांड का उपयोग करके पुराने फ़ाइल नाम को कॉपी करके और sed कमांड का उपयोग करके - को _ से बदलकर एक नया फ़ाइल नाम बनाते हैं और इसे वेरिएबल NEW_NAME में संग्रहीत करते हैं। अंत में हम पुराने और नए फ़ाइल नामों को आर्गुमेंट के रूप में mv कमांड का उपयोग करते हैं।
पायथन स्क्रिप्ट
अब, आइए देखें कि यह पायथन में कैसा दिखेगा:
import os # फ़ाइल नामों में "-" को "_" से बदलें directory = "/path/to/your/folder" for filename in os.listdir(directory): if "-" in filename: old_path = os.path.join(directory, filename) new_filename = filename.replace("-", "_") new_path = os.path.join(directory, new_filename) os.rename(old_path, new_path) print(f"Renamed: {filename} -> {new_filename}")
पायथन में चरण काफी समान हैं। पहले, हम डायरेक्टरी को परिभाषित करते हैं और फिर डायरेक्टरी में प्रत्येक फाइल के माध्यम से पुनरावृति करते हैं। डायरेक्टरी में सभी फाइलों को खोजने के लिए, हमें os पैकेज से listdir मेथड का उपयोग करना होगा।
फिर हम अगली लाइन में जांचते हैं कि क्या फ़ाइल नाम में - है। ऐसे मामले में, हम डायरेक्टरी और उसके फ़ाइल नाम को मर्ज करके फ़ाइल का वर्तमान पथ (old_path) ढूंढते हैं। हम replace मेथड का उपयोग करके - को _ से बदलकर नया फ़ाइल नाम बना सकते हैं।
हम फिर old_path को जनरेट करने के समान तरीके से नया फ़ाइल पथ (new_path) जनरेट करते हैं। अंत में, हम os पैकेज में rename मेथड को पुराने और नए फ़ाइल पथ को आर्गुमेंट के रूप में पास करके कॉल करते हैं।
जावास्क्रिप्ट स्क्रिप्ट
और अब देखते हैं कि यह जावास्क्रिप्ट में कैसा दिखेगा:
const fs = require('fs'); const path = require('path'); const directory = '/path/to/your/folder'; fs.readdir(directory, (err, files) => { if (err) { console.error('Error reading directory:', err); return; } files.forEach(file => { if (file.includes('-')) { const oldPath = path.join(directory, file); const newFilename = file.replace(/-/g, '_'); const newPath = path.join(directory, newFilename); fs.rename(oldPath, newPath, err => { if (err) { console.error(`Error renaming ${file}:`, err); } else { console.log(`Renamed: ${file} -> ${newFilename}`); } }); } }); });
जावास्क्रिप्ट कार्यान्वयन पायथन कार्यान्वयन के समान है - लेकिन आपको अधिक कोड लिखना होगा। आमतौर पर, डेवलपर्स इस तरह की स्क्रिप्ट के लिए जावास्क्रिप्ट को प्राथमिकता नहीं देते हैं। उनमें से अधिकांश बैश/पायथन पर भरोसा करते हैं। जावास्क्रिप्ट ब्राउज़र-आधारित स्वचालन स्क्रिप्ट के लिए बेहतर अनुकूल है।
फिर भी, आइए देखते हैं कि हमारे पास यहां क्या है। इस जावास्क्रिप्ट कोड में, आपको दो अलग-अलग पैकेज, fs और path का उपयोग करना होगा। हम शीर्ष पर डायरेक्टरी को परिभाषित करते हैं, fs पैकेज से readdir मेथड का उपयोग करके डायरेक्टरी में फाइलें पढ़ते हैं, और डायरेक्टरी को आर्गुमेंट के रूप में पास करते हैं। डायरेक्टरी के साथ, हम एक कॉलबैक फ़ंक्शन भी पास करते हैं जो फाइलें पढ़े जाने के बाद निष्पादित होगा।
कॉलबैक फ़ंक्शन के अंदर, हम प्रत्येक फाइल के माध्यम से लूप करते हैं और जांचते हैं कि क्या फ़ाइल नाम में हाइफ़न (-) शामिल है। यदि हां, तो हम path पैकेज का उपयोग करके डायरेक्टरी और फ़ाइल नाम को आर्गुमेंट के रूप में पास करके पुराना पथ ढूंढते हैं। फिर हम replace मेथड का उपयोग करके सभी हाइफ़न को अंडरस्कोर से बदलकर नया फ़ाइल नाम बनाते हैं।
पुराने पथ के समान, हम नए फ़ाइल नाम को आर्गुमेंट के रूप में पास करके नया पथ ढूंढते हैं। फिर हम fs पैकेज से rename मेथड का उपयोग करके पुराने और नए फ़ाइल नामों को पास करके फ़ाइल का नाम बदलते हैं। यदि डायरेक्टरी में फ़ाइलों का नाम बदलने या पढ़ने के दौरान त्रुटियां होती हैं, तो हम त्रुटि संदेश लॉग करते हैं। अन्यथा, हम सफलता संदेश लॉग करते हैं।
इन स्क्रिप्ट को कैसे चलाएं
ठीक है, यहां बताया गया है कि आप वास्तव में इन स्क्रिप्ट का उपयोग कैसे कर सकते हैं:
/path/to/your/folderको फ़ाइलों वाली वास्तविक डायरेक्टरी से बदलें।संबंधित वातावरण में स्क्रिप्ट चलाएं:
बैश:
.shफ़ाइल के रूप में सहेजें, फिरbash script.shके साथ निष्पादित करेंपायथन:
.pyफ़ाइल के रूप में सहेजें, फिरpython script.pyके साथ निष्पादित करेंजावास्क्रिप्ट:
.jsफ़ाइल के रूप में सहेजें, फिरnode script.jsके साथ निष्पादित करें
नीचे दिया गया स्क्रीनशॉट फ़ाइलों के नाम बदलने के लिए बैश स्क्रिप्ट चलाने को दिखाता है।


आवर्ती स्क्रिप्ट
आवर्ती स्क्रिप्ट को नियमित अंतराल पर निष्पादित करने के लिए डिज़ाइन किया गया है, जैसे सिस्टम की स्थिति की साप्ताहिक जांच, लॉग की सफाई, या डेटा अपडेट लाना। ये स्क्रिप्ट आमतौर पर किसी न किसी प्रकार के टास्क शेड्यूलर का उपयोग करती हैं।
सामान्य दृष्टिकोण
CRON जॉब्स: अधिकांश ऑपरेटिंग सिस्टम CRON का समर्थन करते हैं, जो परिभाषित शेड्यूल के आधार पर स्क्रिप्ट को ट्रिगर कर सकता है।
टास्क क्यू: Celery (पायथन), Bull (Node.js), या Sidekiq (रूबी) जैसे टूल अधिक लचीलेपन के साथ शेड्यूल्ड जॉब को संभाल सकते हैं।
क्लाउड शेड्यूलर: AWS Lambda के साथ EventBridge, Google Cloud Scheduler, या Azure Logic Apps जैसी सेवाएं आपको सर्वरलेस आर्किटेक्चर में आवर्ती स्क्रिप्ट सेट करने की अनुमति देती हैं।
आवर्ती स्क्रिप्ट के लिए एक अच्छा उदाहरण उपयोग का मामला आपके सिस्टम के उपयोग/प्रदर्शन की दैनिक/साप्ताहिक रिपोर्ट भेजना होगा। आप एक स्क्रिप्ट लिख सकते हैं जो उन उपयोगकर्ताओं की संख्या ढूंढती है जो आपके उत्पाद से जुड़े और सब्सक्राइब किए हैं और उस रिपोर्ट को हर दिन/सप्ताह ईमेल के रूप में भेजते हैं।
स्क्रिप्ट लिखने के लिए सर्वोत्तम अभ्यास
स्क्रिप्ट लिखते समय ध्यान रखने योग्य कुछ बातें यहां दी गई हैं:
1. कमेंट्स का उपयोग करें: स्क्रिप्ट के जटिल हिस्सों को कमेंट्स के साथ समझाएं।
नीचे दिए गए उदाहरण में, कमेंट के बिना, किसी को यह पता लगाने में अतिरिक्त समय लग सकता है कि टैक्स दर दशमलव क्यों है न कि प्रतिशत।
# टैक्स के साथ कुल कीमत की गणना करें def calculate_price_with_tax(price, tax_rate): # टैक्स दर को दशमलव के रूप में व्यक्त किया जाता है (उदाहरण के लिए, 7% के लिए 0.07) return price + (price * tax_rate)
2. त्रुटि प्रबंधन: संभावित त्रुटियों का ध्यान रखें और उन्हें उचित तरीके से संभालें।
नीचे दिए गए उदाहरण में, यदि फ़ाइल गायब है, तो स्क्रिप्ट क्रैश नहीं होगी - इसके बजाय, यह एक सहायक त्रुटि संदेश दिखाएगी।
try: with open('data.csv', 'r') as file: data = file.readlines() except FileNotFoundError: print("Error: 'data.csv' file not found. Make sure the file exists before running the script.") except Exception as e: print(f"An unexpected error occurred: {e}")
3. मॉड्यूलर डिज़ाइन: स्क्रिप्ट को पुन: प्रयोज्य फ़ंक्शन या मॉड्यूल में विभाजित करें।
नीचे दिए गए उदाहरण में, कार्यक्षमता को छोटे, पुन: प्रयोज्य फ़ंक्शन में अलग करके, आप स्क्रिप्ट के कुछ हिस्सों को स्वतंत्र रूप से डीबग या पुन: उपयोग कर सकते हैं।
def fetch_data_from_api(api_url): # दिए गए API से डेटा लाएं pass def process_data(data): # डेटा को वांछित प्रारूप में प्रोसेस करें pass def save_to_file(data, filename): # प्रोसेस्ड डेटा को फ़ाइल में सहेजें pass # मुख्य स्क्रिप्ट if __name__ == "__main__": data = fetch_data_from_api("https://example.com/api") processed_data = process_data(data) save_to_file(processed_data, "output.json")
4. इनपुट सत्यापन: अप्रत्याशित त्रुटियों या सुरक्षा जोखिमों को रोकने के लिए उपयोगकर्ता इनपुट को मान्य करें।
सत्यापन के बिना, कोई अमान्य या दुर्भावनापूर्ण डेटा इनपुट कर सकता है (उदाहरण के लिए, कुछ परिदृश्यों में SQL इंजेक्शन स्ट्रिंग्स)।
import re # मान्य करें कि इनपुट एक वैध ईमेल पता है def validate_email(email): pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$' if not re.match(pattern, email): raise ValueError("Invalid email address format") return email # उदाहरण उपयोग try: user_email = validate_email(input("Enter your email: ")) print(f"Valid email: {user_email}") except ValueError as e: print(e)
5. संस्करण नियंत्रण: परिवर्तनों को ट्रैक करने के लिए Git या अन्य संस्करण नियंत्रण टूल का उपयोग करें।
यदि कोई परिवर्तन स्क्रिप्ट को तोड़ता है, तो आप git checkout का उपयोग करके आसानी से पिछले कमिट पर वापस जा सकते हैं। साथ ही, आप टीम के सदस्यों के साथ सहजता से सहयोग कर सकते हैं।
git init git add script.py git commit -m "Initial commit"
निष्कर्ष
स्क्रिप्ट लिखना एक कौशल है जो आपकी उत्पादकता और समस्या-समाधान क्षमताओं को काफी बढ़ा सकता है। बैश, पायथन और जावास्क्रिप्ट जैसी स्क्रिप्टिंग भाषाओं की मूल बातें समझकर, आप कार्यों को स्वचालित कर सकते हैं, वर्कफ़्लो को सुव्यवस्थित कर सकते हैं, और बहुमूल्य समय बचा सकते हैं। छोटी शुरुआत करें, क्रमिक रूप से निर्माण करें, और इस अमूल्य कौशल में महारत हासिल करने के लिए विभिन्न उपयोग के मामलों के लिए स्क्रिप्ट लिखने का अभ्यास करें।
आपके लिए एक अभ्यास है। इस उदाहरण स्क्रिप्ट को चलाने और सत्यापित करने के लिए, आप सोच सकते हैं कि आपको मैन्युअल रूप से 100 फ़ाइलें बनानी होंगी। इसमें बहुत समय लगता है।
मैंने उन 100 फ़ाइलों को उत्पन्न करने के लिए एक स्क्रिप्ट लिखी है। मैं यह भी अनुशंसा करूंगा कि आप हाइफ़न वाले फ़ाइल नामों के साथ 100 फ़ाइलें उत्पन्न करने के लिए एक स्क्रिप्ट लिखने का प्रयास करें। फिर हाइफ़न को अंडरस्कोर में बदलने के लिए उदाहरण स्क्रिप्ट चलाने का प्रयास करें।
यह शुरुआत में कठिन लग सकता है, लेकिन मेरा विश्वास करें, आपको 100 फ़ाइलें उत्पन्न करने के लिए केवल 5 लाइन बैश कोड लिखने की आवश्यकता है। न केवल 100 - आप केवल 5 लाइन कोड के साथ एक मिलियन/बिलियन/ट्रिलियन फ़ाइलें भी उत्पन्न कर सकते हैं।
यदि आप स्क्रिप्ट के बारे में अधिक जानना चाहते हैं, तो मेरे ईमेल न्यूज़लेटर (https://5minslearn.gogosoon.com/) की सदस्यता लें और सोशल मीडिया पर मेरा अनुसरण करें।
हैप्पी स्क्रिप्टिंग!
मुफ्त में कोड करना सीखें। freeCodeCamp के ओपन सोर्स पाठ्यक्रम ने 40,000 से अधिक लोगों को डेवलपर के रूप में नौकरी पाने में मदद की है। शुरू करें