Bash مرنة للغاية وتوفر خيارات مختلفة لاختبار الملفات. وإذا كنت تبحث عن طريقة لاختبار الملفات الخاصة بك، فإن مشغلات اختبار الملفات في Bash ستأخذك إلى أماكن جديدة.
في هذا البرنامج التعليمي، ستتعرف على مشغلات اختبار الملفات المختلفة وكيفية استخدامها للاختبار ما إذا كان الملف موجودًا، قابلاً للقراءة، فارغًا، وما إلى ذلك.
استمر في القراءة وتعامل مع مشغلات اختبار الملفات في Bash!
متطلبات مسبقة
سيكون هذا البرنامج التعليمي عرضًا تطبيقيًا. إذا كنت ترغب في متابعته، تأكد من توفر ما يلي:
- A Linux system with Bash installed – This tutorial uses Ubuntu 20.04.
معظم توزيعات Linux لديها Bash مثبتة بشكل افتراضي. ولكن إذا كنت تستخدم نظام Windows، يمكنك تثبيت نظام الأدوات الفرعية لنظام Linux (WSL) للحصول على واجهة سطر أوامر Bash.
- A user account with sudo privileges to run commands as root – This tutorial uses a root account for simplicity. But using a non-root user with sudo access is always recommended.
- يفترض هذا البرنامج التعليمي أن لديك وصول SSH إلى نظام Linux الخاص بك.
ما هي مشغلات اختبار ملف Bash؟
قبل أن تبدأ في استخدام مشغلات الاختبار، دعنا نلقي نظرة على كيفية عملها. تتيح لك مشغلات اختبار الملف اختبار جوانب مختلفة من ملف مثل ما إذا كان الملف موجودًا، قابل للقراءة/الكتابة، إلخ.
يمكن أن تساعد استخدام مشغلات اختبار الملف في منع الأخطاء في سيناريوهات البرمجة في Bash. الكود أدناه هو نموذج أساسي للبيان “if”. يعتبر بيان “if-else” أداة قوية ستراها كثيرًا في سيناريوهات برمجة Bash.
تذكر أن أقسام “then” و “else” في كتلة الكود ليستا إلزاميتين. يمكنك استخدام بيان “if” بدونهما.
التحقق مما إذا كان الملف موجودًا
لقد رأيت لمحة عن كيفية عمل مشغلات الاختبار، لكن هذا لا يكفي لفهم الأمور الدقيقة في استخدامها. لذا، ابدأ بمثال أساسي، مثل التحقق مما إذا كان الملف موجودًا.
في العالم الحقيقي، قد ترغب في التحقق مما إذا كان ملف التكوين موجودًا قبل إنشائه. لا تريد إضاعة الوقت في بناء ملف تكوين من الصفر فقط لتكتشف أن نفس الملف موجود بالفعل.
للتحقق مما إذا كان الملف موجودًا بالفعل:
1. قم بفتح الطرفية الخاصة بك، وقم بتشغيل الأمر touch أدناه لإنشاء ملف test.txt جديد. هذا الأمر لا يقدم إخراجًا، ولكن ستتحقق من وجود الملف في الخطوة التالية.
2. بعد ذلك، قم بتشغيل الأمر ls التالي لإدراج الملف الذي تم إنشاؤه حديثًا (test.txt) في دليل العمل الخاص بك.
الإخراج أدناه يتحقق من أنك قمت بإنشاء ملف test.txt بنجاح.
الآن بعد أن لديك ملف اختبار، يمكنك استخدام كود القالب في نص برمجي Bash للتحقق مما إذا كان الملف موجودًا في الخطوات التالية.

3. قم بتشغيل الأمر أدناه لإنشاء (touch)، وفتح ملف نصي جديد (if_file_exists.sh) في محرر النص المفضل لديك (nano).
4. الآن، قم بتعبئة الكود أدناه في ملفك الجديد if_file_exists.sh ، ثم احفظ الملف وأغلق المحرر.
- تشغيل عبارة if-else لاختبار ما إذا كان الملف المحدد موجودًا.
- إذا كان المشغل يعيد القيمة صحيحة، ستحصل على رسالة تقول إن الملف موجود.
- إذا كان المشغل يعيد القيمة صحيحة، ستحصل على رسالة تقول إن الملف غير موجود. ولكن هذه المرة، يتم إنشاء الملف تلقائيًا، باستخدام الاسم الذي حددته في متغير FILE.
السطر #!/bin/bash في أعلى الملف يعرف باسم shebang. تخبر shebang النظام بالمترجم الذي يجب استخدامه لتشغيل النص، في هذه الحالة، Bash. إذا لم تتضمن shebang، يستخدم النظام المترجم الافتراضي، الذي قد لا يكون Bash. غياب shebang يمكن أن يتسبب في فشل النص.
5. قم بتشغيل الأمر التالي لتنفيذ النص الجديد الخاص بك (if_file_exists.sh)
إذا تم كل شيء على ما يرام، سترى رسالة وجود test.txt المطبوعة على الطرفية الخاصة بك، كما هو موضح أدناه.

6. بعد ذلك، قم بتشغيل الأوامر التالية لحذف (rm -rf) ملف الاختبار (test.txt)، وقائمة جميع الملفات في دليل العمل الخاص بك.
أدناه، يمكنك التحقق من أن test.txt لم يعد مدرجًا.

7. أعد تشغيل الأمر أدناه لتنفيذ نصك if_file_exists.sh.
نظرًا لأن ملف test.txt لم يعد موجودًا، يقوم النص بإنشاء ملف test.txt جديد عندما يعيد المشغل -e القيمة الخاطئة.

8. في النهاية، قم بتشغيل أمر ls أدناه لقائمة ملف test.txt في دليل العمل الخاص بك.
تؤكد الناتج أدناه أن نصك قام بإنشاء ملف test.txt جديد.

التحقق مما إذا كان ملفًا عاديًا أو ملفًا خاصًا
قبل فتح أو معالجة ملف، قد ترغب أولاً في التحقق مما إذا كان هذا الملف عاديًا أو خاصًا. لماذا؟ ملف خاص هو نوع من الملفات المخزنة في نظام الملفات، لذا كن حذرًا عند التعامل مع هذه الملفات.
على سبيل المثال، خطأ شائع عند فتح ملف خاص هو خطأ “لا يوجد ملف أو دليل”. يحدث هذا الخطأ عندما لا يكون الملف الذي تحاول فتحه موجودًا. ولكن يمكن أن يحدث نفس الخطأ أيضًا عند فتح ملف خاص بدلاً من ملف عادي.
افتح ملفًا جديدًا special_file.sh في محرر النص الخاص بك، أضف الشفرة التالية واحفظ التغييرات.
الشيفرة أدناه مماثلة للشيفرة السابقة. ولكن تستخدم هذه الشيفرة العامل -f
بدلاً من العامل -e
. يقوم العامل -f
بفحص ما إذا كان الملف المحدد (/dev/vmmon
) هو ملف عادي.
الآن ، قم بتشغيل الأمر أدناه لتنفيذ سكريبت special_file.sh
الخاص بك.
نظرًا لأن الملف (/dev/vmmon) المحدد في متغير FILE
هو ملف خاص ، ستحصل على الرسالة أدناه.

التحقق مما إذا كانت المجلد موجودة
حتى الآن ، تعلمت كيفية التحقق مما إذا كان ملف موجودًا. ولكن هل نفس الطريقة تنطبق على الدلائل؟ نعم ، باستخدام عامل الاختبار -d
. يأتي هذا العامل بما فيه الكفاية إذا كنت تخطط لاتخاذ إجراء استنادًا إلى ما إذا كان المجلد موجودًا أم لا.
ربما تريد نسخ جميع الملفات من مجلد إلى آخر. إذا لم يكن المجلد المستهدف موجودًا ، يمكنك إنشاءه قبل نسخ الملفات.
1. قم بتشغيل أمر ls أدناه لعرض محتويات مجلد example-dir من داخل مجلد العمل.
ستحصل على رسالة تقول “لا يوجد ملف أو دليل” نظرًا لعدم وجود المجلد. إذا كنت لا ترغب في توقف سير العمل فقط بسبب عدم وجود مجلد، انتقل إلى الخطوة التالية.

2. بعد ذلك، قم بفتح ملف جديد بالاسم if_dir_exists.sh في محرر النص الخاص بك، وأضف الكود أدناه واحفظ الملف. يقوم الكود التالي بفحص ما إذا كان مجلد محدد موجودًا ويقوم بأداء المهام اعتمادًا على قيمة عامل التشغيل -d التي يعيده.
يمكنك تحقيق نفس النتيجة عن طريق تبديل عبارات if و else باستخدام عامل النفي (!). في الحالات العملية، يمكن أن يساعد عامل النفي (!) في كتابة سيناريو نصي أنظف وأكثر إيجازًا.
3. الآن، قم بتشغيل الأمر أدناه لتنفيذ النصيب الخاص بك (if_dir_exists.sh)
يمكنك رؤية الرسالة التي تقول إن المجلد قد تم إنشاؤه، وتم نسخ ملف test.txt نظرًا لعدم وجود مثال_المجلد.

أخيرًا، قم بتشغيل أمر ls ضد مجلد المثال للتحقق من وجود المجلد واحتوائه على ملف test.txt.

التحقق مما إذا كان الملف فارغًا
أنت بالفعل تعرف كيفية استخدام أكثر ثلاثة مشغلات اختبار ملفات استخدامًا (-e
, -f
, و -d
) لتعزيز مهارات البرمجة الخاصة بك. ولكن لا تزال هناك مشغلات أخرى تحب أن تبحث فيها.
عادةً ما تقوم بتشغيل أمر لنسخ محتويات ملف إلى ملف آخر بدلاً من تسليط الضوء على محتويات الملف. ولكن انتظر لحظة حيث أن ملف الهدف قد لا يكون فارغًا.
لماذا لا تستخدم المشغل -s
للتحقق مما إذا كان الملف موجودًا وليس فارغًا؟ يُرجع هذا المشغل القيمة صحيحة إذا كان الملف موجودًا ولديه حجم أكبر من الصفر.
١. افتح ملفًا جديدًا بالاسم empty_file.sh في محرر النص الخاص بك، أضف الكود التالي، واحفظ الملف.
الكود التالي يختبر ما إذا كان الملف المحدد فارغًا ويطبع رسالة اعتمادًا على القيمة التي يُرجعها المشغل -s.
2. الآن، قم بتشغيل الأمر أدناه لتنفيذ النصي (empty_file.sh).
أدناه، يمكنك رؤية الرسالة التي تقول أن test.txt إما غير موجود أو فارغ. ولكن في نفس الوقت، يقوم النص بإضافة نص إلى الملف test.txt.

3. قم بتشغيل أمر cat أدناه للتحقق من أن ملف test.txt يحتوي على النص المضاف.

4. في الختام، قم بإعادة تشغيل الأمر bash أدناه لتنفيذ النصي empty_file.sh.
أدناه، يمكنك رؤية أن الإخراج تغير إلى test.txt موجود وليس فارغ نظرًا لأن الملف test.txt يحتوي الآن على بعض النص ولديه حجم أكبر من صفر (0).

التحقق مما إذا كان الملف موجودًا وقابلاً للقراءة
ربما يتضمن أتمتة الخاص بك قراءة الملفات لأداء المهام. نجاح تلك المهام سيعتمد على ما إذا كانت الملفات قابلة للقراءة. كتابة نص للتحقق مما إذا كان ملف معين موجودًا وقابلًا للقراءة سيكون حلاً مفيدًا.
لتوضيح التحقق مما إذا كان الملف موجودًا وقابلًا للقراءة:
1. قم بتشغيل الأمر التالي لتسجيل الدخول إلى حساب مستخدم آخر (ata).
يتغير سطر الأوامر الخاص بك ($) ليشير إلى أنك قد قمت بتسجيل الدخول باسم مستخدم آخر.

بديلًا عن ذلك ، يمكنك تغيير إذن الملف إلى قابل للقراءة أو الكتابة أو كليهما باستخدام أمر chmod.
2. بمجرد تسجيل الدخول ، قم بإنشاء ملف جديد يسمى readable_file.sh باستخدام محرر النصوص الخاص بك
أضف الكود التالي إلى ملف readable_file.sh ، واحفظ التغييرات. يقوم هذا الكود بالتحقق مما إذا كان ملفًا يسمى test.txt في دليل /root موجودًا وقابلًا للقراءة.
3. الآن ، قم بتشغيل الأمر أدناه لتنفيذ سكريبت readable_file.sh.
في هذه المرة، سترى رسالة تقول إن /root/test.txt غير موجود أو غير قابل للقراءة. بما أن ملف text.test موجود في دليل /root، فإن المستخدم الحالي (ata) لا يملك صلاحيات القراءة لملف text.txt

. أخيراً، قم بتنفيذ الأوامر أدناه لأداء ما يلي:
- تغيير ملف sudoers للسماح للمستخدم الحالي (ata) باستخدام
sudo
لتشغيل الأوامر المرتفعة.
- تنفيذ سكريبت readable_file.sh، الذي يختبر إذا كان ملف معين قابل للقراءة.
يمكنك أن ترى أدناه أن الناتج يطبع أن test.txt موجود وقابل للقراءة لأن المستخدم ata أصبح الآن يملك صلاحية القراءة لملف test.txt.

خلاصة
A testing phase is always a priority before making drastic changes, whether on files or directories on your system. And in this tutorial, you’ve learned about the Bash file test operators and how to use them to test if a file (regular or special) or directory exists or if a file is readable or not.
مع هذه المهارات الجديدة، يمكنك أن تقرر بثقة أي إجراء يجب اتخاذه بناءً على نتيجة الاختبارات. ولكن هناك العديد من الطرق الأخرى التي يمكنك استخدامها لمشغلي اختبار ملفات Bash.
لم لا تجرب التحقق من امتداد ملف ما؟ أو ربما التحقق مما إذا كانت ملفات متعددة موجودة لمعرفة إذا كانت جميع الملفات التي تحتاجها متاحة؟