הבנת if else והצהרות תנאי אחרות ב־Bash

הכתיבה של סקריפט של Bourne Again Shell (Bash) יכולה להיות חווייתית, במיוחד כשאתה מוסיף לו לוגיקה כדי להבטיח את הגמישות שלו. דרך אחת לשלב לוגיקה זו ולהפוך את הסקריפט שלך לחכם יותר היא דרך שימוש בהצהרות תנאי, בדיוק 'bash if else'.

בהעמקה זו, אתה עומד להבין את הכוח והפינוטים של ההצהרות if-else ו-case ב-Bash. זה יסייע לך ליצור סקריפטים ב-Bash חכמים ובלתי טעים. נזרוק גם כמה ייעוץ מקצועי כדי לוודא שאתה כותב סקריפטים כמו מומחה.

מתרגש? התעמק, והרמת את תחום המומחיות שלך ב-Bash!

הכנה לפעולה: דרישות מוקדמות

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

  • A Linux or Windows system armed with Bash. For those on Windows, the Windows Subsystem for Linux (WSL) is your best bet.
  • A code/text editor to write and refine your ‘bash if else’ scripts.

למה לנצל את ההצהרות bash if else?

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

לדוגמה, תוכל להשתמש ב-'bash if else' כדי לוודא אם קובץ קיים לפני שאתה מנסה למחוק אותו. בנוסף, ייתכן שתרצה לראות אם משתמש מחזיק בהיתרים הנדרשים לפני שאתה מאפשר לו גישה למשאב.

הכנסת תסריטים עם מבנים 'bash if else' לא רק מחזקת את הגמישות שלהם אלא גם את יעילותם. דמיינו תסריט שמיועד לנקות את כל הקבצים בתיקייה. באמצעות 'bash if else', ניתן למחוק רק את הקבצים שנגילו למעלה מ-30 ימים, ולשמור על השאר.

נכנסים לתוך ההצהרה 'bash if else'

עכשיו, נשאיר את ההקדמה מאחור ונתחיל לעבוד. נתחיל עם אחת מההצהרות התנאי הנפוצות ביותר: ההצהרה 'bash if else'.

בלב ההצהרה 'bash if else' נמצאת דרך להכניס תנאים לתסריטים שלך. ניתן לראות את התחביר האלגנטי שלה למטה:

  • התחלה עם המילה המפתח if, לאחריה מתקיימים התנאים המקוננים בתוך [[ ]]. לאחר מכן, הקוד ששוכן בתוך ההצהרה 'bash if else' מתבצע, ומסתיים עם המילה המפתח fi.
  • המילה המפתח then מפרידה את התנאי מהפעולות (או ההצהרות) שמתבצעות כאשר התנאים מתקיימים. בלוק הפעולה יכול להיות מרובה שורות, מופרדות בנקודות פסיק (;).
if [[ condition ]]; then
	statement
fi

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

1. הפעילו את הטרמינל שלכם והתחילו קובץ חדש bash_if_demo.sh באמצעות העורך הטקסט המועדף עליכם. זה יהיה גן המשחק שלנו להבנת ההצהרות 'bash if else'.

nano bash_if_demo.sh

2. הטמע את דוגמת 'bash if else' המוצגת להלן בקובץ השלך bash_if_demo.sh. לאחר הטמעה, שמור את השינויים וצא מהעורך.

תסריט הדוגמה 'bash if else' מבקש שם משתמש. אם השם משתמש הצפוי נכנס, הודעת קבלת פנים תוצג, ותתייג בתאריך ושעה הנוכחיים.

שמירה על רשומה של תאריך ושעת נסיונות גישה של משתמשים יכולה להיות יקרה לניתוחים עתידיים.

השורה המבואית #!/bin/bash (לרוב ידועה כ-shebang) מציינת למערכת איזה מפרש להשתמש לעיבוד הקוד שאחריו בתסריט. כאן, 'bash' הוא המפרש שבחרנו.

#!/bin/bash
# מדפיס שאלה למסך.
echo "Whats your name?"
# תופס קלט מהמקלדת, ושמה אותו במשתנה $NAME
read NAME
# מתחיל את ההצהרה 'bash if else' - בודק אם הערך במשתנה $NAME 
# תואם את "ATA". אם יש התאמה, הקוד שנכלל יופעל. אחרת, הוא ידלג.
if [ $NAME == "ATA" ]
then
  # מציג הודעה רק אם הערך במשתנה $NAME שווה ל- "ATA".
  echo "Welcome back ATA!"
fi
# מחוץ להצהרת 'bash if else', זה תמיד מציג את התאריך והשעה הנוכחיים.
date

3. כעת, בואו נבדוק את סקריפט ה-'bash if else' שלנו. בצעו את הפקודה הבאה:

bash bash_if_demo.sh

רק תזכירו, בלתי תלוי בגרסת ה- Bash שאתם משתמשים בה, יש להקדים את שם הסקריפט שלכם ב-'bash'. זהו מבטיח שהמערכת תשתמש ב- Bash לביצוע הסקריפט.

הזינו "ATA" והקישו Enter. התוצאה אמורה להיראות כך:

Demonstration of the bash_if_demo.sh ‘bash if else’ Script

אם תזינו כל דבר שאינו "ATA", הודעת הברכה לא תופיע בפלט. רק התאריך והשעה הנוכחית יוצגו. ההתנהגות זו נגרמת על ידי הצהרת 'bash if else' הבודקת התאמה מדויקת לערך במשתנה $NAME.

שימו לב שההצהרות 'bash if else' תלויות בגופי גדר. לכן, "ata", "aTa", "Ata" וכו ', הם שונים מ-"ATA".

Outcome on Entering a Non-matching Value

נסו בתדירות קבועה את סקריפטי ה-'bash if else' שלכם עם קלטים שונים. זה מבטיח שהסקריפטים יפעלו כפי שצוין.

חפירה עמוקה: הצהרות 'bash if else' מקוננות

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

המבנה למטה ממחיש את התחביר הבסיסי להצהרות 'bash if else' מקוננות. כאן, ההצהרה החיצונית if [[ תנאים ]] מכילה קוד שניתן לבצע רק בתנאי שהתנאים מתממשים. בהקשר שלנו, הקוד המקונן הוא הצהרת 'if' נוספת.

  • if [[ תנאים ]] – זה מייצג את ההצהרה החיצונית 'if else' של bash. הקוד המקונן (הודעת 'if' נוספת) מתבצעת רק אם התנאי המצויין מתקיים.
  • if [[ תנאי2 ]] – זה מייצג את הסעיף הפנימי 'if else' של bash. הוא מכיל קוד שמתבצע רק אם ורק אם שני התנאים מתקיימים.
if [[ conditions ]]; then
	if [[ condition2 ]]; then
		statement
	fi
fi

בואו נעמיק עוד. בשדרוג הדוגמה הקודמת שלנו 'if else' ב- bash, נכלול כעת הצהרת if שמחפשת סיסמה:

1. ראשית, צרו קובץ חדש בשם bash_nested_if_demo.sh באמצעות עורך הטקסט המועדף עליכם.

nano bash_nested_if_demo.sh

2. העבירו את קוד 'if else' המסופק למטה לקובץ bash_nested_if_demo.sh, שמרו את השינויים שלכם וסגרו את העורך.

קוד 'if else' זה מזמין לשם ולסיסמה. במידה והתנאים לשם ולסיסמה מתאימים, מוצגת הודעה מסוימת. אם אין התאמה, הפלט מציג רק את התאריך והשעה הנוכחיים.

#!/bin/bash
# מציג הודעה המעוררת תשומת לב לשם משתמש.
echo "Whats your name?"
# אספקת קלט מהמשתמש.
read NAME
# מתחיל את ההצהרה 'bash if else' כדי לוודא האם $NAME תואם "ATA".
if [ $NAME == "ATA" ]
 then
 # שואל שאלה לאחר מכן, הפעם עבור סיסמה.
 echo "Password?"
 # איסוף הקלט של הסיסמה.
 read Password
   # 'bash if else' מקונן - מוודא אם הסיסמה $Password תואמת "pwd123".
   if [ "$Password" == "pwd123" ]; then
     # מציג הודעה אם שתי התנאים הנוגעים לשם ולסיסמה עומדים בתוקף.
     echo "You've successfully logged in as ATA."
   fi
fi
# מדגיש את התאריך והשעה הנוכחיים.
date

3. כעת, בואו נראה את התסריט 'bash if else' הזה בפעולה. הפעילו את הפקודה הבאה:

bash bash_nested_if_demo.sh

עבור תוצאות אופטימליות, הזינו ATA כשם משתמש ו- pwd123 כסיסמה.

Demonstrating the bash_nested_if_demo.sh Script in action

אם הקלט שלכם מתקבל אינו "ATA" או "pwd123", המשוב היחיד שתקבלו יהיה בנוגע לתאריך והשעה הנוכחיים. זה בגלל שמבנה ה- 'bash if else' מחייב ביצוע שני התנאים.

Validating if entered conditions are met using ‘bash if else’

פירוק 'Bash If Else' הצהרות

הצהרות 'Bash if else' הן יסודות בתסריטות Bash, המספקות יכולות קובעות לתסריטים שלך. אך, חשוב להבין כי שימוש בהצהרות 'if' אינו ללא חסרונות שלו.

האתגר הבולט הוא שהסתמכות יתרה על 'if' יכולה לעשות את הקוד שלך ללכלוך, ולהפוך אותו למעייף ומאתגר, במיוחד כאשר התנאים מקוננים. סקריפטים כאלה סובלים מסכריות קוד, המתארת את הקוד המבוך, וזהו מסתבר בקריאות נמוכה ומורכבות מתוך גובה.

אז, איך אפשר לייעל את הסקריפט שלך של 'if else' ב-'bash' כדי לשמור על המובנה? בחר בהצהרות 'if else' על פני ערימה של 'if' מקוננים. המילה 'else' מציעה את הנוחות של ציון קוד לביצוע אם התנאי 'if' נשאר ללא עמית.

לפרספקטיבה יותר ברורה, שקול את תחביר 'Bash If Else' למטה, היכן:

  • if [[ תנאים ]] – כאן, ההצהרה 'bash if else' כוללת את הקוד (הצהרה1) שמפעיל רק כאשר התנאי המצויין הוא חוקי.
  • else – זהו חלק מהמבנה 'bash if else'. ההצהרה else מכילה את הקוד (הצהרה2) שמבוצע כאשר התנאי בפסקה הקודמת if אינו מתקיים.
if [[ conditions ]]; then
	statement1
else
	statement2
fi

דמיינו לבנות משחק פשוט של 'if else' ב-'bash' שבו המערכת מצפה למספר אקראי מהמשתמש:

1. התחל בבניית קובץ חדש בשם bash_if_else_demo.sh.

nano bash_if_else_demo.sh

2. שבץ את הקוד של 'if else' הבא לתוך הקובץ שלך bash_if_else_demo.sh, שמור את השינויים, וצא.

הקוד הבסיסי של 'if else' מעורר במשתמש את מספר המזל שלו. אם הקלט הוא זוגי, הוא מציג את ההודעה 'אתה ניצחת!'. להיפך, מספר אי-זוגי מפעיל את הפלט 'אתה הפסדת!'.

#!/bin/bash
# שודר בקשה למספר המזל של המשתמש
echo -n "Input Your Lucky Number:"
# מקבל את המספר שהוזן.
read var
# תנאי 'bash if else' לוודא אם הערך הוא זוגי.
if [ $((var%2)) == 0 ]; then
 # מכריז על ניצחון אם התנאי נכון
 echo "You Won with 'bash if else'!"
else
 # מכריז על הפסד אם התנאי לא נכון
 echo "You Lost using 'bash if else'!"
fi

3. כדי לצפות בתסריט 'bash if else' בפעולה, הפעל את הפקודה למטה:

bash bash_if_else_demo.sh

בעת הזנת ספרה זוגית, עליך לראות את ההודעה "ניצחת עם 'bash if else'!" . להפך, הזנת ספרה אי זוגית צריכה לגרום למשוב "הפסדת באמצעות 'bash if else'!"

Run the ‘bash if else’ game, bash_if_else_demo.sh Script

כדי להעשיר את תסריט 'bash if else', שקול לכלול קטע שמקבל את כתובת האימייל של המשתמש אות או תו מיוחד בניגוד למספר.

פירוש 'Bash If Else' והצהרות Case

עד כה, חקרת מספר שיטות לקביעת החלטות בתסריטי Bash שלך, בעיקר דיונים 'bash if else'. אך Bash מציעה דרך נוספת לקביעת החלטות – צהרת case.

דומה ל-'bash if else', צהרת ה-case מיועדת להגדיר רצף קוד שיבוצע בהתאם לתנאים מסוימים. יתרון משמעותי עם צהרת ה-case הוא תמיכתה בקיצור ובבהירות, במיוחס לתרגילי 'bash if else' מקוננים.

להבין באופן מלא את האלטרנטיבה 'bash if else', בואו נעמיק בתחביר של ההצהרת case:

  • case $VAR in – רכיב זה של התחביר case מעריך את משתנה $VAR נגד תבניות מוגדרות עד שמצויה התאמה.
  • pattern1) ו־ pattern2) – אלו הם הקריטריונים לבדיקה, וכאשר נמצאת התאמה, הקוד התואם (statement1 או statement2) נפעל.
  • esac – מסיים את מבנה ה case.
case $VAR in
pattern1)
    statement1
    ;;
pattern2)
    statement2
    ;;
esac

תחשבו שאתם מעצבים סקריפט 'bash if else' שבו משתמשים מזינים את שמות המדינות שלהם, ובתגובה, הסקריפט מציג את השפה הרגישה ביותר של אותה מדינה.

1. התחילו על ידי יצירת קובץ בשם bash_case_demo.sh.

nano bash_case_demo.sh

2. שלבו את קוד ה 'bash if else' המסופק למטה לקובץ bash_case_demo.sh שלכם, ואז שמרו וצאו.

הסקריפט 'bash if else' הנ"ל יעזור למשתמש להזין את שם המדינה שלהם, ועל סמך התבניות 'case', ידפיס את השפה הראשית שמדוברת במדינה הנזכרת.

3#!/bin/bash
# מבצע חקירה שואלת את המשתמש על מדינת מגוריו
echo -n "In which country do you reside?"
# רושם את תשובת המשתמש.
read var
# חושף את השפה התקנית במדינה שנבחרה על ידי המשתמש ($var),
# בהינתן התבניות בתוך המסגרת 'case'.
echo -n "The official language of $var is "

# ציוני 'bash if else' case מערכת מעריכה אם קלט המשתמש ($var) מתאים לתבניות.
case $var in
# הקמת תבניות המגלות את השפה העיקרית של המדינה שנבחרה על ידי המשתמש.
 US)
  echo -n "English"
  ;;

 Canada)
  echo -n "English and French"
  ;;

 Algeria | Bahrain | Egypt| Jordan)
  echo -n "Arabic"
  ;;

 *)
  echo -n "unknown"
  ;;
esac

3. כדי לחוות את סקריפט 'bash if else' זה ממש ביד, השתמש בפקודה הבאה:

bash bash_case_demo.sh

תזהה כי הסקריפט מסמן בדיוק את השפה על פי בחירת המשתמש.

אם המדינה שסופקה לא תואמת את התבניות הקבועות, התבנית הברירת מחדל (*) נפעלת, והתוצאה היא "לא ידוע".

Illustrating the functionality of the bash_case_demo.sh Script

עיטור כתיבת דיבאג ב-Bash

במדריך זה, יצאת לדרך של הבנת 'bash if else' ותרחשת את יתרת ההצהרות התנאיות ב-Bash. מהפקודה הפשוטה 'if' ועד להצהרות המורכבות 'if-else' ו-'case', אתה כעת מצויד בכלי עיקריים לכתיבת סקריפטים יעילים ב-Bash.

עם היסודות הללו של 'bash if else' תוכל לבנות סקריפטים ב-Bash בצורה מיומנת יותר, ולהפחית את השגיאות.

אך תזכור, זה רק קצה של הקרח. Bash מציע רפרטואר נרחב של הצהרות תנאי. אולי כדאי לשקול לעמוד בתוך ההצהרה elif של Bash ו && , או אופרטורים || לעמק בהבנה. עם התמקדות, שליטה בתסריטים של Bash תהיה בקרוב תוך השגת מיומנות!

Source:
https://adamtheautomator.com/bash-if-else/