logo

Bash בדוק אם הקובץ קיים

לרוב, אנו עלולים למצוא מצב בו נצטרך לבצע פעולה שתבדוק האם קיים קובץ או לא.

ב-Bash, נוכל להשתמש ב'פקודה בדיקה' כדי לבדוק אם קיים קובץ ולקבוע את סוג הקובץ.

להלן התחבירים של פקודת הבדיקה, ונוכל להשתמש בכל אחת מהפקודות הללו:

 test expression [ expression ] [[ expression ]] 

אנו נדרשים להשתמש בפקודת '[' בסוגריים בודדים כדי להפוך את הסקריפט שלנו לנייד עבור כל הקונכיות של POSIX. הגרסה המשודרגת של פקודת הבדיקה מכילה סוגריים כפולים '[[' הנתמכים ברוב המערכות המודרניות המשתמשות ב-Bash, Zsh ו-Ksh כמעטפת ברירת מחדל.

בדוק אם הקובץ קיים

בזמן בדיקה אם קיים קובץ, אופרטורי הקבצים הנפוצים ביותר הם -e ו-f. האפשרות '-e' משמשת כדי לבדוק אם קיים קובץ ללא קשר לסוג, בעוד האפשרות '-f' משמשת להחזרת ערך אמיתי רק אם הקובץ הוא קובץ רגיל (לא ספרייה או מכשיר).

האפשרות הנפוצה ביותר לבדוק אם הקובץ קיים או לא היא להשתמש בפקודה test עם ה-'if conditional statement'.

להלן הדוגמאות לבדיקת האם הקובץ '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) קיים בספרייה:

בינה מלאכותית וסוכנים אינטליגנטיים
 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 

אנו יכולים להשתמש גם בפקודה test ללא הצהרת 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'; } 

שלא כמו &&, ההצהרה שאחרי ה-|| אופרטור מבוצע רק אם מצב היציאה של פקודת הבדיקה הוא 'false'.

דוגמא

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

תְפוּקָה

 read_file.txt exist 

אלו הן השיטות הנפוצות ב-Bash כדי לבדוק אם הקובץ קיים או לא.

בדוק אם ספרייה קיימת

האופרטור '-d' מאפשר לנו לבדוק אם קובץ הוא ספרייה או לא.

המרת מספר שלם ל-Java מחרוזת

להלן השיטות לבדוק אם ספריית '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 

בדוק אם הקובץ אינו קיים

ניתן לשלול את ביטוי המבחן באמצעות סימן הקריאה (! -logical 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 

מפעילי בדיקת קבצים

פקודות הבדיקה כוללות את מפעילי הקבצים הבאים המאפשרים לנו לבדוק סוגים מסוימים של קבצים:

-b מחזיר קובץ 'True' אם ה-FILE קיים כקובץ מיוחד בלוק.
-c קובץ מחזיר 'True' אם ה-FILE קיים כקובץ תו מיוחד.
-d קובץ מחזיר 'True' אם ה-FILE קיים בתור ספרייה.
-e קובץ מחזיר 'True' אם ה-FILE קיים כקובץ, ללא קשר לסוג (צומת, ספרייה, שקע וכו').
-f קובץ מחזיר 'נכון' אם ה-FILE קיים כקובץ רגיל (לא ספרייה או התקן).
-G File מחזיר 'True' אם ה-FILE קיים ומכיל את אותה קבוצה שבה המשתמש מריץ את הפקודה.
-h קובץ מחזיר 'נכון' אם ה-FILE קיים כקישור סמלי.
-g קובץ מחזיר 'True' אם ה-FILE קיים ומכיל סט דגל של set-group-id (sgid).
-k קובץ מחזיר 'True' אם ה-FILE קיים ומכיל ערכת דגל סיביות דביקה.
-L קובץ מחזיר 'נכון' אם ה-FILE קיים כקישור סמלי.
-O File מחזיר 'True' אם ה-FILE קיים והוא בבעלות המשתמש שמפעיל את הפקודה.
-p קובץ מחזיר 'נכון' אם ה-FILE קיים כצינור.
-r הקובץ מחזיר 'True' אם ה-FILE קיים כקובץ קריא.
-S File מחזיר 'נכון' אם ה-FILE קיים כשקע.
קובץ -s מחזיר 'True' אם ה-FILE קיים וגודלו אינו אפס.
-u מחזיר קובץ 'True' אם ה-FILE קיים, ודגל set-user-id (suid) מוגדר.
-w קובץ מחזיר 'True' אם ה-FILE קיים כקובץ שניתן לכתיבה.
-x קובץ מחזיר 'True' אם ה-FILE קיים כקובץ הפעלה.