כיצד לבצע פקודות מתוך סקריפט Shell

How Execute Commands From Within Shell Script



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

מאיפה הפקודות?

פקודות ב- bash מגיעות מכל אחת מהקטגוריות הבאות:







Bash עצמו (ראה מובנים)

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



תוכנות הפעלה בסביבה שלך (ראה פקודות חיצוניות)

כברירת מחדל, bash יירש משתנים מסוימים כברירת מחדל. זה נצפה במקרה של משתנה PATH כולל מיקומים עבור הפעלות שמפנים אותם כפקודות חיצוניות ב- bash. כלומר, אם סִלְסוּל הפקודה נמצאת בנתיב שלך, היא עשויה להתבצע מתוך סקריפט bash באותו אופן כמו במצב אינטראקטיבי. אנו מכנים פקודות מקטגוריה זו, פקודות חיצוניות או בקיצור פקודות.



פונקציה המוגדרת על ידי המשתמש (ראה פונקציות)

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





מהן פקודות

פקודה היא כל מילה שיש להתייחס אליה כאל נקודת כניסה יחידה של תוכנית בתוך סביבת המעטפת. במקרה שהפקודה מבוצעת, הפקודה עצמה והארגומנטים האופציונאליים מועברים כפרמטרים מיקוםיים, $ {0}, $ {1}, $ {2}, ... פרמטר המיקום האפסי ($ {0}) מציין את הפקודה עצמה ואינה משתנה בהקשר שלה. כלומר, בניגוד לפרמטרים מיקוםיים בפונקציות, $ {1}, $ {2},… שעשויים להשתנות בהתאם להקשר, $ {0} אינו משתנה בין שיחות פונקציות.

הפקודות נמדדות בהתאם למיקום ההצהרה והתכונות שהוקצו כ- global, מובנה ל- bash או מקומי לתוכנית bash שלך.



להלן רשימה של סוגי פקודות שכדאי לדעת.

פקודות מובנות

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

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

פקודות חיצוניות

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

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

bash: unknown-command:פקודהלא נמצא

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

סִלְסוּל() {
פקודה $ {FUNCNAME}...
}

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

שים לב כי הדוגמא לעיל עשויה להתבצע באמצעות כינוי כדלקמן.

כינוי סִלְסוּל= '
{
תלתל ...
}
'

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

פונקציות

פונקציות שולטות בבסח. לפני שמסתכלים על מובנים ופקודות חיצוניות, bash בודק אם פונקציה המוגדרת בשם פונקציית מועמד, המילה הראשונה מופיעה בשורה או אחרי; תו המייצג את סוף שורת הפקודה. היוצא מן הכלל היחיד הוא משתני bash הכתובים בכולות גדולות כגון $ {FUNCNAME}.

כינוי() { FUNCNAME= asdf;זרק $ {@ ,,};}
כינוי סִלְסוּל='כיתת TURL TEST' #?

פקודות פשוטות

פקודות פשוטות מוגדרות בעמודי bash man כמילה ואחריה ארגומנטים אופציונליים. בהקשר, פקודה פשוטה עשויה להיות פקודה מובנית, חיצונית או פונקציה.

כיצד לבצע פקודות מתוך סקריפט bash

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

להלן כמה דרכים לשלוט בקדימות בתסריט bash.

תן לבאס להחליט

שם הפקודה

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

בצע פקודה חיצונית

פקודהשם הפקודה

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

דוגמאות לפקודה חיצונית

דוגמאות לפקודה חיצונית בהנחה שההגדרות הבאות מותקנות:

קוֹבֶץ
ללכת
תאנית
דוגמה: קבל סוג קובץ ומידע
{ # קבל סוג קובץ ומידע
קוֹבֶץ $ {infile} # (1,2)
}
פקודה # (1), קובץ
# (2) infile = {נתיב לקובץ}
דוגמה: שלב שונה וקבצים חדשים ב- git
{ # קבצי שלב ב- git
git להוסיף.# (1)
}
פקודה # (1), git
דוגמה: צור אמנות ascii באמצעות Figlet
{ # צור אמנות ascii
תאנית$ {message} # (1,2)
}
פקודה # (1), figlet
# (2) message = {הודעה להצגה כ- ascii art}

בצע פקודה מובנית

מובנהשם הפקודה

נניח ש- command_name היא אחת הפקודות המוגדרות כמובנית ב- bash. כדי ליידע את bash שאנו רוצים להריץ command_name כמבנה מובנה אנו משתמשים במבנה המובנה.

דוגמאות פקודה מובנות
דוגמה: כמה מובנים?
מובנה{,}{,,}{,,,} # כמה מובנים?
דוגמה: פנטום מצהיר
{
לְהַכרִיז() { זרקאופס!;}
לְהַכרִיז–Xfלְהַכרִיז #?
}

סיכום

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