مضى على الشبكة و يوم من العطاء.

Functions! الدرس السابع

  • بادئ الموضوع بادئ الموضوع speed
  • تاريخ البدء تاريخ البدء

speed

./عضو جديد

السمعة:

تعتبر الوظائف في Bash Scripting طريقة رائعة لإعادة استخدام التعليمات البرمجية. في هذا القسم من البرنامج التعليمي الخاص بـ Bash scripting ، ستتعرف على كيفية عملها وما يمكنك فعله بها.

فكر في الوظيفة على أنها نص صغير داخل البرنامج النصي. إنه جزء صغير من التعليمات البرمجية التي يمكنك الاتصال بها عدة مرات في البرنامج النصي الخاص بك. إنها مفيدة بشكل خاص إذا كان لديك مهام معينة تحتاج إلى القيام بها عدة مرات. بدلاً من كتابة نفس الرمز مرارًا وتكرارًا ، يمكنك كتابته مرة واحدة في دالة ثم استدعاء هذه الوظيفة في كل مرة

image
لنلق نظرة على مثال بسيط
كود:
    #!/bin/bash
    # Basic function
    print_something () {
    echo Hello I am a function
    }
    print_something
    print_something
1. print_something (): يتم تعريف وظيفة بسيطة تسمى print_something.
2. echo Hello I am a function: يتم طباعة “Hello I am a function” إلى الشاشة عند استدعاء الوظيفة.
3. print_something: يتم استدعاء الوظيفة print_something في هذا السطر.
4. print_something: يتم استدعاء الوظيفة print_something مرة أخرى في هذا السطر.

image
Passing Arguments
غالبًا ما نود أن تقوم الوظيفة بمعالجة بعض البيانات لنا. قد نرسل البيانات إلى الوظيفة بطريقة مشابهة لتمرير وسيطات سطر الأوامر إلى نص برمجي. نقوم بتزويد الوسيطات مباشرة بعد اسم الوظيفة. ضمن الوظيفة يمكن الوصول إليها
كود:
    #!/bin/bash
    # Passing arguments to a function
    print_something () {
    echo Hello $1
    }
    print_something Mars
    print_something Jupiter
تحتوي معظم لغات البرمجة الأخرى على مفهوم القيمة المرتجعة للوظائف ، وهي وسيلة للوظيفة لإرسال البيانات مرة أخرى إلى موقع الاتصال الأصلي. لا تسمح لنا وظائف Bash بالقيام بذلك. ومع ذلك ، فهي تسمح لنا بتعيين حالة العودة. على غرار كيفية خروج البرنامج أو الأمر مع حالة الخروج التي تشير إلى ما إذا كان قد نجح أم لا. نستخدم الكلمة الرئيسية return للإشارة إلى حالة الإرجاع
كود:
    #!/bin/bash
    # Setting a return status for a function
    print_something () {
    echo Hello $1
    return 5
    }
    print_something Mars
    print_something Jupiter
    echo The previous function has a return value of $?
السطر 6 - لا يجب أن تكون حالة الإرجاع مضمنة. قد يكون متغير
السطر 11 - تذكر أن المتغير $؟ يحتوي على حالة الإرجاع للأمر أو الوظيفة التي تم تشغيلها مسبقًا.
كود:
#!/bin/bash
# Setting a return value to a function
lines_in_file () {
cat $1 | wc -l
}
num_lines=$( lines_in_file $1 )
echo The file $1 has $num_lines lines in it
السطر 5 - سيطبع هذا الأمر عدد الأسطر في الملف المشار إليها بـ $ 1.
السطر 8 - نستخدم استبدال الأوامر لأخذ ما يُطبع عادةً على الشاشة وتعيينه إلى عدد الأسطر المتغيرة
يشير النطاق إلى أجزاء البرنامج النصي التي يمكنها رؤية المتغيرات. بشكل افتراضي ، يكون المتغير عمومي. هذا يعني أنه مرئي في كل مكان في النص. يمكننا أيضًا إنشاء متغير كمتغير محلي. عندما ننشئ متغيرًا محليًا داخل دالة ، يكون مرئيًا فقط داخل هذه الوظيفة. للقيام بذلك ، نستخدم الكلمة الرئيسية local أمام المتغير في المرة الأولى التي حددنا فيها قيمتها
image
كود:
    #!/bin/bash
    # Experimenting with variable scope
    var_change () {
    local var1='local 1'
    echo Inside function: var1 is $var1 : var2 is $var2
    var1='changed again'
    var2='2 changed again'
    }
    var1='global 1'
    var2='global 2'
    echo Before function call: var1 is $var1 : var2 is $var2
    var_change
    echo After function call: var1 is $var1 : var2 is $var2
image
Overriding Commands

من الممكن تسمية وظيفة بنفس اسم الأمر الذي تستخدمه عادةً في سطر الأوامر. هذا يسمح لنا بإنشاء غلاف. على سبيل المثال ربما في كل مرة نسمي الأمر ls في البرنامج النصي ، ما نريده بالفعل هو ls -lh. يمكننا القيام بما يلي

كود:
    #!/bin/bash
    # Create a wrapper around the command ls
    ls () {
    command ls -lh
    }
    ls
في المثال أعلاه ، إذا لم نضع أمر الكلمة الأساسية أمام ls في السطر 5 ، فسننتهي في حلقة لا نهاية لها. على الرغم من وجودنا داخل الدالة ls عندما نستدعي ls ، فقد استدعت مثيلًا آخر للدالة ls والتي بدورها كانت ستفعل الشيء نفسه وهكذا.

Summary

image
 
التعديل الأخير بواسطة المشرف:

آخر المشاركات

عودة
أعلى