توسعه دهندگان که تجربه زیادی در ساخت نرم افزار سفت و سخت و با کیفیت دارند ، تمایل دارند با نوشتن اسکریپت ها بیشتر کار خود را به صورت خودکار انجام دهند. این اسکریپت ها از نام مستعار ساده متغیر هستند bash دستورات مربوط به تکراری کرون که اجرا می شود روی یک سرور

در این آموزش ، شما در مورد اینکه اسکریپت ها چیست ، بسیاری از موارد استفاده آن و برخی از مزایا و مضرات استفاده از اسکریپت ها می آموزید. ما همچنین چند اسکریپت مثال را طی خواهیم کرد تا بتوانید آنها را در عمل مشاهده کنید.

فیلمنامه چیست؟

یک اسکریپت مجموعه ای از دستورالعمل هایی است که به هر زبان اسکریپت (مانند Bash ، Python ، JavaScript و دیگران) نوشته شده است که به شما کمک می کند تا کارها یا فرآیندهای کنترل را خودکار کنید. بر خلاف برنامه های کامپایل شده ، اسکریپت ها به طور معمول تفسیر می شوند ، به این معنی که آنها مستقیماً توسط یک محیط زمان اجرا و بدون تدوین قبلی اجرا می شوند.

اسکریپت ها ابزارهای قدرتمندی برای خودکارسازی کارهای تکراری ، مدیریت گردش کار و حل مشکلات کوچک (و گاه بزرگ) هستند. این که آیا شما یک مبتدی هستید یا یک توسعه دهنده با تجربه ، درک روش نوشتن اسکریپت ها می تواند باعث افزایش بهره وری شما و گسترش قابلیت های فنی شما شود.

چرا اسکریپت می نویسیم؟

من قبلاً لمس کردم روی کاری که می توانید با اسکریپت ها انجام دهید. بنابراین بیایید به برخی از مزایای آنها (و چالش ها نیز) بپردازیم ، بنابراین شما می دانید که چرا آنها اینقدر قدرتمند هستند – و چه موقع از آنها استفاده کنید.

مزایای اسکریپت ها

  1. اتوماسیون: اسکریپت ها می توانند به شما در ساده کردن وظایف تکراری مانند پردازش داده ها یا مدیریت پرونده کمک کنند.

  2. کارآیی: آنها همچنین می توانند با خودکار کردن کارهایی که در غیر این صورت مجبور به انجام دستی هستید ، در وقت شما صرفه جویی کنید.

  3. کاهش خطا: اسکریپت ها می توانند از طریق اجرای مداوم دستورالعمل ها به کاهش خطاهای انسانی کمک کنند.

  4. انعطاف پذیری: اسکریپت ها می توانند با حداقل اصلاحات با طیف گسترده ای از وظایف سازگار شوند.

  5. ادغام: آنها همچنین می توانند یکپارچه با سایر سیستم ها ، ابزارها یا گردش کار ادغام شوند.

چالش های اسکریپت

  1. عملکرد: اسکریپت ها به دلیل تفسیر سربار می توانند کندتر از برنامه های گردآوری باشند.

  2. مقیاس پذیری: آنها همیشه برای کارهای در مقیاس بزرگ یا بسیار پیچیده مناسب نیستند.

  3. اشکال زدایی: اسکریپت های اشکال زدایی گاهی اوقات به دلیل ماهیت پویا آنها می توانند چالش برانگیز باشند.

  4. خطرات امنیتی: اسکریپت های ضعیف مکتوب می توانند آسیب پذیری ها را در معرض دید خود قرار دهند ، به خصوص اگر دستورات سطح سیستم را اجرا کنند.

چه موقع از اسکریپت استفاده نکنید

اسکریپت ها برای:

  1. کارها ساده ، به خوبی تعریف شده یا یک طرفه هستند

  2. نمونه سازی یا خودکار کردن سریع process

  3. دامنه به اندازه کافی کوچک است که از پیچیدگی جلوگیری می شود

اسکریپت ها برای:

  1. وظایف مهم عملکردی که نیاز به راندمان بالا دارند. به جای اسکریپت ، سعی کنید از یک ابزار اختصاصی ETL (استخراج ، تبدیل ، بار) یا یک کارگزار پیام یا ابزارهای جایگزین مشابه متناسب با مورد استفاده شما استفاده کنید.

  2. برنامه های کاربردی با رابط های کاربر گسترده. در عوض ، می توانید یک برنامه کوچک یا یک سیستم مدولار با ورود به سیستم مناسب ، آزمایش و مستندات ایجاد کنید.

  3. سناریوهای نیاز به تعمیر و نگهداری طولانی مدت ، که در آن برنامه های گردآوری شده ممکن است پایدارتر باشد. در عوض ، از برنامه ریزان وظیفه یا مدیران گردش کار مانند CRON استفاده کنید ، Airflow، توابع AWS Lambda/GCP.

روش نوشتن اسکریپت های مؤثر

این است process من برای نوشتن اسکریپت های مفید استفاده می کنم. بعد از این کار ، نمونه هایی از اسکریپت ها را به زبان های مختلف مشاهده خواهیم کرد تا بتوانید دست به دست هم دهیدon تمرین

  1. مشکل را تعریف کنید: قبل از نوشتن یک اسکریپت ، مشکلی را که حل خواهد کرد ، مشخص کنید. در مورد وظایف خودکار و نتایج مورد انتظار واضح باشید.

  2. زبان درست را انتخاب کنید:

    • ضربه شدید: ایده آل برای کارهای سطح سیستم مانند عملیات فایل یا مدیریت سرور.

    • پایتون: عالی برای پردازش داده ها ، خراش وب و اتوماسیون پیچیده تر.

    • جاوا اسکریپت: مناسب برای توسعه وب و اتوماسیون مبتنی بر مرورگر.

  3. اسکریپت را بنویسید: از ویرایشگر متن یا یک محیط توسعه یکپارچه (IDE) استفاده کنید و اطمینان حاصل کنید که بهترین شیوه ها مانند استفاده از نظرات ، نام های متغیر معنی دار و کد مدولار را دنبال می کنید. ما این موارد را در زیر پوشش خواهیم داد.

  4. اسکریپت را تست کنید: اسکریپت را در یک محیط کنترل شده آزمایش کنید تا اطمینان حاصل شود که مانند انتظار می رود بدون ایجاد خطا انجام شود.

  5. اجرای و استقرار: فیلمنامه را در محیط مورد نظر خود اجرا کنید. در صورت لزوم ، اجرای آن را با استفاده از ابزارهایی مانند Cron (برای Bash) یا برنامه ریزان وظیفه برنامه ریزی کنید.

اسکریپت های مثال

اکنون که اصول را می دانید ، بیایید تمرین کنیم. فرض کنید حدود 100 پرونده با نام “PART-PART-1.pdf” ، “Book-Part-2.pdf” ، … ، “Book-Part-100.pdf” دارید. شما می خواهید تمام hyphens (-) را در نام پرونده ها با زیرکرها (_) جایگزین کنید ، زیرا وب سایت که در آن می خواهید این اسناد را بارگذاری کنید ، به شما امکان نمی دهد پرونده ها را با نام های حاوی Hyphens بارگذاری کنید.

در اینجا اسکریپت هایی که به سه زبان مختلف نوشته شده اند که همگی یک عمل را انجام می دهند. در process به نظر می رسد این:

  1. تمام پرونده ها را در یک فهرست پیدا کنید ،

  2. بررسی کنید که آیا آنها حاوی hyphens (-) به نام خود هستند ، و

  3. هر نوع Hyphens را با زیرنویس (_) جایگزین کنید.

در اینجا نام پرونده ها برای شروع (حاوی Hyphens) آورده شده است:

نام پرونده ها با هیفن

اسکریپت

ما با یک شروع خواهیم کرد bash فیلمنامه اینجا است:

#!/bin/bash
# Replace "-" with "_" in file names
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

ما دایرکتوری (پوشه) را در قسمت بالایی که پرونده های ما در آن قرار دارند تعریف می کنیم. برای هر پرونده در فهرست ، ما بررسی می کنیم که آیا این نام حاوی a است -بشر در چنین حال ، ما یک نام پرونده جدید ایجاد می کنیم و آن را در متغیر ذخیره می کنیم NEW_NAME با کپی کردن نام پرونده قدیمی با استفاده از echo فرمان و جایگزین کنید - با _ با استفاده از sed فرمان سرانجام ما از دستور حرکت استفاده می کنیم mv با نام پرونده های قدیمی و جدید به عنوان آرگومان.

اسکریپت پایتون

بعد ، بیایید ببینیم که در پایتون چگونه به نظر می رسد:

import os
# Replace "-" with "_" in file names
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}")

مراحل در پایتون بسیار مشابه است. ابتدا دایرکتوری را تعریف می کنیم و سپس از طریق هر پرونده در دایرکتوری تکرار می کنیم. برای یافتن همه پرونده ها در فهرست ، باید از آن استفاده کنیم listdir روش از os بسته بندی

سپس بررسی می کنیم که آیا نام پرونده حاوی یک است - در خط بعدی در چنین حالتی ، مسیر فعلی را پیدا می کنیم (old_path) از پرونده با ادغام دایرکتوری و نام پرونده آن. ما می توانیم با جایگزینی نام پرونده جدید ایجاد کنیم - با _ با استفاده از replace روش

سپس مسیر پرونده جدید را تولید می کنیم (new_path) به روش مشابه ما تولید می کنیم old_pathبشر سرانجام ، ما تماس می گیریم rename در os بسته بندی با مسیرهای پرونده قدیمی و جدید به عنوان آرگومان.

اسکریپت جاوا اسکریپت

و حال بیایید ببینیم که چگونه در JavaScript به نظر می رسد:

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}`);
                }
            });
        }
    });
});

اجرای JavaScript تا حدودی شبیه به اجرای پایتون است – اما شما باید کد بیشتری بنویسید. به طور کلی ، Devs JavaScript را برای این نوع اسکریپت ها ترجیح نمی دهد. بیشتر آنها تکیه می کنند روی باش/پایتون. JavaScript برای اسکریپت های اتوماسیون مبتنی بر مرورگر مناسب تر است.

با این حال ، بیایید ببینیم چه چیزی در اینجا داریم. در این کد JavaScript ، شما باید از دو بسته مختلف استفاده کنید ، fs وت pathبشر ما دایرکتوری را در بالا تعریف می کنیم ، پرونده ها را در فهرست با استفاده از آن می خوانیم readdir روش از fs بسته بندی کنید و دایرکتوری را به عنوان استدلال منتقل کنید. همراه با دایرکتوری ، ما همچنین یک عملکرد پاسخ به تماس را منتقل می کنیم که پس از خواندن پرونده ها اجرا می شود.

در داخل عملکرد پاسخ به تماس ، ما از طریق هر پرونده حلقه می کنیم و بررسی می کنیم که آیا نام پرونده شامل یک Hyphen است (-). اگر این کار را انجام دهد ، ما مسیر قدیمی را با استفاده از path بسته بندی با دایرکتوری و نام پرونده به عنوان آرگومان. سپس با جایگزینی تمام Hyphens با استفاده از زیرنویس ها ، نام پرونده جدید را می سازیم replace روش

مشابه مسیر قدیمی ، ما مسیر جدید را با استفاده از نام پرونده جدید به عنوان آرگومان می یابیم. سپس ما از rename روش از fs بسته بندی برای تغییر نام پرونده با عبور از نام پرونده های قدیمی و جدید. اگر هنگام تغییر نام یا خواندن پرونده ها در یک فهرست ، خطایی وجود دارد ، پیام خطا را وارد می کنیم. در غیر این صورت ، ما پیام موفقیت را وارد می کنیم.

روش اجرای این اسکریپت ها

خوب ، در اینجا چگونه می توانید از این اسکریپت ها استفاده کنید:

  1. تعویض کردن /path/to/your/folder با دایرکتوری واقعی حاوی پرونده ها.

  2. فیلمنامه را در محیط مربوطه اجرا کنید:

    • ضربه شدید: ذخیره به عنوان یک .sh پرونده ، سپس با bash script.sh

    • پایتون: ذخیره به عنوان یک .py پرونده ، سپس با python script.py

    • جاوا اسکریپت: ذخیره به عنوان یک .js پرونده ، سپس با node script.js

تصویر زیر نشان می دهد که bash اسکریپت برای تغییر نام پرونده ها.

نام پرونده ها را با استفاده از bash فیلمنامه

پس از اجرای اسکریپت ، Hyphens در نام پرونده با زیرین جایگزین می شوند

اسکریپت های مکرر

اسکریپت های مکرر برای اجرای در فواصل منظم ، مانند بررسی هفتگی وضعیت سیستم ، تمیز کردن سیاهههای مربوط یا به روزرسانی داده ها طراحی شده اند. این اسکریپت ها به طور معمول از نوعی برنامه ریز وظیفه استفاده می کنند.

رویکردهای مشترک

  1. مشاغل Cron: بیشتر سیستم عامل ها از CRON پشتیبانی می کنند ، که می تواند اسکریپت ها را برانگیخته کند روی یک برنامه تعریف شده

  2. صف کار: ابزارهایی مانند کرفس (پایتون) ، گاو نر (node.js) یا sidekiq (Ruby) می تواند مشاغل برنامه ریزی شده را با انعطاف پذیری بیشتر انجام دهد.

  3. برنامه ریزان ابر: خدماتی مانند AWS Lambda با Eventbridge ، Google Cloud Scheduler یا برنامه های Azure Logic به شما امکان می دهد اسکریپت های مکرر را در یک معماری بدون سرور تنظیم کنید.

یک مورد خوب استفاده از نمونه خوب برای اسکریپت های مکرر ارسال گزارش روزانه/هفتگی از استفاده/عملکرد سیستم شما است. شما می توانید یک اسکریپت بنویسید که تعداد کاربرانی را که به محصول شما پیوسته و مشترک شده اند پیدا کند و هر روز/هفته آن گزارش را به عنوان ایمیل ارسال کند.

بهترین روشها برای نوشتن اسکریپت ها

در اینجا مواردی وجود دارد که باید هنگام نوشتن اسکریپت ها به خاطر داشته باشید:

1. از نظرات استفاده کنید: بخش های پیچیده فیلمنامه را با نظرات توضیح دهید.

در مثال زیر ، بدون اظهار نظر ، ممکن است کسی مجبور شود وقت بیشتری را صرف تشخیص دهد که چرا نرخ مالیات اعشاری است و درصدی نیست.

# Calculate the total price with tax
def calculate_price_with_tax(price, tax_rate):
    # Tax rate is expressed as a decimal (e.g., 0.07 for 7%)
    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):
    # Fetch data from the given API
    pass

def process_data(data):
    # Process the data into the desired format
    pass

def save_to_file(data, filename):
    # Save processed data to a file
    pass

# Main script
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

# Validate that the input is a valid email address
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

# Example usage
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"

پایان

نوشتن اسکریپت ها مهارتی است که می تواند باعث افزایش چشمگیر بهره وری و توانایی های حل مسئله شما شود. با درک اصول اولیه زبان های اسکریپت مانند Bash ، Python و JavaScript ، می توانید وظایف خود را به صورت خودکار انجام دهید ، گردش کار را ساده کنید و زمان ارزشمندی را صرفه جویی کنید. کوچک را شروع کنید ، به صورت تدریجی بسازید و نوشتن اسکریپت ها را برای موارد مختلف استفاده برای تسلط بر این مهارت ارزشمند تمرین کنید.

من یک تمرین برای شما دارم. برای اجرای و تأیید این اسکریپت مثال ، ممکن است فکر کنید که باید به صورت دستی 100 پرونده ایجاد کنید. این زمان زیادی را مصرف می کند.

من یک اسکریپت نوشتم تا آن 100 پرونده را تولید کنم. من همچنین توصیه می کنم که سعی کنید یک اسکریپت را بنویسید تا 100 پرونده با Hyphens را در نام پرونده های خود تولید کنید. سپس سعی کنید اسکریپت مثال را اجرا کنید تا Hyphens را به تأکید برسانید.

این ممکن است در ابتدا دشوار به نظر برسد ، اما باور کنید که شما فقط باید 5 خط بنویسید bash کد برای تولید 100 پرونده. نه فقط 100 – شما حتی می توانید یک میلیون/میلیارد/تریلیون پرونده با فقط 5 خط کد تولید کنید.

اگر می خواهید در مورد اسکریپت ها اطلاعات بیشتری کسب کنید ، در خبرنامه ایمیل من (https://5minslearn.gogosoon.com/) مشترک شوید و مرا دنبال کنید روی رسانه های اجتماعی

اسکریپت مبارک!