כיצד להשתמש בהרחבות של $ () ו- $ {} בסקריפט של Shell

How Use Expansions Shell Script



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

במדריך זה נסביר שתיים מהרחבות הבש השימושיות ביותר המשמשות בתסריטים של מעטפת:







  • $ () - החלפת הפקודה
  • $ {} - החלפת הפרמטרים/הרחבת המשתנה

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



הפעלנו את כל הדוגמאות והתסריטים שהוזכרו במאמר זה על מערכת Debian 10 Buster. עם זאת, תוכל לשכפל אותם בקלות על רוב פגזי לינוקס. אנו משתמשים בשורת הפקודה המוגדרת כברירת מחדל של Debian, הטרמינל, להדרכה זו. ב- Debian, תוכל לגשת אליו באמצעות סרגל החיפוש של מפעיל היישומים באופן הבא:







כדי לגשת למפעיל היישומים, פשוט לחץ על מקש Super/Windows במקלדת.

$ () החלפת פיקוד

על פי המדריך הרשמי של GNU Bash:



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

$(פקודה)
אוֹ
'פקודה'

לדוגמה, פקודות ההד הבאות מחליפות את פלט פקודת התאריך כקלט שלהן:

$זרק$(תַאֲרִיך)
$זרק'תַאֲרִיך'

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

$היום= $(תַאֲרִיך)
$זרק '$ TODAY'

כלי עזר נוסף של החלפת הפקודה הוא בלולאות מעטפת כדי לקבל קלט. כאן ננסה להדפיס את כל קבצי ה- txt בתיקיית הבית שלנו באמצעות החלפת פקודות:

לוב /בית/לך/ *.טקסט
לַעֲשׂוֹת
זרק '$ f'
בוצע

שימוש בהחלפת פקודות בתסריט Shell

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

#!/bin/sh

זרק ***דו'ח מצב***

היום= $(תַאֲרִיך)
זרק 'היום זה$ TODAY'

משתמשים= $(מי | שירותים)
זרק '$ USERSמשתמשים מחוברים כרגע '

זמן פעולה= $(תַאֲרִיך;זמן פעולה)
זרק 'זמן הפעולה הוא$ UPTIME'

החלפת הפקודה הופעלה שלוש פעמים בתסריט זה; בהדפסת התאריך, משתמשים מחוברים וזמן פעולה. שמרנו את התסריט באופן הבא:

הפך אותו להפעלה ולאחר מכן הפעל אותו באמצעות הפקודה הבאה:

$chmod+ x status.sh
$./statys.sh

להלן הפלט של סקריפט status.sh שלנו:

אתה יכול, כמובן, ליצור תסריטים משמעותיים יותר על ידי ביצוע הדוגמאות שהזכרנו זה עתה.

$ {} החלפת/הרחבה של פרמטר

פרמטר, ב- Bash, הוא ישות המשמשת לאחסון ערכים. ניתן להתייחס לפרמטר על ידי מספר, שם או על ידי סמל מיוחד. כאשר פרמטר מופנה למספר, הוא נקרא a פרמטר מיקום . כאשר פרמטר מופנה לשם, הוא נקרא a מִשְׁתַנֶה . כאשר פרמטר מופנה על ידי סמל מיוחד, זה אומר שהם פרמטרים של הגדרה אוטומטית עם שימושים מיוחדים.

הרחבת/החלפת פרמטר הוא תהליך אחזור הערך מהישות/הפרמטר שהוזכר. זה כמו שאתה מרחיב משתנה כדי להביא את הערך שלו.

תחביר הרחבת הפרמטרים הפשוט ביותר הוא כדלקמן:

כך תוכל להשתמש בהרחבת הפרמטרים ב- Bash:

$ {parameter}

לדוגמה, השימוש הפשוט ביותר הוא להחליף את הפרמטר בערך שלו:

$שֵׁם='פלוני אלמוני'
$זרק $ {name}

פקודה זו תחליף את ערך שם המשתנה שישמש את פקודת ההד:

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

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

$זרק 'שמו של האדם הוא$ name_'

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

$זרק 'שמו של האדם הוא$ {name}_ '

להלן כל הדרכים בהן מוחלפים משתנים ב- Shell:

$ {משתנה} פקודה זו מחליפה את ערך המשתנה.
$ {variable: -word} אם משתנה הוא null או אם הוא אינו מוגדר, המילה מוחלפת במשתנה. ערך המשתנה אינו משתנה.
$ {משתנה: = מילה} אם משתנה הוא null או אם הוא אינו מוגדר, ערך המשתנה מוגדר ל- word.
$ {משתנה:? הודעה} אם משתנה הוא null או אם הוא אינו מוגדר, ההודעה מודפסת לשגיאת bash הסטנדרטית.
$ {משתנה:+מילה} אם מִשְׁתַנֶה מוגדר, מִלָה מוחלף למשתנה. עם זאת, ערך המשתנה עצמו אינו משתנה.

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