ª
תוכן עניינים:
פונקציית Bash היא למעשה קבוצה של פקודות שניתן לקרוא לה פעמים רבות. מטרת הפונקציה היא לעזור לכם להפוך את סקריפטי ה- bash שלכם לקריאים יותר ולהימנע מכתיבת אותו קוד שוב ושוב.
בהשוואה לרוב שפות התכנות, פונקציות הבש מוגבלות במידה מסוימת. במדריך זה, נסקור את היסודות של פונקציות Bash ונראה לך כיצד להשתמש בהם בתסריטים של הקונכיות שלך.
הצהרת פונקציות בש
התחביר להצהרת פונקציית bash הוא פשוט מאוד. הם עשויים להיות מוצהרים בשני פורמטים שונים:
-
הפורמט הראשון מתחיל בשם הפונקציה, ואחריו סוגריים. זהו הפורמט המועדף והמשומש יותר.
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
מסיימת את הפונקציה. אתה יכול לחשוב על זה כמצב היציאה של הפונקציה.
#!/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
כמוצג להלן:
#!/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"
סיכום
פונקציית Bash היא בלוק של קוד לשימוש חוזר שנועד לבצע פעולה מסוימת. לאחר ההגדרה, ניתן לקרוא לפונקציה מספר פעמים בתוך סקריפט.
יתכן שתרצה לקרוא כיצד להשתמש בפונקציית Bash ליצירת פקודת קיצור דרך בלתי נשכחת לפקודה ארוכה יותר.
מסוף bashGmail מקבלת השלמה אוטומטית של פונקציות חיפוש

Google מביא את תכונת הצעת החיפוש ל- Gmail ומאפשר גישה מהירה לאנשי קשר, קבצים מצורפים ושיחות הודעות מיידיות מאוחסנות. הוסיף חיפוש רמיזי ל- Gmail, חמש שנים לאחר השקת השירות. התכונה החדשה 'השלמה אוטומטית של חיפוש' נותנת למשתמשים הצעות בזמן שהם מקלידים בתיבת החיפוש. הפונקציה מחזירה תוצאות כגון שמות אנשי קשר ומאפשרת למשתמשים לחפש באמצעות צ'אטים או קבצים מצורפים.
עדכוני Google כמה פונקציות של Apps

Google עדכנה כמה תכונות של Gmail ו- Google עבור לקוחות מסוימים של Google.
סקירה: Ashampoo תמונה ממיר 2 מטפל ביותר פונקציות עריכת תמונות בסיסיות

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