מדריך לכתיבת סקריפטים בבאש - bash¶
בשלב מסוים בלמידת לינוקס אתם עוברים ממצב שבו אתם מקלידים פקודה אחת בכל פעם, למצב שבו אתם רוצים שהמחשב יריץ עשר פקודות ברצף, כל בוקר, לבד. הרגע הזה הוא הרגע שבו אתם צריכים סקריפט. סקריפט bash זה בעצם קובץ טקסט עם רשימת פקודות טרמינל, שהמחשב מריץ אחת אחרי השנייה בשבילכם.
זה נשמע פשוט כי זה באמת פשוט, אבל זו אחת המיומנויות הכי שימושיות שיש. כל דבר משעמם וחוזר על עצמו שאתם עושים בטרמינל, אפשר להפוך לסקריפט וכבר לא לחשוב עליו יותר.
הסקריפט הראשון שלכם¶
כל סקריפט בבאש מתחיל בשורה שנקראת shebang, שנראית כך:
השורה הזו אומרת למערכת ההפעלה איזה תוכנית להריץ כדי לפרש את הקובץ. בלעדיה, לינוקס לא תמיד תדע איך לטפל בקובץ שלכם. אחריה, פשוט כותבים פקודות רגילות, בדיוק כמו שהייתם מקלידים בטרמינל:
שומרים את זה לקובץ בשם backup.sh, ואז צריך לתת לו הרשאת הרצה עם chmod +x backup.sh. משם, מריצים אותו עם ./backup.sh. זהו, בניתם סקריפט ראשון.
משתנים - לא לחזור על עצמכם¶
בדיוק כמו בכל שפת תכנות, בבאש יש משתנים. הם נכתבים ככה:
שימו לב - כשמגדירים משתנה אין רווחים סביב סימן השווה, אבל כשמשתמשים בו מוסיפים סימן דולר לפניו. זו טעות קלאסית של מתחילים, אז שווה לזכור אותה טוב.
משתנים הופכים סקריפט מרשימת פקודות קפואה לכלי גמיש. במקום לכתוב את שם התיקייה חמש פעמים בקובץ, כותבים אותו פעם אחת במשתנה ומשתמשים בו בכל מקום.
תנאים - לגרום לסקריפט לחשוב¶
הרבה פעמים אתם רוצים שהסקריפט יתנהג אחרת בהתאם למצב. לשם כך יש תנאי if:
if [ -f "config.txt" ]; then
echo "קובץ ההגדרות קיים"
else
echo "אין קובץ הגדרות, יוצר אחד"
touch config.txt
fi
ה--f בודק אם קובץ קיים. יש עוד המון בדיקות דומות - -d לתיקייה, -z למחרוזת ריקה, ועוד. הרעיון החשוב הוא שהסקריפט מקבל החלטות בעצמו, במקום שאתם תחליטו כל פעם ידנית.
לולאות - לחזור על פעולה בלי לשעמם¶
נניח שיש לכם עשרים קבצים ואתם רוצים לשנות את השם של כולם באותו אופן. בלי לולאה, זו עבודה ידנית מייגעת. עם לולאה, זו שורה אחת:
הלולאה עוברת על כל קובץ עם סיומת txt בתיקייה ומריצה עליו את הפקודות שבין do ל-done. זה בדיוק הרגע שבו סקריפטים הופכים ממשהו נחמד לכלי שחוסך לכם שעות עבודה.
טעויות נפוצות שכדאי להכיר מראש¶
הבעיה הכי שכיחה היא שכחת הרשאת הרצה - אם קיבלתם "Permission denied", כנראה שכחתם chmod +x. בעיה נוספת היא רווחים במקומות הלא נכונים, בעיקר בהגדרת משתנים ובתנאים - בבאש לרווחים יש משמעות, בניגוד לשפות תכנות אחרות שסולחות עליהם.
וטיפ אחרון - תמיד תריצו סקריפט חדש קודם על תיקייה או קובץ לא חשובים, במיוחד אם הוא מוחק או מזיז דברים. סקריפט עם באג שכולל rm יכול לגרום נזק אמיתי הרבה יותר מהר ממה שאתם מספיקים לעצור אותו.
למה שווה להשקיע בזה¶
אני רואה הרבה אנשים שמדלגים על כתיבת סקריפטים כי זה נראה "מתקדם מדי" בשלב הזה. זו טעות. סקריפטים הם למעשה תכנות במינון הכי קטן והכי מעשי שיש - אתם לומדים משתנים, תנאים ולולאות, בדיוק כמו בפייתון או בכל שפה אחרת, רק שכאן זה מיד פותר לכם בעיה אמיתית בעבודה היומיומית מול הטרמינל.
בקורס לינוקס הבסיסי שלנו יש פרק שלם על סקריפטים, עם תרגילים שבונים את זה שלב אחר שלב מהבסיס ועד סקריפט אמיתי שאתם כותבים לבד.
למדו לכתוב סקריפטים בקורס לינוקס הבסיסי
ואם נתקעתם באמצע כתיבת סקריפט, תשאלו בדיסקורד - יש שם אנשים שישמחו לעזור לכם לדבג.