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

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

أنشئ مصفوفتك الأولى في باش

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

لننشئ السكربت timestamp.sh الخاص بهذه العملية أولًا بطريقة المتغيرات دون استخدام المصفوفات، فسيكون على الشكل التالي:

#!/bin/bash

file1="f1.txt"
file2="f2.txt"
file3="f3.txt"
file4="f4.txt"
file5="f5.txt"

touch $file1
touch $file2
touch $file3
touch $file4
touch $file5

لننشئه الآن باستخدام المصفوفات ونلاحظ الفرق، سنخزن في المصفوفة أسماء الملفات الخمسة عوضًا عن تعريف خمس متغيرات تقابل أسماء الملفات الخمسة، وفيما يلي الصيغة العامة لتعريف المصفوفات في باش:

array_name=(value1 value2 value3 … )

لنطبق الصيغة على حالتنا، فستكون مصفوفة أسماء الملفات وفق التالي:

files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")

السكربت الآن أوضح وأكثر كفاءة وأقرب لمعايير الكود النظيف، فقد استبدلنا خمسة متغيرات بمصفوفة واحدة فقط.

الوصول لعناصر مصفوفات باش

تبدأ فهرسة مصفوفات باش بالصفر 0 ويستخدم الدليل n-1 للوصول إلى العنصر n من المصفوفة.

فإذا رغبنا بإظهار العنصر الثاني في المصفوفة فسنكتب التالي:

echo ${files[1]}

وللوصول للعنصر الثالث:

echo ${files[2]}

وهكذا لبقية العناصر.

لنجرب أمرًا آخر، ألقِ نظرة على السكربت التالي reverse.sh الذي سيظهر كامل عناصر مصفوفتك بترتيب عكسي من العنصر الأخير إلى الأول:

#!/bin/bash

files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")

echo ${files[4]}
echo ${files[3]}
echo ${files[2]}
echo ${files[1]}
echo ${files[0]}

وستحصل بتنفيذه على الخرج التالي:

img01 arrays in bash scripts

سنتعلم لاحقًا كيف نظهر عناصر المصفوفة باستخدام الحلقات Loops، فتكرار الأمر echo للغرض نفسه عددً كبيرًا من المرات ليس الطريقة الأفضل لإظهار عناصر المصفوفة.

يمكننا أيضًا إظهار عناصر المصفوفة دفعة واحدة في سطرٍ واحد كما في الأمر التالي:

echo ${files[*]}

f1.txt f2.txt f3.txt f4.txt f5.txt

ويساعدك الأمر التالي على إظهار عدد عناصر المصفوفة الذي يسمى اصطلاحًا حجم المصفوفة size of array:

echo ${#files[@]}

5

وبوسعك تغيير قيمة أي عنصر من عناصر المصفوفة بسهولة، ألقِ نظرة على السطر أدناه إذ نغير فيه قيمة العنصر الأول إلى القيمة "a.txt":

files[0]="a.txt"

إضافة عناصر جديدة إلى مصفوفة باش

لننشئ مثلًا المصفوفة التالية التي تتضمن أسماء أشهر توزيعات لينكس:

distros=("Ubuntu" "Red Hat" "Fedora")

تحتوي المصفوفة الحالية على ثلاثة عناصر، ويمكنك إضافة عناصر أخرى إلى نهايتها باستخدام المعامل =+، دعنا نضيف مثلًا توزيعة Kali بكتابة:

distros+=("Kali")

تحتوي المصفوفة الآن أربعة عناصر، وتبين الصورة أدناه السكربت بعد إضافة العنصر الأخير:

img02 add element to arrays

حذف عناصر من مصفوفة باش

لننشئ مصفوفة تتضمن الأعداد من 1 إلى 5:

num=(1 2 3 4 5)

يمكنك إظهار كافة عناصر المصفوفة كما يلي:

echo ${num[*]}

1 2 3 4 5

لنفترض أننا نرغب بحذف العنصر الثالث منها، فسنستخدم الأمر unset وفق التالي:

unset num[2]

أظهر الآن كافة عناصر المصفوفة كما يلي:

echo ${num[*]}
1 2 4 5

ولاحظ حذف العنصر الثالث.

يمكنك أيضًا حذف المصفوفة بالطريقة نفسها بكتابة الأمر أدناه:

unset num

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

img03 delete arrays in bash scripts

إنشاء مصفوفة هجينة بأنواع مختلفة من البيانات

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

#!/bin/bash

user=("john" 122 "sudo,developers" "bash")

echo "User Name: ${user[0]}"
echo "User ID: ${user[1]}"
echo "User Groups: ${user[2]}"
echo "User Shell: ${user[3]}"

لاحظ أن مصفوفة المستخدمين السابقة تتضمن أربع عناصر هي:

  1.  العنصر "john" نوعه سلسلة نصية String
  2.  العنصر 122 نوعه عدد صحيح Integer
  3. العنصر "sudo,developers" نوعه سلسلة نصية String
  4. العنصر "bash" نوعه سلسلة نصية String

سيكون خرج السكربت على النحو التالي:

img04 hybrid arrays in bash scripts

الخلاصة

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

ترجمة -وبتصرف- للمقال Using Arrays in Bash.


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

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

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



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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.


×
×
  • أضف...