Bash If-Then-Else דוגמה

Bash If Then Else Example



בשיעור זה נראה כיצד נוכל להשתמש בהצהרות If-Then-Else בתסריטים של סביבת Bash שאנו כותבים. הצהרות If-Then-Else הן כלי שימושי לספק דרך להגדיר את נתיב הפעולה של סקריפט כאשר מתקיימים כמה תנאים. הבה נראה מהו התחביר של הצהרות If-Then-Else:

אםכמה פקודות;
לאחר מכןפקודות אז;
אַחֵרפקודות אחרות;
לִהיוֹת

בפקודה שלעיל המוצגת, אם SOMM-COMMANDS מתגלה כנכון או שמצב החזרתו נמצא 0, THEN-COMMANDS יבוצעו. אם זה לא המקרה, ELSE-COMMANDS מבוצעים. בחלק מהפקודות, אנו בדרך כלל מבצעים השוואת מחרוזות או השוואת ערך בצורה של מספרים שלמים. אנו יכולים גם לבצע פעולות רבות הכוללות קבצים. הבה נבחן כמה פקודות עיקריות המשמשות בעיקר בעת עבודה עם תנאים מבוססי קבצים:







יְסוֹדִי מַשְׁמָעוּת
[ -ל ] מחזיר נכון כאשר FILE קיים.
[-b] מחזיר נכון כאשר קובץ קיים וקובץ מיוחד לחסימה.
[-c] מחזיר נכון כאשר קובץ קיים וקובץ מיוחד לתווים.
[-d] מחזיר נכון כאשר קובץ קיים וזוהי ספרייה.
[-ו] מחזיר נכון כאשר FILE קיים.
[-f] מחזיר נכון כאשר קובץ קיים וקובץ רגיל.
[-g] מחזיר נכון כאשר קובץ קיים וקובץ ה- SGID שלו מוגדר.
[-h] מחזיר נכון כאשר FILE קיים והוא קישור סמלי.
[-k] מחזיר נכון כאשר FILE קיים והסיביה הדביקה שלו מוגדרת.
[-p] מחזיר נכון כאשר FILE קיים והוא צינור בשם (FIFO).
[-r] מחזיר נכון כאשר FILE קיים וקריא.
[-s] מחזיר נכון כאשר FILE קיים ויש לו גודל גדול מאפס.
[-t] מחזיר נכון כאשר FD מתאר הקבצים פתוח ומתייחס למסוף.
[-u] מחזיר נכון כאשר FILE קיים והביט SUID (set user ID) שלו מוגדר.
[-in] מחזיר נכון כאשר FILE קיים וניתן לכתוב אותו.
[-איקס] מחזיר נכון כאשר FILE קיים וניתן להריץ אותו.
[-O] מחזיר נכון כאשר FILE קיים ובבעלות מזהה המשתמש האפקטיבי.
[-G] מחזיר נכון כאשר FILE קיים ובבעלות מזהה הקבוצה האפקטיבי.
[ -ה ] מחזיר נכון כאשר FILE קיים והוא קישור סמלי.
[-N] מחזיר נכון כאשר FILE קיים ושונה מאז קריאתו האחרונה.
[-S] חוזר נכון כאשר FILE קיים והוא שקע.

ה- THEN-COMMANDS ו- ELSE-COMMANDS יכולים להיות כל פעולות UNIX תקפות או כל תוכנית הפעלה. שימו לב ש לאחר מכן ו לִהיוֹת פקודות מופרדות על ידי נקודתיים חצי נקודתיים מכיוון שהן נחשבות למרכיבים נפרדים לחלוטין של סקריפט.



אם-אז-אחרת דוגמא פשוטה

נתחיל את השיעור שלנו בדוגמה פשוטה מאוד עם הצהרות אם-אז-אחרת.
להלן תוכנית לדוגמא:



אם דוגמא

אם דוגמא





להלן הפלט שאנו רואים כאשר אנו מריצים את התסריט שלנו:

$. ifelse1.sh
הערכים זהים!
$

שימוש בארגומנטים של שורת הפקודה

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



שמי LinuxHint. אני אוהב שרתים, במיוחד אלה של אובונטו. הם כל כך
סופי!

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

זרק 'מוצא $ 1 ב -2 $'
אחיזה $ 1 2 $
אם [ $? -נוֹלָד 0 ]
לאחר מכן
זרק '$ 1 לא נמצא בקובץ $ 2'.
אַחֵר
זרק '$ 1 נמצא בקובץ $ 2'.
לִהיוֹת
זרק 'התסריט הושלם.'

התסריט הזה דינאמי מאוד. הוא מחשיב את המילה למצוא ואת הקובץ לחיפוש משורת הפקודה עצמה. כעת, אנו מוכנים להריץ את התסריט שלנו:

. ifelse2.sh אהבה hello.txt

נראה פלט כמו:

למצוא אהבהבhello.txt
אהבה נמצאהב קוֹבֶץhello.txt.
התסריט הושלם.

בדיקת מספר הארגומנטים של שורת הפקודה

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

לספור=$ #
אם [ ! ספירת $ -גט 1 ]
לאחר מכן
זרק 'אין מספיק ויכוחים'
אַחֵר
זרק 'עבודה טובה!'
לִהיוֹת

בואו נריץ את הסקריפט הזה כעת, נראה את הפלט הבא:

ארגומנטים של שורת הפקודה

ארגומנטים של שורת הפקודה

הצהרות If-Then-Elif-Else

כמו כן, אנו יכולים להכיל מספר הצהרות IF באותו בלוק כדי לצמצם את נתיב ההחלטות שהתוכנית שלנו לוקחת לביצוע פקודות שהגדרנו. להלן התחביר להגדרת הצהרות IF מרובות בתסריטים שלנו:

אםפקודות בדיקה;
לאחר מכן
פקודות תוצאה;
אליף
פקודות נוספות;
לאחר מכן
פקודות אחרות-תוצאות;
אַחֵר
פקודות חלופיות;
לִהיוֹת

זה נראה די מוכר וקל למעקב גם כן. הבה נגדיר דוגמא פשוטה לקביעת אופן הפעולה של העץ:

לספור=$ #
אם [ ספירת $ -משווה 1 ]
לאחר מכן
זרק 'נמצא רק טיעון אחד'.
אליף [ ספירת $ -משווה 2 ]
לאחר מכן
זרק 'טוב יותר, נמצאו שני טיעונים.'
אַחֵר
זרק 'עבודה טובה, נמצאו טיעונים רבים!'
לִהיוֹת

הנה מה שאנחנו מקבלים בחזרה עם פקודה זו:

אם אז דוגמה של Elif Else

אם אז דוגמה של Elif Else

שימוש בעמידות נרתיק

הצהרות IF-ELSE שימושיות כאשר יש לך רשימה גדולה של אפשרויות שעליך להחליט עליהן. אך למקרה שתרצה לבצע פעולה רק במקרים מעטים של התאמה מדויקת לתוצאה, נוכל להשתמש בהצהרות CASE גם בסקריפטים של Bash. התחביר שלו נראה כך:

מקרהביטויבתיק 1)פקודות לביצוע;
מקרה 2)פקודות לביצוע;
מקרה 2)פקודות לביצוע;
...)פקודות לביצוע;
*)פקודות לביצוע;
esac

המקרה האחרון עם * משמש כמקרה ברירת המחדל ויוצא לפועל כאשר אף אחד מהמקרים שהוגדרו למעלה אינו תואם.

הבה נבנה במהירות דוגמה פשוטה באמצעות הצהרות CASE:

מקרה '$ 1' ב
1)
זרק 'הערך הוא 1.'
;;
2)
זרק 'הערך הוא 2'.
;;
3)
זרק 'הערך הוא 3.'
;;
*)
זרק 'ערך אחר עבר'.
esac

כל הצהרת CASE מסתיימת על ידי ;; (סימני חצי נקודתיים כפולים). הנה מה שאנחנו מקבלים בחזרה עם פקודה זו:

דוגמא CASE

דוגמא CASE

סיכום

בשיעור זה, בדקנו כיצד אנו יכולים להשתמש בהצהרות IF-ELSE, IF-THEN-ELIF ו- CASE בתסריטים של Bash שאנו מגדירים כדי לבצע פעולות ספציפיות על בסיס ערכים הקיימים בתוכניות שלנו או עוברים על ידי המשתמש באמצעות מיקום פרמטרים.