מדריך למתחילים ל-BASH
ברוכים הבאים לחלק השני של סדרת Beginners Guide To BASH שייחודית בכך שהיא הדרכה היחידה של BASH שנכתבה על ידי מתחיל למתחילים.
הקוראים של המדריך הזה יבנו את הידע שלהם, ובתקווה שעד הסוף יוכלו לכתוב כמה תסריטים חכמים למדי.
בפעם האחרונה כיסינו יצירת הסקריפט הראשון שלך שפשוט הציג את המילים "Hello World". זה מכסה נושאים כמו עורכי טקסט, איך לפתוח חלון מסוף, איפה לשים את הסקריפטים שלך, כיצד להציג את המילים "Hello World" וכמה נקודות עדינות יותר על דמויות בריחה כגון מרכאות ("").
סעיף זה מכסה פרמטרים של קלט. יש מדריכים אחרים שמלמדים דברים מהסוג הזה אבל בתדירות גבוהה מדי, הם קופצים לכמה דברים ברמה נמוכה למדי ואולי מספקים יותר מדי מידע.
סקריפט פרמטר מוסיף התאמה אישית
בתסריט "שלום עולם" מהמדריך האחרון הכל היה מאוד סטטי. התסריט לא באמת עשה הרבה בכלל.
איך נוכל לשפר את התסריט של "Hello World"?
מה לגבי תסריט שמברך את האדם שמנהל אותו? במקום לומר "Hello World" יהיה כתוב "Hello Gary", "Hello Tim" או "Hello Dolly".
ללא היכולת לקבל פרמטרי קלט היינו צריכים לכתוב שלושה סקריפטים "hellogary.sh", "hellotim.sh" ו-"hellodolly.sh".
כיצד ליצור פרמטר
על ידי מתן אפשרות לסקריפט שלנו לקרוא פרמטרים של קלט, נוכל להשתמש בסקריפט אחד כדי לברך כל אחד.
כדי לעשות זאת פתח חלון מסוף (CTRL + ALT + ט) ונווט אל תיקיית הסקריפטים שלך על ידי הקלדת הדברים הבאים: (לגבי פקודת cd)
סקריפטים של תקליטורים
צור סקריפט חדש בשם greetme.sh על ידי הקלדת הדברים הבאים: (לגבי פקודת מגע)
גע ב-greetme.sh
פתח את התסריט בעורך המועדף עליך על ידי הקלדת הדברים הבאים: (לגבי פקודת ננו)
nano greetme.sh
הזן את הטקסט הבא בתוך ננו:
#!/bin/bash
הד "שלום $@"
ללחוץ CTRL ו O לשמור את הקובץ ולאחר מכן CTRL ו איקס כדי לסגור את הקובץ.

כדי להפעיל את הסקריפט הזן את הדברים הבאים בשורת הפקודה והחלף בשמך.
sh greetme.sh טים
אם אני מריץ את הסקריפט עם השם שלי הוא מציג את המילים "שלום גארי".

בשורה הראשונה יש את השורה #!/bin/bash המשמשת לזיהוי הקובץ כסקריפט bash.
השורה השנייה משתמשת בהצהרת הד כדי להדהד את המילה hello ואז יש את הסימן $@ המוזר. (על פיקוד הד)
ה-$@ מתרחב כדי להציג כל פרמטר שהוזן יחד עם שם הסקריפט. אז אם תקליד "sh greetme.sh tim" המילים "שלום טים" יוצגו. אם הקלדת "greetme.sh tim smith" אזי המילים "hello tim smith" יוצגו.
שימוש בפקודות אקו
זה יכול להיות נחמד עבור הסקריפט greetme.sh פשוט לומר שלום רק באמצעות השם הפרטי. אף אחד לא אומר, "שלום גארי ניואל", כאשר הם פוגשים מישהו, אבל הם עלולים לומר, "שלום גארי," עם זאת.
בואו נשנה את הסקריפט כך שישתמש רק בפרמטר הראשון. פתח את הסקריפט greetme.sh בננו על ידי הקלדת הדברים הבאים:
nano greetme.sh
שנה את הסקריפט כך שייקרא כך:
#!/bin/bash
הד "שלום $1"
שמור את התסריט על ידי לחיצה על CTRL ו O ולאחר מכן צא על ידי לחיצה CTRL ו איקס.

הפעל את הסקריפט כפי שמוצג להלן (החלף את השם בשם שלך):
sh greetme.sh gary newell
כאשר אתה מפעיל את הסקריפט הוא פשוט יגיד, "שלום גארי" (או בתקווה "שלום" ומה שמך לא יהיה).

ה-1 אחרי הסמל $ אומר בעצם לפקודת echo, השתמש בפרמטר הראשון. אם תחליף את ה-$1 ב-$2, הוא יציג "hello newell" (או מה שלא יהיה שם המשפחה שלך). אתה יכול גם להוסיף $2 אחרי $1 כדי לקבל את השם המלא.

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

אגב, אם תחליף את ה-$2 ב-$3 והרצת את הסקריפט עם 2 פרמטרים בלבד, הפלט יהיה פשוט "Hello".
כיצד להציג את מספר הפרמטרים בשימוש
אפשר להציג ולטפל במספר הפרמטרים שהוזנו בפועל, ומדריכים מאוחרים יותר יראו כיצד להשתמש בספירת הפרמטרים לצורכי אימות.
כדי להציג את מספר הפרמטרים שהוזנו, פתח את הסקריפט greetme.sh (nano greetme.sh), ותקן את הטקסט באופן הבא:
#!/bin/bash
הד "הזנת $# שמות"
הד "שלום $@"
ללחוץ CTRL ו O כדי לשמור את התסריט ו CTRL ו איקס לצאת ננו.

ה-$# בשורה השנייה מציג את מספר הפרמטרים שהוזנו.
עד כה, כל זה היה חדשני אך לא שימושי במיוחד. מי צריך תסריט שפשוט מציג "שלום"?

אקו הצהרות לעומת קלט פרמטרים
השימוש האמיתי בהצהרות הד הוא לספק פלט מילולי ומשמעותי למשתמש. אם אתה יכול לתאר לעצמך שאתה רוצה לעשות משהו מסובך שכרוך בקריסת מספרים רצינית ומניפולציה של קבצים/תיקיות, זה יהיה שימושי להציג למשתמש מה קורה בכל שלב של דֶרֶך.
לעומת זאת, פרמטרי קלט הופכים את הסקריפט שלך לאינטראקטיבי. ללא פרמטרי קלט תזדקק לעשרות סקריפטים שכולם עושים דברים מאוד דומים אבל עם שמות קצת שונים.
עם כל זה בחשבון, ישנם עוד כמה פרמטרי קלט שימושיים שכדאי לדעת ואני אכלול את כולם בקטע קוד אחד.
פתח את הסקריפט של greetme.sh שלך ותקן אותו באופן הבא:
#!/bin/bash
echo "שם קובץ: $0"
echo "מזהה תהליך: $$"
הד ""
הד "הזנת $# שמות"
הד "שלום $@"
ללחוץ CTRL ו O כדי לשמור את הקובץ ו CTRL ו איקס לצאת.

כעת, הפעל את הסקריפט (החלף בשמך).
sh greetme.sh
הפעם התסריט מציג את הדברים הבאים:
שם הקובץ: greetme.sh
מזהה תהליך: 18595
הזנת 2 שמות
שלום גארי ניואל

ה-$0 בשורה הראשונה של הסקריפט מציג את שם הסקריפט שאתה מריץ. שימו לב שזה דולר אפס ולא דולר o.
ה-$$ בשורה השנייה מציג את מזהה התהליך של הסקריפט שאתה מפעיל. למה זה שימושי? אם אתה מריץ סקריפט בחזית, אתה יכול לבטל אותו על ידי לחיצה פשוטה CTRL ו ג. אם הרצתם את הסקריפט ברקע והוא התחיל להסתובב ולעשות את אותו הדבר שוב ושוב או התחילו לגרום נזק למערכת שלכם, תצטרכו להרוג אותו.
כדי להרוג סקריפט שרץ ברקע, אתה צריך את מזהה התהליך של הסקריפט. האם לא יהיה טוב אם התסריט ייתן את מזהה התהליך כחלק מהפלט שלו? (על פקודות ps והרוג)
לעטוף...
לבסוף, לפני שנסיים עם הנושא הזה, חשוב לדון לאן הולך הפלט. בכל פעם שהסקריפט רץ עד כה הפלט הוצג על המסך.
זה די נפוץ שפלט סקריפט נכתב לקובץ פלט. לשם כך הפעל את הסקריפט שלך באופן הבא:
sh greetme.sh gary > greetme.log
הסמל > בפקודה למעלה מוציא את הטקסט "שלום גרי" לקובץ בשם greetme.log.
בכל פעם שאתה מפעיל את הסקריפט עם הסמל > הוא מחליף את התוכן של קובץ הפלט. אם אתה מעדיף לצרף לקובץ החלף את > ב->>.
כעת אתה אמור להיות מסוגל לכתוב טקסט למסך ולקבל פרמטרים של קלט.