7 متغيرات Bash أساسية أستخدمها في أغلب سكربتات هندسة الكمبيوتر

💻 ملخص المقال

في هذا المقال، نستعرض بعض المتغيرات الأساسية في Bash scripting والتي تُستخدم بشكل متكرر في برمجة السكريبتات على أنظمة لينوكس وأنظمة الشل بشكل عام. هذه المتغيرات تلعب دورًا حيويًا في التحكم بمسار السكريبت، استقبال الوسائط (arguments)، معرفة حالة تنفيذ الأوامر، والحصول على معلومات بيئية حول المستخدم والنظام. اعتماد هذه المتغيرات يعزز الإنتاجية ويزيد من كفاءة وصيانة السكريبتات، خصوصًا في مجالات هندسة الحاسوب التي تعتمد على الأنظمة المدمجة والبرمجة النصية لأتمتة العمليات.

⚙️ المتغيرات الخاصة في برمجة سكريبتات Bash

تقدم بيئة Bash مجموعة من المتغيرات والحواسيب الخاصة (Special parameters) التي تُستخدم لإدارة تنفيذ السكريبتات بسلاسة. أهمها عدد قليل يُغنيك عن كتابة الكثير من الأكواد والتحقق اليدوي.

🛠️ $0 : معرفة مسار واسم السكريبت

يتيح لك المتغير $0 معرفة اسم السكريبت وموقعه النسبي في النظام. يستخدم هذا عادة لعرض رسالة مساعدة أو توثيق داخل السكريبت، ويعتبر معيارًا معتمدًا عبر عدة أنواع من الشل.

إذا كنت تريد استخراج اسم الملف فقط بعيدًا عن المسار، يمكنك استخدام الأمر basename $0 داخل السكريبت.

🔍 $BASH_SOURCE: بديل دقيق لمسار السكريبت في Bash

في بعض الحالات، لا يكون $0 دقيقًا بشكل كامل، خصوصًا عند استخدام ملفات السكريبت كمصادر (source)، حيث يعيد أحيانًا اسم الشل بدل المسار. لذلك، توفر Bash متغيرًا خاصًا $BASH_SOURCE يقدم معلومات الأدق والمسار المباشر للسكريبت الجاري تنفيذه.

نقطة تقنية مهمة: استخدام $BASH_SOURCE يحسن الاعتمادية داخل بيئة Bash لكنه غير مشترك مع باقي الشل.

⏹️ $? : حالة الخروج من الأوامر (Exit Status)

يُعيد كل أمر يُنفذ في الشل قيمة تُعرف بـ Exit Code أو رمز الخروج، والتي تدل على نجاح التنفيذ (0) أو حدوث خطأ (أي قيمة غير صفرية).

يمكنك استخدام $? في السكريبتات لمعرفة إن كانت الأوامر السابقة نجحت أم لا والتصرف بناءً على نتيجة التنفيذ.

مثال تقليدي لمعرفة إذا كان أمر يُنفذ بنجاح:

if ls /path/to/directory; then
  echo "المجلد موجود"
else
  echo "المجلد غير موجود"
fi

أو باستخدام المشغلين المنطقيين:

ls /path/to/directory && echo "مجلد موجود"
ls /path/to/directory || echo "مجلد غير موجود"

📡 التعامل مع الوسائط (Arguments) الممررة للسكريبت

تعتمد الكثير من سكريبتات هندسة الحاسوب على تمرير وسائط إلى السكريبت لتحديد معطيات الإدخال بدون الحاجة لتعديل السكريبت نفسه.

🔢 المتغيرات $1, $2, …: الوصول إلى الوسائط الممررة

يمثل المتغير $1 الوسيطة الأولى، و $2 الوسيطة الثانية، وهكذا. يمكن للسكريبت الوصول إلى هذه المتغيرات للتعامل مع القيم المدخلة بسهولة.

📚 $@ و $* : جميع الوسائط معًا

يمكن استخدام المتغير $@ لتمرير جميع الوسائط كقائمة منفصلة، بينما $* يجمعها في سلسلة واحدة (string) مفصولة بمسافة.

وهذا مفيد عند التعامل مع عدد غير معروف من الوسائط أو عند الحاجة إلى التكرار عليها.

🧮 ${#@} و ${#*} : عدد الوسائط الممررة

يمكن معرفة عدد الوسائط الممررة للسكريبت باستخدام الصيغة ${#@} أو ${#*}، مما يسهل عمليات التحقق أو التكرار بطريقة مرنة.

خلاصة هندسية: التعامل الأمثل مع الوسائط يجعل السكريبتات أكثر قوة ومرونة خصوصًا في الأنظمة المدمجة والعتاد المخصص.

🧠 متغيرات البيئة Environment Variables ذات أهمية في هندسة الكمبيوتر

توفر بيئة التشغيل عدة متغيرات بيئية مهمة تساعد في الكتابة البرمجية التي تعتمد على عملية التشغيل الفعلية، خصيصًا في بيئات الحوسبة المتنوعة.

👤 $UID و $EUID : معرفة هوية المستخدم

تستخدم متغيرات $UID و $EUID للحصول على معرف المستخدم الحقيقي والفعلية (User ID و Effective User ID) على التوالي. هذا الفرق مهم في سياقات صلاحيات النظام، مثل عند تشغيل الأوامر عبر sudo أو الإجراءات التي تتطلب صلاحيات متقدمة.

في العتاد المرتبط بالحماية وأمن الأنظمة، تساعد معرفة حالة الصلاحيات على تنفيذ المهام الصحيحة دون تعريض النظام لمخاطر أمنية.

📁 متغيرات XDG Directory Specification: تنظيم مسارات المستخدم

في بيئات لينكس الحديثة، تستخدم متغيرات XDG معيارًا من freedesktop.org لتنظيم مسارات البيانات المؤقتة، ملفات الإعدادات، والبيانات الشخصية للمستخدم.

  • XDG_CACHE_HOME: لمسارات التخزين المؤقت
  • XDG_CONFIG_HOME: لمجلدات ملفات الإعدادات
  • XDG_DATA_HOME: للمجلدات التي تخزن البيانات المحلية

استخدام هذه المتغيرات بدلاً من المسارات الثابتة يحسن من قابلية النقل والموثوقية للبرمجيات والأنظمة المدمجة.

لماذا هذا التطور مهم؟ يوفر الاعتماد على متغيرات البيئة قيماً قياسية بدلًا من التهيئة اليدوية، مما يسهل التطوير والصيانة.

📡 تطبيقات عملية ومتقدمة في هندسة الكمبيوتر

تُستخدم هذه المتغيرات والآليات في مجالات متنوعة منها:

  • الأنظمة المدمجة حيث يُتطلب السكريبت للعمل في ظل صلاحيات معينة مع التعامل مع ملفات إعدادات متغيرة.
  • الحوسبة عالية الأداء، خاصة في عمليات التشغيل المتزامن حيث حساب رموز خروج الأوامر يتطلب دقة لضمان استمرارية المهام.
  • تصميم وتطوير المعالجات والرقاقات (SoC) التي تعتمد على برمجيات تحكم.
  • أمن العتاد، حيث فهم صلاحيات المستخدمين والعمليات له أهمية كبرى في تأمين الأنظمة.
  • إنترنت الأشياء (IoT) حيث يتم استخدام سكريبتات خفيفة لإدارة الأجهزة المتصلة.

🛠️ نصائح للحفاظ على سكريبتات قابلة للصيانة وقابلة للنقل

الاعتماد على قيم المتغيرات القياسية بدلًا من القيم الثابتة (Hard-coded) يقلل من مشاكل صيانة السكريبتات، خاصة عند نقلها بين أنظمة أو بيئات مختلفة.

من الأفضل دائمًا الاعتماد على المتغيرات القادمة من البيئة (Environment Variables) لضمان توافق السكريبت مع خصوصيات المستخدم والنظام.

كما أن اعتماد المتغيرات الخاصة داخل اللغة (Special Parameters) يسهل التحكم بالجانب البرمجي ويقلل الأخطاء.

ما الذي تغيّر هنا؟ تعلم استخدام هذه المتغيرات يجعل تطوير برمجيات التحكم والسكريبتات أكثر علماً ودقة، مما ينعكس إيجابًا على جودة الأنظمة.

📜 خاتمة

برمجة Bash scripts باستخدام المتغيرات الخاصة مثل $0 و$? و$@ بالإضافة إلى معرفة المتغيرات البيئية المهمة مثل $UID وXDG_CONFIG_HOME يمثل ركيزة أساسية لأي مهندس حاسوب أو مبرمج يعمل على الأنظمة المدمجة، الأجهزة، أو حتى الحوسبة عالية الأداء.

فهم هذه الأدوات يمكّن المهندسين من بناء تطبيقات أكثر كفاءة، أمانًا، وقابلية للاستخدام عبر بيئات مختلفة دون الحاجة لإعادة كتابة أو تعديل كامل للسكريبتات.


اكتشاف المزيد من Mohdbali

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

Related Articles

Stay Connected

14,051المشجعينمثل
1,700أتباعتابع
11,000المشتركينالاشتراك

Latest Articles