قد تحتاج في سكريتات باش للتعامل مع مئات المتغيرات التي يدخلها المستخدم وفي هذه الحالة لن يكون من المناسب أن تنشئ هذه المتغيرات يدويًا، وهنا يأتي دور المصفوفات 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]}
وستحصل بتنفيذه على الخرج التالي:
سنتعلم لاحقًا كيف نظهر عناصر المصفوفة باستخدام الحلقات 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")
تحتوي المصفوفة الآن أربعة عناصر، وتبين الصورة أدناه السكربت بعد إضافة العنصر الأخير:
حذف عناصر من مصفوفة باش
لننشئ مصفوفة تتضمن الأعداد من 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
تبين الصورة أدناه تنفيذ سكربت يتضمن كل ما تعلمناه في هذه الفقرة:
إنشاء مصفوفة هجينة بأنواع مختلفة من البيانات
تتميز باش عن الكثير من لغات البرمجة بقدرتها على إنشاء مصفوفات هجينة 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]}"
لاحظ أن مصفوفة المستخدمين السابقة تتضمن أربع عناصر هي:
- العنصر "john" نوعه سلسلة نصية String
- العنصر 122 نوعه عدد صحيح Integer
- العنصر "sudo,developers" نوعه سلسلة نصية String
- العنصر "bash" نوعه سلسلة نصية String
سيكون خرج السكربت على النحو التالي:
الخلاصة
نصل بذلك لنهاية مقال المصفوفات في لغة باش Bash الذي تعرفنا فيه على المصفوفات وكيفية استخدامها لتنظيم البيانات بكفاءة، وتعلمنا كيفية إنشاء المصفوفات والوصول لعناصرها وعكس ترتيبها وتعديلها وإضافة وحذف العناصر لها، وتعرفنا على طريقة إلى إنشاء مصفوفات هجينة تحتوي على أنواع بيانات مختلفة.
ترجمة -وبتصرف- للمقال Using Arrays in Bash.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.