0Pricing
Linux Command Line & Bash Scripting Mastery · درس

أفضل ممارسات كتابة Scripts والفحص البرمجي

تعلّموا معايير كتابة التعليمات البرمجية والتعليقات واستخدام أدوات مثل ShellCheck لكتابة Bash scripts نظيفة ومقروءة وخالية من الأخطاء.

أفضل ممارسات كتابة Scripts والفحص البرمجي درس مجاني في Linux Command Line & Bash Scripting Mastery على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Linux Command Line & Bash Scripting Mastery، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Linux Command Line & Bash Scripting Mastery 4 دروس في المجموع.

لماذا نحتاج إلى أفضل ممارسات كتابة البرامج النصية؟

تُعدّ كتابة برامج Bash النصية قوية، لكن من دون عادات جيدة قد يصعب فهم البرامج النصية وصيانتها وتصحيح أخطائها.

أفضل الممارسات هي إرشادات تساعدكم على كتابة شيفرة نظيفة ومتينة وسهلة القراءة. وهي تجعل برامجكم النصية:

  • أسهل قراءة: لكم وللآخرين.
  • أسهل صيانة: أبسط في التحديث أو الإصلاح.
  • أقل عرضة للأخطاء: فتمنع الأخطاء الشائعة.
  • أفضل للتعاون: من خلال توحيد شكل الشيفرة وسلوكها.

التعليقات من أجل الوضوح

تُعدّ التعليقات ضرورية لشرح سبب تنفيذ الشيفرة لأمر ما، وليس فقط ما الذي تنفذه. وهي بمثابة ملاحظات لكم في المستقبل أو للمطورين الآخرين.

استخدموا التعليقات من أجل:

  • وصف الغرض العام من البرنامج النصي في بدايته.
  • شرح المنطق المعقد أو الأقسام صعبة الفهم.
  • توثيق الدوال: الغرض منها ومعاملاتها وقيمها المعادة.

ابدؤوا التعليق بالرمز # (الهاش).

#!/bin/bash
# This script demonstrates commenting best practices.
# Author: CoddyKit
# Date: 2023-10-27

# Function: greet_user
# Description: Prints a greeting message to the console.
# Arguments:
#   $1 - The name of the user to greet.
greet_user() {
  local name="$1" # Store the first argument in a local variable.
  echo "Hello, ${name}!" # Output the greeting message.
}

# Main script execution starts here.
echo "Script execution started."
greet_user "CoddyKit Learner" # Call the function with a specific name.
echo "Script execution finished."

اصطلاحات واضحة للتسمية

تجعل الأسماء الواضحة متابعة برنامجكم النصي أسهل. تجنبوا استخدام المتغيرات ذات الحرف الواحد، إلا إذا كانت عدادات شائعة للحلقات (مثل i أو j).

الاصطلاحات العامة:

  • المتغيرات: استخدموا أسماء وصفية (مثل user_name وlog_file). استخدموا UPPERCASE لمتغيرات البيئة أو الثوابت العامة. واستخدموا lowercase_with_underscores لمتغيرات البرنامج النصي المحلية.
  • الدوال: استخدموا lowercase_with_underscores، وغالبًا ابدؤوا بفعل (مثل process_data وcheck_status).
  • البرامج النصية: استخدموا lowercase_with_hyphens (مثل backup-script.sh).

تنسيق ومسافات بادئة متسقة

يحسّن التنسيق المتسق، مثل المسافات البادئة والفواصل، سهولة القراءة بدرجة كبيرة. تخيلوا قراءة كتاب ذي مسافات بادئة غير متسقة للفقرات!

نقاط مهمة:

  • استخدموا مسافتين أو 4 مسافات للمسافة البادئة (وغالبًا ما يُنصح بتجنب علامات الجدولة).
  • اجعلوا الأسطر قصيرة (يُعدّ إبقاؤها تحت 80 حرفًا قاعدة عملية جيدة للطرفيات).
  • استخدموا أسطرًا فارغة للفصل بين كتل الشيفرة المنطقية.
  • حاذوا العناصر المرتبطة عندما يكون ذلك منطقيًا.

الاتساق أهم من الأسلوب المحدد الذي تختارونه.

المتانة: ‎'set -u' (nounset)

يُعدّ الخيار set -u (أو set -o nounset) منقذًا لمنع الأخطاء الناتجة عن الأخطاء الإملائية أو المتغيرات التي أُزيل تعيينها عن طريق الخطأ. إذا حاول برنامجكم النصي استخدام متغير لم تُسنَد إليه قيمة، فسيخرج set -u من البرنامج النصي فورًا مع ظهور خطأ.

يساعد ذلك على اكتشاف الأخطاء مبكرًا، مما يمنع السلوك غير المتوقع لاحقًا في برنامجكم النصي.

جرّبوا تشغيل الشيفرة أدناه. فقد صُممت للخروج مبكرًا لأن UNSET_NAME غير معرّف.

#!/bin/bash
# Demonstrating 'set -u' (nounset)

set -u # Exit if an unset variable is used

MY_GREETING="Hello"
echo "${MY_GREETING}, CoddyKit!"

# This variable is NOT set. With 'set -u', the script will exit here.
echo "Your name is: ${UNSET_NAME}" 

echo "This line will NOT be reached if 'set -u' is active and UNSET_NAME is indeed unset."

المتانة: ‎'set -o pipefail'

عند توصيل الأوامر عبر الأنابيب (مثل cmd1 | cmd2 | cmd3)، يعرض Bash عادةً حالة خروج الأمر الأخير في الأنبوب فقط. وهذا يعني أنه إذا فشل cmd1 ونجح cmd2 وcmd3، فقد يُبلغ الأنبوب عن النجاح رغم ذلك!

يغيّر set -o pipefail هذا السلوك. فإذا فشل أي أمر في الأنبوب (أي أعاد حالة خروج غير صفرية)، فستكون حالة خروج الأنبوب بأكمله هي تلك الحالة غير الصفرية.

يجعل ذلك خطوط الأنابيب أكثر موثوقية من خلال الإبلاغ فورًا عن فشل أي أمر مبكر.

#!/bin/bash
# Demonstrating 'set -o pipefail'

set -o pipefail # Ensures pipe's exit status is the last non-zero command

echo "Running a failing command in a pipe:"
echo "---"

# 'false' command always fails (exit status 1).
# 'cat /dev/null' always succeeds (exit status 0).
# With 'set -o pipefail', the pipe's overall exit status will be 1 from 'false'.
false | cat /dev/null

# This line will only be reached if the pipe above succeeds.
echo "---"
echo "Script finished successfully (this line won't show if pipe failed with set -o pipefail)."

التعريف بـ ShellCheck

حتى مع اتباع أفضل الممارسات، من السهل إغفال أخطاء نحوية صغيرة أو مشكلات شائعة. وهنا يأتي دور ShellCheck!

ShellCheck أداة للتحليل الساكن (أداة 'linter') للبرامج النصية الخاصة بالصدفة. فهي تقرأ برنامجكم النصي وتشير إلى:

  • الأخطاء النحوية.
  • أخطاء المبتدئين الشائعة.
  • المشكلات الدلالية الدقيقة.
  • مشكلات قابلية النقل بين الصدفات المختلفة.

وتقدم اقتراحات مفيدة، غالبًا مع روابط إلى شروحات أكثر تفصيلًا.

تطبيق ShellCheck عمليًا: برنامج نصي سيئ

لنلقِ نظرة على برنامج نصي يتضمن بعض المشكلات الشائعة. قد لا تتسبب هذه المشكلات في تعطل البرنامج النصي فورًا، لكنها ممارسات سيئة أو أخطاء محتملة.

تخيلوا أن لديكم هذا البرنامج النصي محفوظًا باسم bad_script.sh. لتشغيل ShellCheck عليه، ستكتبون: shellcheck bad_script.sh

حاولوا اكتشاف المشكلات قبل تشغيل ShellCheck!

#!/bin/bash
# A script with some common issues

MY_NAME=coddykit # Variable assignment needs no space, but quoting is good for values
echo "Hello $MY_NAME!" # Missing quotes around variable expansion

if [ $1 = "admin" ]; then # Missing quotes around $1
  echo "Welcome, administrator."
fi

# A simple loop with potential issues
for file in *.txt; do # Unquoted glob could expand to multiple arguments
  echo File: $file # Missing quotes around $file
done

إصلاح تحذيرات ShellCheck

سيعرض ShellCheck مخرجات مثل: SC2086: Double quotes missing around "$MY_NAME". وغالبًا ما يعرض رمزًا محددًا (مثل SC2086) يمكنك البحث عنه للحصول على مزيد من التفاصيل.

إليك البرنامج النصي السابق بعد إصلاحه وفقًا لتوصيات ShellCheck وأفضل الممارسات العامة:

لاحظ استخدام علامات الاقتباس المزدوجة "" حول عمليات توسيع المتغيرات واستبدالات الأوامر لمنع تقسيم الكلمات وتوسيع الأنماط، وهما من الأسباب الشائعة للأخطاء.

#!/bin/bash
# A script with issues fixed by ShellCheck

MY_NAME="CoddyKit" # Quote variable assignment values
echo "Hello ${MY_NAME}!" # Always quote variable expansions

if [ "$1" = "admin" ]; then # Quote positional parameters like $1
  echo "Welcome, administrator."
fi

# A simple loop with corrected quoting
for file in *.txt; do 
  echo "File: ${file}" # Quote variable expansions, especially in loops
done

التحقق من أفضل الممارسات

أيٌّ من الممارسات التالية يُعد من الممارسات الجيدة عند كتابة برامج Bash النصية؟

مراجعة: كتابة برامج نصية احترافية

تهانينا! لقد تعلمت كيفية الارتقاء ببرامج Bash النصية من مجرد برامج وظيفية إلى برامج احترافية.

لقد تناولنا ما يلي:

  • أهمية أفضل الممارسات في سهولة القراءة والصيانة.
  • استخدام التعليقات واصطلاحات التسمية لتحسين الوضوح.
  • جعل البرامج النصية أكثر متانة باستخدام set -u وset -o pipefail.
  • فاعلية ShellCheck في العثور تلقائيًا على المشكلات وتحسين التعليمات البرمجية.

بتطبيق هذه المبادئ، ستكتب برامج Bash نصية أكثر موثوقية ووضوحًا وأسهل في العمل الجماعي. واصل التدريب!

الأسئلة الشائعة

هل درس «أفضل ممارسات كتابة Scripts والفحص البرمجي» مجاني؟

نعم — نص درس «أفضل ممارسات كتابة Scripts والفحص البرمجي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Linux Command Line & Bash Scripting Mastery، انتقل إلى CoddyKit PRO. تتضمن دورة Linux Command Line & Bash Scripting Mastery 4 دروس في المجموع.

ماذا ستتعلم في «أفضل ممارسات كتابة Scripts والفحص البرمجي»؟

تعلّموا معايير كتابة التعليمات البرمجية والتعليقات واستخدام أدوات مثل ShellCheck لكتابة Bash scripts نظيفة ومقروءة وخالية من الأخطاء. تتمرن على Linux Command Line & Bash Scripting Mastery مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Linux Command Line & Bash Scripting Mastery؟

لا تُشترط خبرة سابقة. Linux Command Line & Bash Scripting Mastery على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «أفضل ممارسات كتابة Scripts والفحص البرمجي»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Linux Command Line & Bash Scripting Mastery هذا؟

نعم. كل درس في Linux Command Line & Bash Scripting Mastery يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تصحيح أخطاء Bash Scripts (set -x، trap)
  2. معالجة الأخطاء وحالة الخروج
  3. أفضل ممارسات كتابة Scripts والفحص البرمجي
  4. اختبار نصوص Bash باستخدام Bats
← العودة إلى Linux Command Line & Bash Scripting Mastery