שימוש בלולאת 'while' בסקריפט של Bash כדי לחזור על פקודות.
Bash (Burne Again Shell) היא שורת פקודה של מעטפת ושפת סקריפטים במערכות הפעלה GNU/Linux. זוהי מעטפת ברירת המחדל עבור רוב ההפצות של לינוקס.
כמו רוב שפות הסקריפט, Bash מספק תחבירי לולאה כדי לחזור על משימה דומה מספר פעמים. במאמר זה נלמד כיצד להשתמש ב- בזמן
לולאה ב-Bash.
מבוא
ה בזמן
לולאה ב-Bash משמשת לביצוע פקודות (פקודות מבוצעות) מספר פעמים בהתבסס על פלט של פקודות אחרות (פקודות תנאי). הפקודות המבוצעות ימשיכו לפעול עד שפקודת התנאי פועלת בהצלחה (כלומר, מחזירה סטטוס 0. כל פקודה בלינוקס מחזירה 0 להצלחה ומספר שלם שאינו אפס לכשל).
אם ישנן מספר פקודות תנאי, ההצהרה מתייחסת רק לסטטוס של הפקודה האחרונה ברשימה, כלומר, הלולאה מופעלת עד שהפקודה האחרונה ברשימה פועלת בהצלחה.
תחביר כללי
התחביר הכללי עבור בזמן
לולאה ב-Bash היא:
בזמן לעשות
רשימת הפקודות הביצוע תמשיך לפעול עד שהפקודה האחרונה ברשימת פקודות התנאי תפעל בהצלחה ותצא עם סטטוס 0. באיטרציה, כאשר פקודת התנאי האחרונה נכשלת, הלולאה יוצאת.
המשתמש יכול לציין כל קובץ הפעלה ברשימות הפקודות. זה יכול להיות תוכניות לינוקס סטנדרטיות או תוכניות משתמש מותאמות אישית או סקריפטים. כל פקודה צריכה להיות בשורה חדשה או מופרדת באמצעות נקודה-פסיק באותה שורה.
הבה נראה כמה דוגמאות.
לולאה עד שלמשתנה יש ערך מסוים: הלולאה הבאה מופעלת עד לערך המשתנה איקס
אינו שווה ל-10.
x=0 בעוד [[ $x -ne 10 ]] עושה הד $x ((x++))
בכל איטרציה, אנו בודקים אם הערך של x הוא 10. הערך נבדק באמצעות מִבְחָן
פקודה. [[ ביטוי ]]
הוא התחביר לפקודת הבדיקה (ראה מבחן גבר
). כאן מאז שאנו משתמשים ב- -לא
אופרטור (שמייצג 'לא שווה ל'), פקודת הבדיקה מחזירה 0, כלומר הצלחה, אם הערך של x אינו 10, והיא מחזירה ערך שאינו אפס, כלומר, כישלון אם הערך של x הוא 10.
ואז בתוך ה לעשות...עשה
בלוק, אנו מדפיסים את הערך של x ומגדילים אותו. ברגע שהערך של x הוא 10, פקודת הבדיקה מחזירה מצב שאינו אפס, והלולאה יוצאת.
הערה: את משתנה האינדקס לשימוש ב-while loop יש לאתחל לפני לולאת while או בפקודות התנאי, בניגוד ל-for loop, המאפשר לאתחל משתנה באופן מרומז.
עם מספר פקודות תנאי: הלולאה הבאה יוצרת 5 ספריות בשם dir0, dir1, ... dir4
.
z=0 בעוד הד "רשימת קבצים:" ls -l [[ $z -ne 5 ]] do echo "יצירת dir$z..." mkdir dir$z ((z++)) בוצע
פקודות ראשונות echo "רשימת קבצים:"
ו ls -l
יבצע פעם אחת לחלוטין; להצלחה או לכישלון שלהם אין כל השפעה על משך הזמן שהלולאה תפעל.
אז תבוצע פקודת הבדיקה לבדיקת הערך של המשתנה z. עד שהערך של z אינו 5, פקודת הבדיקה מחזירה את מצב ההצלחה, ומכאן שהלולאה ממשיכה לפעול. פקודות התנאי והפקודות המבוצעות ממשיכות לפעול לפי הסדר. כאן, עבור כל איטרציה, הוא יריץ תחילה את פקודת echo ואת פקודת ls בתנאי ולאחר מכן פקודת תנאי 3 תבדוק את הערך של z. אם הוא לא 5, הוא נכנס ללולאה ומבצע את הפקודות הנתונות.
הפסקה והמשך
הצהרת הפסקה עבור יציאה מותנית
אנחנו יכולים גם להשתמש בהצהרה המותנית אם
בתוך הלולאה. ה אם
ניתן להשתמש בהצהרה עם א לשבור
הצהרה, ליציאה מותנית מהלולאה.
x=0 בעוד [[ $x -ne 10 ]] לעשות אם [[ $x -eq 5 ]] הפסקת fi echo $x ((x++)) בוצע
לולאת ה-while שלמעלה תדפיס מספרים מ-0 עד 4. ואז כאשר הערך של i הוא 5, היא תפרוץ מהלולאה. זה שימושי במיוחד כאשר יש לצאת מלולאה כאשר פקודה נותנת פלט ספציפי.
המשך בהצהרה כדי לדלג על איטרציה באופן מותנה
לבש יש גם א לְהַמשִׁיך
הצהרה, כדי לדלג על חלק שנותר מאיטרציה בלולאה אם תנאי מסוים מתקיים.
x=0 בעוד [[ $x -ne 10 ]] לעשות אם [[ $x -eq 5 ]] המשך fi echo $x ((x++)) בוצע
הלולאה לעיל תדפיס מספרים מ-0 עד 10, למעט 5, כי במהלך האיטרציה של x=5
יש הצהרת continue, אשר תדלג על שאר הקוד בלולאה בהתחלה עם האיטרציה של x=6
.
שימוש בלולאות: סקריפטים ושורת פקודה
ניתן להשתמש בתחבירי הלולאה ב-Bash shell ישירות או מקובץ סקריפט של מעטפת להפעלה. דומה ל ל
ו בזמן
לולאות, פעם אחת בזמן
תחביר לולאה מוזן על המעטפת, המעטפת ממשיכה את ההנחיה כדי לאפשר למשתמש להמשיך את הפקודות שיעברו לולאה.
לחלופין, המשתמש יכול לשמור זאת בקובץ סקריפט ולהפעיל את קובץ הסקריפט.
ה #!/bin/bash
בהתחלה מציין את המתורגמן שישמש בעת ביצוע הקובץ. למרות ש-Bash היא המעטפת הנפוצה ביותר כיום, חלק מהמשתמשים מעדיפים קונכיות כמו זש
, אשר יש לציין במקום bash בתחילת קובץ זה.
לתת הרשאות ביצוע עבור הקובץ הזה, הפעל:
chmod +x test.sh
סוף כל סוף, כדי לבצע את הקובץ, הרץ:
./test.sh
סיכום
ה בזמן
לולאה, בדומה ל ל
ו עד
לולאות הן תכונה חשובה ב-Bash scripting. ל-While ללולאה יש שימוש דומה ללולאת עד, פרט לכך שהיא משמשת להפעלת פקודות/תוכניות חלופיות כאשר תוכנית מסוימת מצליחה. זה מוצא לעתים קרובות את התועלת שלו בתסריטי רשת מתקדמים, סקריפטים לתחזוקת מערכת וכו'.