ما هو ملف .sh؟ دليل سكربتات الشل وBash وLinux
- ٤ نوفمبر ٢٠٢٥
- ١٠:٥١ م
- دروس

مقدّمة
تُعدّ سكربتات Shell ركيزة إدارة أنظمة Linux و Unix، إذ توفّر قدرات أتمتة قوية تعزّز إنتاجية وكفاءة إدارة الأنظمة بشكل ملحوظ. ملف .sh هو سكربت مكتوب بلغة Shell — لغة برمجة متخصّصة لتفسير الأوامر وأتمتة المهام النظامية المتكرّرة.
سواء كنت مسؤول نظام يدير مئات الخوادم، أو مطوّرًا يؤتمت خطوط نشر، أو متحمّسًا لـ Linux يسعى لتطوير مهاراته التقنية، فإن فهم سكربتات Shell أمر أساسي. يشرح هذا الدليل الشامل ماهية ملفات .sh، وكيف تعمل، والتطبيقات المختلفة للـ Shell، مع أمثلة عملية واقعية لاستخدام السكربتات.
ما هو ملف .sh؟
تعريف
A .sh file is a plain text file containing a series of shell commands executed sequentially by a shell interpreter. The .sh extension indicates the file is a shell script, though many shell scripts omit this extension in practice.
تمثل سكربتات shell الجسر بين الاستخدام التفاعلي لسطر الأوامر والبرمجة الكاملة. تتيح لك:
-
أتمتة المهام المتكررة
-
دمج عدة أوامر في سير عمل معقدة
-
إنشاء أدوات إدارة قابلة لإعادة الاستخدام
-
جدولة عمليات الصيانة المؤتمتة
-
نشر التطبيقات برمجياً
الخصائص
Plain Text Format: Unlike compiled programs requiring compilation, shell scripts are human-readable text interpreted directly by the shell.
Interpreter-Based: Execution depends on the specified shell interpreter (Bash, Ksh, etc.), not the underlying system architecture.
سطر shebang: تبدأ معظم نصوص الصدفة بـ shebang (#!/bin/bash) يحدد أي مفسر صدفة سيُستخدم.
عبر المنصات: تعمل نصوص الصدفة باستمرار عبر أنظمة Unix/Linux مختلفة (بافتراض تثبيت الأصداف المناسبة).
التطبيقات في الواقع
-
سكربتات بدء التشغيل وإيقاف النظام
-
أتمتة النسخ الاحتياطي والاستعادة
-
مراقبة الخوادم والتنبيه
-
خطوط نشر التطبيقات
-
معالجة وتحليل ملفات السجل
-
توفير حسابات المستخدمين
-
أتمتة تكوين الشبكة
-
مهام صيانة قواعد البيانات
أساسيات Shell Scripting
ما هو الـ Shell؟
الـ shell هو مفسر أوامر يوفر واجهة بين المستخدمين ونواة نظام التشغيل. يقبل أوامر المستخدم ويفسرها وينفذ البرامج المقابلة.
وظائف الـ Shell:
-
قراءة وتحليل أوامر المستخدم
-
البحث عن البرامج القابلة للتنفيذ
-
تنفيذ البرامج بالوسائط المناسبة
-
معالجة إعادة توجيه الإدخال/الإخراج
-
إدارة التحكم في العمليات
-
تنفيذ بنى البرمجة (الحلقات، الشروط)
لماذا تستخدم سكربتات Shell؟
Automation: Execute complex sequences automatically without manual intervention.
Efficiency: Complete in seconds what might take hours manually.
الاتساق: ضمان عمليات متطابقة عبر أنظمة متعددة.
التوثيق: تَوثِّق تعليقات النص الإجراءات للرجوع إليها مستقبلًا.
Scalability: Scale operations from one server to hundreds without additional effort.
Recovery: Rebuild systems quickly using existing scripts.
تطبيقات Shell الشائعة
Bash (Bourne-Again Shell)
Market Share: ~95% of Linux systems
Creator: Brian Fox (GNU Project)
Features: شاملة feature set, scripting capabilities
البنية: متوافقة مع صدفة Bourne الأصلية
حالة الاستخدام: الافتراضي على معظم توزيعات Linux
Bash هو المعيار الفعلي لكتابة سكربتات shell على Linux. يوازن بين التوافق مع الـ shell الأصلية وتوفير ميزات حديثة.
Ksh (Korn Shell)
Creator: David Korn (AT&T Bell Labs)
Features: متقدم programming capabilities, faster execution
Syntax: Superset of Bourne shell
Use Case: Preferred on Unix systems (Solaris, AIX)
Advantages: أفضل performance for compute-intensive operations
لا يزال Ksh شائعاً في بيئات Unix المؤسسية، خاصةً على أنظمة Unix التجارية.
Sh (Bourne Shell)
Original POSIX Standard Shell
Creator: Stephen Bourne (AT&T Bell Labs)
Features: الحد الأدنى, standardized functionality
Modern Status: Largely historical; contemporary shells provide compatibility
يمثل Sh معيار POSIX، مما يضمن التوافق الأساسي عبر جميع الأنظمة الشبيهة بـ Unix.
Zsh (Z Shell)
Creator: Paul Falstad
Features: Interactive features, scripting capabilities
Modern Focus: Enhanced user experience over pure scripting
Use Case: Growing in popularity among developers
يمثل Zsh التطور الحديث للـ shell، ويوازن بين قوة الكتابة البرمجية والميزات التفاعلية الصديقة للمستخدم.
Tcsh/Csh
Csh Creator: Bill Joy (Berkeley)
Modern Version: Tcsh (enhanced csh)
Features: C-like syntax
Status: Declining usage, maintained primarily for compatibility
لا تزال مشتقات Csh موجودة على بعض الأنظمة لكنها تقدم مزايا متناقصة مقارنةً بـ Bash/Ksh.
Bash مقابل Ksh والصدفات الأخرى
جدول المقارنة
| Feature | Bash | Ksh | Zsh | Sh |
|---|---|---|---|---|
| سجل الأوامر | Yes | Yes | Yes | No |
| إكمال الأوامر | Basic | Basic | متقدم | No |
| المصفوفات | مفهرسة | مفهرسة + ترابطية | Yes | No |
| مطابقة الأنماط | أنماط glob | متقدم | متقدم | محدود |
| الدوال | Yes | Yes | Yes | Yes |
| الحساب | $(()) |
(()) |
$(()) |
محدود |
| التوافق مع POSIX | ~95% | 100% | ~90% | 100% |
| الأداء | Good | أفضل | Good | الأسرع |
| ميزات البرمجة النصية | شاملة | أكثر تقدمًا | الأكثر تقدمًا | الحد الأدنى |
| التوافق | ممتاز | ممتاز | Good | عالمي |
| منحنى التعلم | معتدل | معتدل | أكثر انحدارًا | الأسهل |
| الاستخدام النموذجي | Linux الافتراضي | Unix المؤسسي | اختيار المطورين | Compatibility |
When to Choose Each Shell
اختر Bash عندما:
-
أقصى توافق مع أنظمة Linux
-
العمل مع أدوات تتوقع بناء جملة Bash
-
ألفة الفريق مع Bash
-
بيئات تركز على Linux
اختر Ksh عندما:
-
العمليات الحرجة من حيث الأداء
-
Unix المؤسسي environments
-
التي تتطلب ميزات برمجة متقدمة
-
دعم أنظمة Unix القديمة
اختر Zsh عندما:
-
استخدام تفاعلي للصدفة ذو أولوية
-
متقدم user experience desired
-
بيئات تركز على المطورين
-
توزيعات Linux الحديثة
اختر Sh عندما:
-
يلزم أقصى قابلية نقل POSIX
-
دعم منصات Unix المتنوعة
-
تقليل التبعيات
-
التنفيذ خفيف الوزن أساسي
إنشاء سكربتات Shell وتنفيذها
Creating a Basic Shell Script
Step 1: Create Filetouch myscript.sh
Step 2: Edit Filenano myscript.sh
Step 3: Add Shebang and Commands#!/bin/bash
echo "Hello, World!"
date
Step 4: Make Executablechmod +x myscript.sh
Step 5: Execute./myscript.sh
Execution Methods
Direct Execution (requires executable permissions)./myscript.sh
Explicit Interpreterbash myscript.sh
Source Command (executes in current shell)source myscript.sh
or
. myscript.sh
Understanding the Shebang
The shebang (#!) specifies which interpreter executes the script:#!/bin/bash # Use Bash
#!/bin/ksh # Use Ksh
#!/usr/bin/env bash # Use Bash via environment (more portable)
#!/usr/bin/python # Use Python interpreter
البنية الأساسية لسكربتات Shell
Variables
# Variable assignment (no spaces around =)
name="John"
age=30
# Using variables
echo "Name: $name"
echo "Age: $age"
# Command substitution
current_date=$(date)
file_count=$(ls -1 | wc -l)
# Arrays (Bash)
fruits=("Apple" "Banana" "Cherry")
echo ${fruits} # Access first element
Conditional Statements
# If-else
if [ $age -gt 18 ]; then
echo "Adult"else
echo "Minor"
fi
# Case statement
case $day in
Monday)
echo "Start of week"
;;
Friday) echo "End of week"
;;
*)
echo "Midweek"
;;esac
Loops
# For loopfor i in 1 2 3 4 5; do echo "Number: $i"done# While loop
count=0
while [ $count -lt 5 ]; do echo "Count: $count" ((count++))
done
# Until loop
until [ $count -eq 10 ]; do
echo "Count: $count" ((count++))
done
Functions
# Function definitiongreet() {echo "Hello, $1!"}# Function with return valueadd() {return $(($1 + $2))}# Function calls
greet "Alice"add 5 3echo "Sum: $?" # $? holds return valueمفاهيم متقدّمة في كتابة السكربتات
Error Handling
#!/bin/bashset -e # Exit on error# Check command successif ! command_name; then echo "Command failed" exit 1fi# Trap errorstrap 'echo "Error on line $LINENO"' ERR
File Operations
# File existence checkingif [ -f "/path/to/file" ]; then echo "File exists"fi# Directory operationsif [ -d "/path/to/dir" ]; thenecho "Directory exists"fi# Read file line-by-linewhile IFS= read -r line; doecho "Line: $line"done < filename.txt
User Input
# Read from userread -p "Enter your name: " name
# Read multiple valuesread -p "Enter values: " val1 val2 val3
# Read into arrayread -a array_nameأمثلة عملية
System Backup Script
#!/bin/bash# Backup important directoriesBACKUP_DIR="/backup"TIMESTAMP=$(date +%Y%m%d_%H%M%S)echo "Starting backup..."# Create backup directorymkdir -p "$BACKUP_DIR"# Backup home directorytar -czf "$BACKUP_DIR/home_$TIMESTAMP.tar.gz" /home
# Backup system configurationtar -czf "$BACKUP_DIR/etc_$TIMESTAMP.tar.gz" /etc
echo "Backup complete: $BACKUP_DIR/home_$TIMESTAMP.tar.gz"
Disk Space Monitor
#!/bin/bashTHRESHOLD=80ALERT_EMAIL="[email protected]"# Check disk usagedisk_usage=$(df / | awk 'NR==2 {print $5}' | cut -d'%' -f1)if [ $disk_usage -gt $THRESHOLD ]; thenecho "Disk usage critical: $disk_usage%" | mail -s "Alert" $ALERT_EMAILecho "Alert sent to $ALERT_EMAIL"fi
User Account Provisioning
#!/bin/bashread -p "Enter username: " usernameread -p "Enter email: " email
# Create useruseradd -m -s /bin/bash "$username"# Set password (prompt method recommended)echo "Set password for $username:"passwd "$username"# Add to groupsusermod -aG sudo "$username"echo "User $username created successfully"لماذا تعتمد إدارة الخوادم البعيدة على سكربتات Shell
يقوم مسؤولو الأنظمة الذين يديرون الخوادم البعيدة عبر اتصالات RDP أو SSH بتنفيذ نصوص الصدفة بشكل متكرر من أجل:
-
عمليات النشر الآلية: نشر التطبيقات عبر خوادم متعددة في وقت واحد
-
صيانة النظام: جدولة وتنفيذ مهام الصيانة الروتينية
-
Monitoring: Continuously monitor system health and log anomalies
-
Backup Operations: Automate critical data backup procedures
-
تحديثات الأمان: نشر تصحيحات الأمان عبر البنية التحتية
Professional remote desktop management platforms like RDP.Monster enable shell script execution across enterprise infrastructure:
إدارة بنية Linux التحتية مع RDP.Monster
إدارة Linux المؤسسية
-
وصول SSH لتنفيذ نصوص الصدفة عن بُعد
-
قدرات النشر الآلي
-
العمليات الدفعية عبر خوادم متعددة
-
المراقبة والتنبيه في الوقت الفعلي
حلول VPS لبنية النصوص البرمجية
-
موارد مخصصة للنصوص البرمجية كثيفة الحوسبة
-
جدولة دائمة لمهام cron
-
وقت تشغيل موثوق للعمليات المجدولة
-
بنية تحتية قابلة للتوسع لتعقيد النصوص البرمجية المتنامي
Deploy enterprise Linux infrastructure for sophisticated shell script operations with RDP.Monster
خلاصة
Shell scripts represent a powerful automation tool essential for Linux system administration and development. Understanding .sh files, shell implementations, and scripting techniques enables IT professionals to dramatically increase productivity, ensure consistency, and manage complex infrastructure efficiently.
سواء كنت تستخدم Bash على Linux أو Ksh على Unix المؤسسي أو Zsh للتطوير التفاعلي، فإن إتقان البرمجة النصية للصدفة يفصل المسؤولين القادرين عن المؤهلين فقط. الاستثمار في تطوير مهارات برمجة نصية قوية يوفر عوائد لعقود من إدارة أنظمة Linux.
Managing complex Linux infrastructure requiring sophisticated automation? RDP.Monster provides SSH access and VPS infrastructure optimized for running mission-critical shell scripts at scale. Explore Linux-friendly VPS solutions today.
استضافة VPS لينكس قوية
استمتع بتحكّم كامل وأداء فائق السرعة مع VPS لينكس لدينا. مثاليّ لاستضافة التطبيقات وإدارة الخوادم وتحسين سير العمل.
خوادم مخصّصة عالية الأداء
هل تحتاج إلى أقصى تحكّم وقوة؟ توفّر خوادمنا المخصّصة أداءً لا مثيل له للمهام المتطلّبة.
الأسئلة الشائعة
ما الفرق بين سكربتات .sh وسكربتات bash؟
سكربت bash يعمل بامتداد .sh، لكن ليس كل سكربت .sh هو bash.
هل أستخدم #!/bin/bash أم #!/usr/bin/env bash؟
لماذا تفشل سكربتاتي عند تشغيلها من cron؟
استخدم مسارات مطلقة، واضبط متغيّرات البيئة بشكل صريح، وحدّد المسار الكامل للمفسّر في shebang.
كيف أجعل السكربت قابلًا للتنفيذ؟
هل يمكنني تشغيل سكربتات Shell على Windows؟
يفضّل Windows الأصلي استخدام PowerShell للأتمتة.
ما الفرق بين الأمرين . و source؟
source أكثر وضوحًا، بينما . متوافق مع الصدفات القديمة.
كيف أصحّح أخطاء سكربت Shell؟
استخدم bash -x scriptname.sh لتتبع التنفيذ سطرًا بسطر، أو أضف set -x داخل السكربت.
هل يمكنني تمرير وسائط إلى سكربتات Shell؟
استخدم المعطيات الموضعية: $1 (الوسيط الأول)، و$2 (الثاني)، وهكذا. ويحتوي $@ على جميع الوسائط.
مقالات ذات صلة




