אנדרואיד

פונקציות בש

ª

ª

תוכן עניינים:

Anonim

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

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

הצהרת פונקציות בש

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

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

    function_name () { commands }

    גרסת שורה אחת:

    function_name () { commands; }

    הפורמט השני מתחיל function השמורה שאחריה שם הפונקציה.

    function function_name { commands }

    גרסת שורה אחת:

    function function_name { commands; }

כמה נקודות שיש לציין:

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

כדי להבין זאת טוב יותר, הסתכל בדוגמה הבאה:

~ / hello_world.sh

#!/bin/bash hello_world () { echo 'hello, world' } hello_world

בואו ננתח את הקוד שורה אחר שורה:

  • בשורה 3 אנו מגדירים את הפונקציה על ידי מתן שם, ופותחים את הסד המתולתל { המסמן את תחילת גוף הפונקציה. קו 4 הוא גוף הפונקציה. גוף הפונקציה יכול להכיל פקודות מרובות והצהרות משתנות. קו 5 , סוגר הסגירה המתולתל } , מגדיר את סיום הפונקציה hello_world בשורה 7 אנו מבצעים את הפונקציה. אתה יכול לבצע את הפונקציה כמה פעמים שאתה צריך.

אם תריץ את התסריט, הוא ידפיס hello, world .

היקף משתנים

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

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

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

~ / variables_scope.sh

#!/bin/bash var1='A' var2='B' my_function () { local var1='C' var2='D' echo "Inside function: var1: $var1, var2: $var2" } echo "Before executing function: var1: $var1, var2: $var2" my_function echo "After executing function: var1: $var1, var2: $var2"

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

Before executing function: var1: A, var2: B Inside function: var1: C, var2: D After executing function: var1: A, var2: D

מהפלט שלמעלה, ניתן להסיק כי:

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

ערכי החזרה

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

ניתן לציין את סטטוס ההחזרה באמצעות מילת המפתח return , והיא מוקצית למשתנה $? . הצהרת return מסיימת את הפונקציה. אתה יכול לחשוב על זה כמצב היציאה של הפונקציה.

~ / return_values.sh

#!/bin/bash my_function () { echo "some result" return 55 } my_function echo $?

some result 55

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

~ / return_values.sh

#!/bin/bash my_function () { func_result="some result" } my_function echo $func_result

some result

אפשרות אחרת, טובה יותר להחזיר ערך מפונקציה היא לשלוח את הערך ל- stdout באמצעות הד או printf כמוצג להלן:

~ / return_values.sh

#!/bin/bash my_function () { local func_result="some result" echo "$func_result" } func_result="$(my_function)" echo $func_result

some result

במקום פשוט לבצע את הפונקציה שתדפיס את ההודעה ל- stdout, אנו מקצים את פלט הפונקציה למשתנה func_result באמצעות החלפת הפקודה $() . בהמשך ניתן להשתמש במשתנה לפי הצורך.

מעביר טיעונים לתפקודי bash

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

  • הפרמטרים שהועברו הם $1 , $2 , $3 $n , המתאימים למיקום הפרמטר לאחר שם הפונקציה. המשתנה $0 שמור לשם הפונקציה. המשתנה $# מחזיק את מספר הפרמטרים / טיעונים המוצבים שהועברו ל- פונקציה. המשתנים $* ו- $@ מכילים את כל הפרמטרים / טיעונים החיוביים המועברים לפונקציה.
    • כאשר מצוטט כפול, "$*" מתרחב למחרוזת יחידה המופרדת על ידי רווח (התו הראשון של IFS) - "$1 $2 $n" . כאשר ציטוט כפול, "$@" מתרחב למחרוזות נפרדות - "$1" "$2" "$n" . אם לא מצוטט כפול, $* ו- $@ זהים.

הנה דוגמה:

~ / passing_arguments.sh

#!/bin/bash greeting () { echo "Hello $1" } greeting "Joe"

Hello Joe

סיכום

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

יתכן שתרצה לקרוא כיצד להשתמש בפונקציית Bash ליצירת פקודת קיצור דרך בלתי נשכחת לפקודה ארוכה יותר.

מסוף bash