اذهب إلى المحتوى

يعرض المقال الثالث من سلسلة باش كيفية تمرير الوسطاء arguments إلى سكربتات الصدفة باش، وإضافةً للوسطاء سنتعرف على بعض المتغيرات الخاصة في صدفة باش.

تعلمنا في المقال السابق كيف نستخدم المتغيرات لكتابة سكربتات باش عامة وديناميكية تتجاوب مع أنواع مختلفة من البيانات ومدخلات المستخدم، وسنتعلم هنا تمرير الوسطاء إلى سكربتات باش ضمن سطر الأوامر.

تمرير وسيط إلى سكربت باش

يحتسب السكربت count_lines.sh التالي عدد الأسطر الموجودة في أي ملف تزوده باسمه:

#!/bin/bash

echo -n "Please enter a filename: "
read filename
nlines=$(wc -l < $filename)

echo "There are $nlines lines in $filename"

يمكنك الرجوع للمقال الأول لتعرف كيف تُنشئ سكربت باش وتحوله لملف تنفيذي.

لنفترض أننا نود حساب عدد الأسطر الموجودة في الملف etc/passwd/ فستكون نتيجة تنفيذ السكربت كما في الصورة التالية:

img01 bash arguments

يمكننا تسهيل العملية بتمرير اسم الملف للسكربت بصفته وسيط سطر أوامر يكتب معه في نافذة سطر الأوامر عند التشغيل كما يلي:

./count_lines.sh /etc/passwd

يتطلب ذلك تعديلًا على السكربت نستخدم فيه المتغير 1$ الذي يشير إلى الوسيط الأول الذي سيتلقاه السكربت من سطر الأوامر (والذي يسمى المُحَدِّد الموضعي).

لنستبدل إذًا المتغير filename الخاص باسم الملف بالمتغير 1$ في كامل السكربت count_lines.sh السابق، ليصبح كما يلي:

#!/bin/bash

nlines=$(wc -l < $1)
echo "There are $nlines lines in $1"

استغنينا بهذه الطريقة عن الأمر read والأمر echo الأول، فأصبح السكربت أقصر.

يمكنك الآن تجربة السكربت على ملفات أخرى كما في المثال التالي:

./count_lines.sh    /etc/group
There are 73 lines in /etc/group

تمرير عدة وسطاء إلى سكربت باش

يمكنك تمرير أكثر من وسيط لسكربتات باش، وفق الصيغة التالية:

script.sh arg1 arg2 arg3  …

يشير المتغير 2$ للوسيط الثاني، والمتغير 3$ للوسيط الثالث وهكذا.

أما المتغير 0$ فيشير إلى اسم السكربت، وهو أحد المتغيرات الخاصة في صدفة باش.

لنُعدّل الآن السكربت السابق كما يلي ليقبل أكثر من ملف، ويحسب عدد الأسطر في كل واحد منها:

#!/bin/bash

n1=$(wc -l < $1)
n2=$(wc -l < $2)
n3=$(wc -l < $3)

echo "There are $n1 lines in $1"
echo "There are $n2 lines in $2"
echo "There are $n3 lines in $3"

يمكنك الآن تشغيل السكربت، وتمرير ثلاثة ملفات نصية له، لتحصل على أعداد الأسطر فيها كما يلي:

img02 bash multiple arguments

إذا فقد أعطانا السكربت عدد الأسطر في كل ملف من الملفات الثلاثة، وبالترتيب نفسه المكتوبة به، فترتيب تمرير الوسطاء للسكربت مهم لضمان دقة التنفيذ.

أبدِع في استخدام وسطاء باش

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

ألقِ نظرة على سكربت باش find.sh التالي لتوضيح الأمر:

#!/bin/bash

find / -iname $1 2> /dev/null

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

وبالطريقة نفسها يمكنك تحويل أي أمر طويل ومعقد من أوامر لينكس إلى سكربت باش سهل الاستخدام.

أما التعليمة: ‏‎2> /dev/null الواردة في السكربت فتحجب رسائل الخطأ مثل (لا يمكن الوصول للملف أو غيرها) من الظهور على الشاشة.

أشهر المتغيرات الخاصة في باش

توفر لك صدفة باش مجموعة من المتغيرات الخاصة المُضمنة فيها، وتُعدّ مفيدة جدًا في أي سكربت.

يتضمن الجدول أشهرها:

المتغير الخاص الوصف
$0 اسم السكربت
$1, $2…$n وسطاء سطر الأوامر
$$ مُعرّف العملية process id للصدفة shell الحالية
#$ العدد الكلي للوسطاء المُمَرَّة إلى السكربت
@$ قيم جميع الوسطاء المُمَرَّة إلى السكربت
?$ حالة الخروج لآخر أمر مُنَفذ
!$ مُعرّف العملية لآخر أمر مُنَفذ

يعطيك السكربت Variables.sh التالي مثالًا عمليًّا بسيطًا عن المتغيرات الخاصة:

#!/bin/bash

echo "Name of the script: $0"
echo "Total number of arguments: $#"
echo "Values of all the arguments: $@"

مرر عدد من الوسطاء التجريبية، ثم شغل السكربت، ولاحظ النتائج:

img03 special bash variables

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

ترجمة -وبتصرف- للمقال Passing Arguments to Bash Scripts لصاحبه Kabary.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...