نحوه ایجاد و فراخوانی توابع در Bash

یک راهنمای سریع در مورد نحوه ایجاد و فراخوانی توابع در Bash.

یک تابع مجموعه ای از کد قابل استفاده مجدد است که برای انجام برخی اقدامات استفاده می شود. با استفاده از توابع ، مدولار بودن بهتر و درجه بالایی از استفاده مجدد از کد به دست می آید.

Bash برخی از توابع داخلی مانند echo را فراهم می کند و read ، اما ما همچنین می توانیم توابع خود را ایجاد کنیم.




ایجاد یک عملکرد در Bash

دو روش وجود دارد که می توانیم توابع را در Bash ایجاد کنیم:

یک راه این است که فقط از نام تابع استفاده کنید ، به عنوان مثال:


functionName(){ // scope of function }

نسخه جمع و جور:

functionName(){ echo 'hello'; }

روش دیگر اعلام عملکرد با استفاده از function است کلمه کلیدی:

function functionName { // scope of function }

نسخه جمع و جور:

function functionName { echo 'hello'; }

توجه کنید که چگونه به () نیاز نداریم هنگام استفاده از function کلمه کلیدی برای ایجاد یک تابع.


نکات مهمی که باید در مورد توابع Bash ذکر کنید:

  • کد بین بریس های فرفری {} بدنه و دامنه عملکرد است
  • هنگام فراخوانی یک تابع ، ما فقط از نام تابع از هرجای اسکریپت bash استفاده می کنیم
  • تابع باید قبل از استفاده تعریف شود
  • هنگام استفاده از نسخه جمع و جور ، آخرین دستور باید دارای یک علامت ویرگول باشد ; |

مثال:

کد زیر تابعی را ایجاد می کند که 'Hello World' را روی کنسول چاپ می کند. نام تابع فراخوانی می شود چاپ سلام :

#!/bin/bash printHello(){
echo 'Hello World!' }


فراخوانی یک عملکرد در Bash

چگونه تابع فوق را فراخوانی می کنیم؟ تمام کاری که شما باید در اسکریپت bash خود انجام دهید نوشتن نام عملکرد است و فراخوانی می شود.


مثلا:

#!/bin/bash printHello(){
echo 'Hello World!' } # Call printHello function from anywhere in the script by writing the name printHello

خروجی:

'Hello World'

عبور از استدلال ها

عملکرد فوق printHello() هیچ پارامتری ندارد هر زمان که ما آن را صدا کنیم ، خروجی 'Hello World' را دریافت می کنیم. اما اگر بخواهیم عملکرد عمومی تری ایجاد کنیم چه می کنیم؟ به عنوان مثال می توانیم تابع را با چند استدلال فراخوانی کنیم و آنچه را که برای آن ارسال می کنیم چاپ می کند.

دو راه برای انجام این کار وجود دارد.


ابتدا می توانیم printHello() را اصلاح کنیم تابع برای چاپ آرگومان هایی که به آن منتقل می شود:

مثلا:

#!/bin/bash printAny(){
echo 'Hello ' $1 } printAny World printAny DevQa printAny I love coding!

خروجی:

Hello World Hello DevQA Hello I

توجه داشته باشید که چگونه بیانیه چاپ سوم printAny I love coding! فقط 'سلام ، من' را تولید کرد.


دلیل این امر این است که عملکرد ما فقط برای گرفتن 1 پارامتر طراحی شده است $1. کلمه 'من کد نویسی را دوست دارم!' در واقع 3 پارامتر است.

اگر می خواستیم آن را چاپ کنیم ، باید متن را نقل قول کنیم

مثلا:

#!/bin/bash printAny(){
echo 'Hello ' $1 } printAny 'I love coding!'

خروجی:

Hello I love coding

مثال دیگر ، ما می توانیم به رقم نیز وارد کنیم:

#!/bin/bash add() {
result=$(($1 + $2))
echo 'Result is: $result' } add 1 2

خروجی:

Result is: 3

بازگرداندن مقادیر

توابع Bash همچنین می توانند مقادیر را برگردانند.

مثلا:

#!/bin/bash add() {
result=$(($1 + $2)) } add 1 2 echo 'The sum is: '$result

خروجی:

The sum is: 3

روش دیگر برای بازگرداندن مقادیر از یک تابع ، اختصاص نتیجه به یک متغیر است که می تواند در هر زمان لازم استفاده شود.

مثلا:

#!/bin/bash add () { local result=$(($1 + $2)) echo '$result' } result='$(add 1 2)' echo 'The sum is: '$result

خروجی:

The sum is: 3