يعرض المقال الثالث من سلسلة باش كيفية تمرير الوسطاء 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/
فستكون نتيجة تنفيذ السكربت كما في الصورة التالية:
يمكننا تسهيل العملية بتمرير اسم الملف للسكربت بصفته وسيط سطر أوامر يكتب معه في نافذة سطر الأوامر عند التشغيل كما يلي:
./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"
يمكنك الآن تشغيل السكربت، وتمرير ثلاثة ملفات نصية له، لتحصل على أعداد الأسطر فيها كما يلي:
إذا فقد أعطانا السكربت عدد الأسطر في كل ملف من الملفات الثلاثة، وبالترتيب نفسه المكتوبة به، فترتيب تمرير الوسطاء للسكربت مهم لضمان دقة التنفيذ.
أبدِع في استخدام وسطاء باش
يساعدك استخدام وسطاء باش على تبسيط أوامر لينكس الطويلة أو المعقدة التي تحتاج لضبط الكثير من الخيارات، إذ يمكنك تحويلها لسكربتات باش بسيطة، وتشغيلها بعد تزويدها بالوسطاء.
ألقِ نظرة على سكربت باش 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: $@"
مرر عدد من الوسطاء التجريبية، ثم شغل السكربت، ولاحظ النتائج:
وفي الختام ننصحك بالتدرب أكثر على استخدام وسطاء باش حتى تتقن استخدامها بشكل جيد، وندعوك لمتابعةبقية المقالات في هذه السلسلة للتعرف أكثر على لغة باش واحترافها.
ترجمة -وبتصرف- للمقال Passing Arguments to Bash Scripts لصاحبه Kabary.
تعليقات
إرسال تعليق