logo

Bash Functions

בנושא זה, הדגמנו את היסודות של פונקציות bash וכיצד הן פועלות ב-bash shell scripting.

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

להלן כמה נקודות מפתח לגבי פונקציות bash:

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

תחביר

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

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

 function_name () { commands } 

ניתן להזכיר את גרסת קו בודד להלן:

 function_name () { commands; } 

2. השיטה השנייה מתחילה במילה השמורה לפונקציה, ואחריה שם הפונקציה:

רשימת חצים
 function function_name { commands } 

ניתן להזכיר את גרסת קו בודד להלן:

 function function_name { commands; } 

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

דוגמה: שיטה 1

 #!/bin/bash JTP () { echo 'Welcome to Javatpoint.' } JTP 

תְפוּקָה

 Welcome to Javatpoint. 

דוגמה: שיטה 2

 #!/bin/bash function JTP { echo 'Welcome to Javatpoint.' } JTP 

תְפוּקָה

 Welcome to Javatpoint. 

טיעונים עוברים

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

מחרוזת מרובת שורות של javascript

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

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

  • הגישה לארגומנטים הנתונים הם , , ... $n, המתאימים למיקום הארגומנטים אחרי שם הפונקציה.
  • המשתנה

    בנושא זה, הדגמנו את היסודות של פונקציות bash וכיצד הן פועלות ב-bash shell scripting.

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

    להלן כמה נקודות מפתח לגבי פונקציות bash:

    • יש להצהיר על פונקציה בסקריפט המעטפת לפני שנוכל להשתמש בה.
    • ניתן להעביר ארגומנטים לפונקציות ולגשת אליהם בתוך הפונקציה בתור $1, $2 וכו'.
    • ניתן להקצות משתנים מקומיים בתוך הפונקציה, וההיקף של משתנים כאלה יהיה רק ​​הפונקציה הספציפית הזו.
    • ניתן לעקוף פקודות מובנות של מעטפת Bash באמצעות פונקציות.

    תחביר

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

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

     function_name () { commands } 

    ניתן להזכיר את גרסת קו בודד להלן:

     function_name () { commands; } 

    2. השיטה השנייה מתחילה במילה השמורה לפונקציה, ואחריה שם הפונקציה:

     function function_name { commands } 

    ניתן להזכיר את גרסת קו בודד להלן:

     function function_name { commands; } 

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

    דוגמה: שיטה 1

     #!/bin/bash JTP () { echo 'Welcome to Javatpoint.' } JTP 

    תְפוּקָה

     Welcome to Javatpoint. 

    דוגמה: שיטה 2

     #!/bin/bash function JTP { echo 'Welcome to Javatpoint.' } JTP 

    תְפוּקָה

     Welcome to Javatpoint. 

    טיעונים עוברים

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

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

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

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

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

    Bash Script

     #!/bin/bash #Script to pass and access arguments function_arguments() { echo $1 echo $2 echo $3 echo $4 echo $5 } #Calling function_arguments function_arguments 'We''welcome''you''on''Javatpoint.' 

    תְפוּקָה

    Bash Functions

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

    לדוגמה,

    'אָנוּ' המילה מאוחסנת במשתנה 1 .
    'ברוך הבא' המילה מאוחסנת במשתנה 2 .
    'אתה' המילה מאוחסנת במשתנה 3 .
    'עַל' המילה מאוחסנת במשתנה 4 .
    'Javatpoint' המילה מאוחסנת במשתנה 5 .

    היקף משתנה

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

     local var_name= 

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

    Bash Script

     #!/bin/bash v1='A' v2='B' my_var () { local v1='C' v2='D' echo 'Inside Function' echo 'v1 is $v1.' echo 'v2 is $v2.' } echo 'Before Executing the Function' echo 'v1 is $v1.' echo 'v2 is $v2.' my_var echo 'After Executing the Function' echo 'v1 is $v1.' echo 'v2 is $v2.' 

    תְפוּקָה

    Bash Functions

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

    החזר ערכים

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

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

    לדוגמה, שקול את הקוד הבא:

    Bash Script

     #!/bin/bash #Setting up a return status for a function print_it () { echo Hello $1 return 5 } print_it User print_it Reader echo The previous function returned a value of $? 

    תְפוּקָה

    Bash Functions

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

    Bash Script

     #!/bin/bash print_it () { local my_greet='Welcome to Javatpoint.' echo '$my_greet' } my_greet='$(print_it)' echo $my_greet 

    תְפוּקָה

     Welcome to Javatpoint. 

    ביטול פקודות

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

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

    דוגמא

    בדוגמה זו, דרכנו את הפקודה 'הד' והוספנו את חותמת הזמן בצורת הארגומנט לפקודה 'הד'.

    Bash Script

     #!/bin/bash #Script to override command using function echo () { builtin echo -n `date +'[%m-%d %H:%M:%S]'` ': ' builtin echo $1 } echo 'Welcome to Javatpoint.' 

    תְפוּקָה

    Bash Functions

    סיכום

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


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

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

הסרה מרשימת המערכים

Bash Script

 #!/bin/bash #Script to pass and access arguments function_arguments() { echo  echo  echo  echo  echo  } #Calling function_arguments function_arguments 'We''welcome''you''on''Javatpoint.' 

תְפוּקָה

Bash Functions

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

לדוגמה,

'אָנוּ' המילה מאוחסנת במשתנה 1 .
'ברוך הבא' המילה מאוחסנת במשתנה 2 .
'אתה' המילה מאוחסנת במשתנה 3 .
'עַל' המילה מאוחסנת במשתנה 4 .
'Javatpoint' המילה מאוחסנת במשתנה 5 .

היקף משתנה

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

 local var_name= 

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

Bash Script

 #!/bin/bash v1='A' v2='B' my_var () { local v1='C' v2='D' echo 'Inside Function' echo 'v1 is $v1.' echo 'v2 is $v2.' } echo 'Before Executing the Function' echo 'v1 is $v1.' echo 'v2 is $v2.' my_var echo 'After Executing the Function' echo 'v1 is $v1.' echo 'v2 is $v2.' 

תְפוּקָה

java int ל-char
Bash Functions

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

החזר ערכים

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

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

לדוגמה, שקול את הקוד הבא:

Bash Script

 #!/bin/bash #Setting up a return status for a function print_it () { echo Hello  return 5 } print_it User print_it Reader echo The previous function returned a value of $? 

תְפוּקָה

Bash Functions

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

10 מתוך 100.00

Bash Script

 #!/bin/bash print_it () { local my_greet='Welcome to Javatpoint.' echo '$my_greet' } my_greet='$(print_it)' echo $my_greet 

תְפוּקָה

 Welcome to Javatpoint. 

ביטול פקודות

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

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

דוגמא

בדוגמה זו, דרכנו את הפקודה 'הד' והוספנו את חותמת הזמן בצורת הארגומנט לפקודה 'הד'.

Bash Script

 #!/bin/bash #Script to override command using function echo () { builtin echo -n `date +'[%m-%d %H:%M:%S]'` ': ' builtin echo  } echo 'Welcome to Javatpoint.' 

תְפוּקָה

Bash Functions

סיכום

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