logo

تحقق باش من وجود الملف

في معظم الأحيان، قد نجد موقفًا قد نحتاج فيه إلى تنفيذ إجراء للتحقق مما إذا كان الملف موجودًا أم لا.

في Bash، يمكننا استخدام 'أمر الاختبار' للتحقق من وجود الملف وتحديد نوع الملف.

فيما يلي صيغ أمر الاختبار، ويمكننا استخدام أي من هذه الأوامر:

 test expression [ expression ] [[ expression ]] 

نحن مطالبون باستخدام أمر '[' ذو قوس واحد لجعل البرنامج النصي الخاص بنا قابلاً للنقل لجميع أغلفة POSIX. تحتوي النسخة المطورة من أمر الاختبار على قوسين مزدوجين '[['' وهو مدعوم في معظم الأنظمة الحديثة التي تستخدم Bash وZsh وKsh كصدفة افتراضية.

تحقق من وجود الملف

أثناء التحقق من وجود ملف، فإن عوامل تشغيل الملفات الأكثر استخدامًا هي -e و -f. يتم استخدام الخيار '-e' للتحقق من وجود الملف بغض النظر عن نوعه، بينما يتم استخدام الخيار '-f' لإرجاع القيمة الحقيقية فقط إذا كان الملف ملفًا عاديًا (وليس دليلاً أو جهازًا).

الخيار الأكثر شيوعًا للتحقق من وجود الملف أم لا هو استخدام أمر الاختبار مع عبارة 'if الشرطية'.

فيما يلي الأمثلة للتحقق من وجود الملف 'read_file.txt':

طريقة 1

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

الطريقة 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

الطريقة 3

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

انتاج |

ستكون مخرجات الطرق الثلاث على النحو التالي لأن لدينا ملف (read_file.txt) موجود في الدليل:

رقم عشوائي بين 1 و 10
 read_file.txt exist 

إذا أردنا تنفيذ إجراء سيوفر نتيجة بناءً على ما إذا كان الملف موجودًا أم لا، فيمكننا استخدام تركيبة if/then بالطريقة التالية:

مثال

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

انتاج |

 read_file.txt exist 

يمكننا أيضًا استخدام أمر الاختبار بدون عبارة if. يمكننا استخدام أي من الطرق التالية:

طريقة 1

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

الطريقة 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

الطريقة 3

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

انتاج |

ستكون مخرجات الطرق الثلاثة على النحو التالي لأن لدينا ملف (read_file.txt) موجود في الدليل:

 read_file.txt exist 

إذا كان هناك عدة أوامر ليتم تشغيلها بعد عامل التشغيل &&، فقم بإحاطة الأوامر بأقواس متعرجة مفصولة بفاصلة منقوطة (;) أو AND (&&)، أي:

حلقة برنامج جافا

مثال

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

على عكس &&، العبارة التي تأتي بعد || يتم تنفيذ عامل التشغيل فقط إذا كانت حالة الخروج لأمر الاختبار 'خطأ'.

مثال

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

انتاج |

 read_file.txt exist 

هذه هي الطرق الشائعة الاستخدام في Bash للتحقق مما إذا كان الملف موجودًا أم لا.

تحقق من وجود الدليل

يسمح لنا عامل التشغيل '-d' باختبار ما إذا كان الملف دليلاً أم لا.

فيما يلي طرق التحقق من وجود دليل 'Javatpoint':

طريقة 1

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

الطريقة 2

 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

ملحوظة:يمكننا أيضًا استخدام الأقواس المزدوجة '[[' بدلاً من القوس الفردي '['.

انتاج |

سيكون الناتج لكلا الطريقتين المذكورتين أعلاه على النحو التالي حيث لدينا دليل (يسمى Javatpoint) موجود في الموقع المحدد:

 Javatpoint is a directory 

تحقق مما إذا كان الملف غير موجود

يمكن إلغاء تعبير الاختبار باستخدام علامة التعجب (! -عامل التشغيل NOT المنطقي). تحقق من المثال التالي:

مثال

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

يمكن أيضًا كتابة البرنامج النصي أعلاه على النحو التالي:

 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

انتاج |

 missing_read_file.txt unavailable 

مشغلي اختبار الملف

تتضمن أوامر الاختبار عوامل تشغيل الملفات التالية والتي تتيح لنا اختبار أنواع معينة من الملفات:

-ب إرجاع الملفات 'صحيح' إذا كان الملف موجودًا كملف خاص للكتلة.
-ج إرجاع الملفات 'صحيح' إذا كان الملف موجودًا كملف أحرف خاصة.
-د إرجاع الملفات 'صحيح' إذا كان الملف موجودًا كدليل.
-e إرجاع الملف 'صحيح' إذا كان الملف موجودًا كملف، بغض النظر عن نوعه (عقدة، دليل، مأخذ توصيل، وما إلى ذلك).
-f إرجاع الملفات 'صحيح' إذا كان الملف موجودًا كملف عادي (وليس دليلاً أو جهازًا).
-G إرجاع الملفات 'صحيح' إذا كان الملف موجودًا ويحتوي على نفس المجموعة التي يقوم المستخدم بتشغيل الأمر.
-h إرجاع الملف 'صحيح' إذا كان الملف موجودًا كرابط رمزي.
-g إرجاع الملفات 'صحيح' إذا كان الملف موجودًا ويحتوي على مجموعة علامات معرف المجموعة (sgid).
-k إرجاع الملف 'صحيح' إذا كان الملف موجودًا ويحتوي على مجموعة علامات البت الثابتة.
-L إرجاع الملفات 'صحيح' إذا كان الملف موجودًا كرابط رمزي.
-O إرجاع الملفات 'صحيح' إذا كان الملف موجودًا ومملوكًا للمستخدم الذي يقوم بتشغيل الأمر.
-p إرجاع الملف 'صحيح' إذا كان الملف موجودًا كأنبوب.
-r إرجاع الملفات 'صحيح' إذا كان الملف موجودًا كملف قابل للقراءة.
-S إرجاع الملفات 'صحيح' إذا كان الملف موجودًا كمقبس.
-s ملف إرجاع 'صحيح' إذا كان الملف موجودًا وحجمه غير صفري.
-u إرجاع الملفات 'صحيح' في حالة وجود الملف، وتم تعيين علامة set-user-id (suid).
-w إرجاع الملفات 'صحيح' إذا كان الملف موجودًا كملف قابل للكتابة.
-x إرجاع الملفات 'صحيح' إذا كان الملف موجودًا كملف قابل للتنفيذ.