באש

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה לניווט קפיצה לחיפוש
Bash
Gnu-bash-logo.svg
Bash demo.png
הדגמה של הרצת פקודות במעטפת Bash
מפתח פרויקט גנו עריכת הנתון בוויקינתונים
תאריך השקה 8 ביוני 1989 עריכת הנתון בוויקינתונים
גרסה אחרונה 5.0 (7 בינואר 2019) עריכת הנתון בוויקינתונים
מערכת הפעלה דמויי יוניקס
נכתבה בשפות C עריכת הנתון בוויקינתונים
סוג רישיון GPL גרסה 2+
קטגוריה מעטפת פקודה
אתר גנו
לעריכה בוויקינתונים שמשמש מקור לחלק מהמידע בתבנית OOjs UI icon info big.svg

באשאנגלית: Bash) היא מעטפת פקודה למערכות יוניקס, ולמערכות דמויות יוניקס (לדוגמה: גנו/לינוקס) מאת פרויקט גנו. המעטפת פותחה בשנת 1989 על ידי בריאן פוקס, בניצוחו של ריצ'רד סטולמן, כמיזם תוכנה חופשית וכתחליף ל-Bourne Shell, עבור פרויקט גנו. ברוב מערכות גנו/לינוקס, מופצת באש כברירת מחדל ומהווה בסיס חיוני למערכת (יחד עם כלים בסיסיים נוספים, גם כן מבית גנו).

מקור שם התוכנה[עריכת קוד מקור | עריכה]

שם המעטפת נגזר משם המעטפת Bourne shell שהופצה לראשונה בגרסה 7 של מערכת ההפעלה UNIX בשנת 1979. משמעות השם Bash היא ראשי תיבות של Bourne-again shell, כמשחק מילים על Bourne Shell. שם המעטפת בתרגום לעברית: "מעטפת (פקודה) שנולדה מחדש"[1]

מאפיינים טכניים[עריכת קוד מקור | עריכה]

שיפורים לעומת גרסאות קודמות[עריכת קוד מקור | עריכה]

תחביר הפקודות של באש הוא הרחבה של Bourne Shell ומציע מספר שיפורים לעומתו. בין השיפורים: עריכת פקודות, הסרת ההגבלה על גודל הזיכרון המוקצה לשמירת היסטוריות הפקודות שבוצעו דרך המעטפת, שליטה בתהליכי משתמש (jobs), כתיבת פונקציות, יצירת קיצורי שם לפקודות מורכבות (aliases), עבודה עם מערכים ללא הגבלת גודל, ביצוע חישובים אריתמטיים מבסיס 2 עד 64, שמירה לזיכרון מחסנית של מסלולים בעץ הקבצים (מנגון pushd/popd), תמיכה במערכים אסוציאטיביים (מערכים שהגישה אליהם אינה בעזרת אינדקס מספרי; החל מגרסה 4).

ממשקיות עם מערכות הפעלה נוספות[עריכת קוד מקור | עריכה]

המעטפת מופצת גם עם מערכת Mac OS X מבית אפל. ניתן להריץ את המעטפת גם על מערכת ההפעלה Windows מבית מיקרוסופט בעזרת Cygwin, אך המעטפת לא מיועדת לכך. בשנת 2016 מיקרוסופט הוציאה פתרון להרצת המעטפת במערכת ההפעלה חלונות 10 באמצעות כלי ייעודי מתוצרתה שפותח ביחד עם קנוניקל מפיצת Ubuntu[2].

Bash Scripting[עריכת קוד מקור | עריכה]

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

#!/bin/bash
 
#this line is just a plain comment and will be ignored by the executing shell.
if [ $# -lt 3 ] ; then
        echo "I expected at least 3 positional parameters for this script"
        exit 1
fi
#loop over all input arguments and print them in order
for x in $* ; do
        echo "the next argument is ${x}"
done
#loop over all input argument and print them in order
#but also shift them such that the second argument becomes the first one, etc.
while [ $# -gt 0 ] ; do
        echo "the next argument is ${1}"
        shift
done
# done, exit script with success code 0.
exit 0
  • שורות הערה יחלו בסימן #, למעט השורה הראשונה של הקובץ המתחילה ב- !#. שורה זו מציינת לליבת מערכת הפעלה באיזו מעטפת יש להריץ את הפקודות המופיעות בקובץ.
  • החלק הראשון של הסקריפט מכיל קטע התניה מהצורה if [...] ; then ... fi, שבודק את מספר הארגומנטים שהועברו לסקריפט משורת הפקודה בעזרת בחינה של המשתנה השמור #$. משתנה זה מציין את מספר הפרמטרים שמועברים לסקריפט
  • lt- הוא אופרטור השוואה המחזיר ערך אמת או שקר בהתאם לכך שהאופרנד השמאלי קטן מן האופרנד הימני. במקרה הזה נבדק שנשלחו לפחות שלושה פרמטרים משורת הפקודה. במידה ואין זה כך, מבוצע גוף הקטע המותנה שבו מודפסת הודעה בחזרה למעטפת בעזרת פקודת echo ומסתיים הסקריפט בקוד שגיאה 1 בעזרת הפקודה exit 1.
  • אם הקלט נמצא תקין, ממשיך הסקריפט לביצוע קטע לולאה מהצורה for x in list ; do ... done שבמקרה זה עובר על רשימת הפרמטרים שהועברו לסקריפט דרך שורת הפקודה (בעזרת בחינה של תוכן המשתנה השמור *$) והדפסתם למעטפת על פי סדר הופעתם.
  • הלולאה האחרונה שנראית בדוגמה מציגה שימוש בלולאה מותנית להדפסה ובה נבחן מספר הפרמטרים על ידי גישה למשתנה השמור #$ נוכח ביצוע פקודת shift בגוף הלולאה. הפקודה הנ"ל מבצעת הזזה של הפרמטרים שמועברים לסקריפט מימין לשמאל, במקום אחד בכל פעם.
  • בתום הסקריפט מוחזר ערך הצלחה 0 בעזרת הפקודה exit 0.

קישורים חיצוניים[עריכת קוד מקור | עריכה]

ויקישיתוף מדיה וקבצים בנושא באש בוויקישיתוף

הערות שוליים[עריכת קוד מקור | עריכה]