לרוב, אנו עלולים למצוא מצב בו נצטרך לבצע פעולה שתבדוק האם קיים קובץ או לא.
ב-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 קיים כקובץ הפעלה. |