تكنولوجيا

ما هي قواميس باش على لينكس وكيفية استخدامها؟

فاطماواتي أحمد زينوري / Shutterstock.com

يوفر لك قاموس Bash خرائط التجزئة والمصفوفات الترابطية في البرامج النصية لـ Linux shell. سنوضح لك كيفية استخدام هياكل البيانات القوية والمفيدة هذه في البرامج النصية لشل Linux الخاصة بك.

ارتفع بأي اسم آخر

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

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

ومع ذلك ، لديهم عيب. إذا كنت لا تعرف موضع عنصر المصفوفة في القائمة ، فكيف يمكنك الوصول إليه؟ تحتاج إلى اجتياز جميع العناصر في المصفوفة واختبار ما إذا كانت القيمة في هذا الموضع هي القيمة التي تبحث عنها.

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

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

Bash 4.0 أو أعلى

تدعم Bash shell 4.0 أو أعلى المصفوفات الترابطية. إذا كنت تستخدم توزيعة Linux الحالية ، فيجب أن تكون على ما يرام. للتحقق من إصدار Bash الخاص بك ، استخدم الأمر التالي:

bash --version

الجهاز المستخدم للبحث في هذه المقالة مثبت عليه Bash 5.1.4 ، لذلك نحن سعداء جدًا.

المبدأ الأساسي

لإنشاء مصفوفة ترابطية في سطر أوامر طرفي أو نص برمجي ، نستخدم Bash للإعلان عن الأمر.هذا -A يخبر الخيار (الترابطي) Bash أن هذه ستكون مصفوفة ترابطية وليست مصفوفة مفهرسة.

declare -A acronyms

سيؤدي هذا إلى إنشاء مجموعة ترابطية تسمى “الاختصارات”.

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

array-name[key]=Value

دعنا نضيف بعض عناصر المصفوفة:

acronyms[ACK]=Acknowledgement
acronyms[BGP]="Border Gateway Protocol"
acronyms[CIDR]="Classless Inter-Domain Routing"
acronyms[DHCP]="Dynamic Host Configuration Protocol"
acronyms[EOF]="End of Frame"

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

لاسترداد القيم من المصفوفة ، نستخدم أمرًا بالتنسيق التالي:

$array-name[key]

يمكننا استخدام echo لإرسال الإخراج إلى النافذة الطرفية:

echo $acronyms[ACK]
echo $acronyms[DHCP]

استخدام الحلقة

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

نحن نستخدم declare الأمر (نفس -A خيارات) ، لكننا نقدم الكلمات الأساسية والقيم كقائمة في سطر الأوامر.

declare -A countries=( [ALB]=Albania [BHR]=Bahrain [CMR]=Cameroon [DNK]=Denmark [EGY]=Egypt )

اسم المصفوفة هو “countries” وهو متصل بقائمة القيم بعلامة يساوي ” =. “قائمة القيم محاطة بأقواس”()“، كل كلمة رئيسية محاطة بأقواس”[]“. لاحظ أنه لا توجد فاصلة بين القيمتين. إذا كانت لديك سلسلة قيمة تحتوي على مسافات ، فأنت بحاجة إلى إحاطة هذه القيم بعلامات اقتباس.

لجعل المصفوفة الترابطية ترجع الكلمات الأساسية بدلاً من القيم ، أضف علامة تعجب “!“قبل اسم المصفوفة. قبل الرمز”@“يمكن استخدامه كحرف بدل للإشارة إلى جميع عناصر المصفوفة.

هذا for ستدرج الحلقة جميع الكلمات الرئيسية:

for key in "$!countries[@]"; do echo $key; done

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

يمكننا أيضًا استخدام توسيع المعلمة لسرد جميع الكلمات الرئيسية. سيتم سردها في صف واحد بدلاً من صف واحد في كل صف.

echo "$!countries[@]"
echo "$!acronyms[@]"

يمكننا زيادة for تتم طباعة المفتاح والقيمة في وقت واحد في حلقة.

for key in "$!acronyms[@]"; do echo "$key - $acronyms[$key]"; done

إذا أردنا معرفة عدد العناصر الموجودة في المصفوفة ، فيمكننا استخدام التجزئة “#” أمام اسم المصفوفة بدلاً من علامة التعجب.

echo "$!countries[@]"
echo "$!acronyms[@]"

تحقق من وجود عنصر المصفوفة

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

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

if [ $acronyms[EOF]+_ ]; then echo "Found"; else echo "Not found"; fi
if [ $acronyms[FTP]+_ ]; then echo "Found"; else echo "Not found"; fi

تم العثور على عنصر المصفوفة بالكلمة الأساسية “EOF” في المصفوفة ، ولكن لم يتم العثور على عنصر المصفوفة بالكلمة الأساسية “FTP”.

أضف عناصر المصفوفة

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

لإضافة عناصر جديدة إلى المصفوفة ، نستخدم “+=” المشغل أو العامل.

countries+=( [FJI]=Fiji )
echo "$(#countries[@]}"
echo $countries[FJI]

عدد العناصر في المصفوفة هو الآن 6. البحث عن الكلمة الأساسية الجديدة سيجد عنصر المصفوفة ويعيد قيمته.

احذف عناصر الصفيف والمصفوفات

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

unset acronyms[EOF]
if [ $acronyms[EOF]+_ ]; then echo "Found"; else echo "Not found"; fi

لحذف المصفوفة بأكملها ، استخدم unset باسم المصفوفة.

unset countries

استخدم المتغيرات للمصفوفات

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

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

key=EOF
acronyms[$key]="End of Frame"
echo $acronyms[EOF]
echo $acronyms[$key]

الحصول على الإبداع

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

declare -A specification
specification[CPU]="Dual Core AMD Ryzen 5 3600"
specification[Speed]="3600 MHz"
specification[Kernel]="5.11.0-17-generic x86_64"
specification[Mem]="1978.5 MiB"
specification[Storage]="32 GiB"
specification[Shell]="Bash"
echo $specification[CPU]

تعني الكتابة بلغة ما فهم الآليات والتراكيب التي توفرها ، واختيار أنسبها للمشكلة التي تحاول حلها. توفر لك المصفوفات الترابطية طريقة سهلة الاستخدام لتخزين البيانات ، ويمكنك البحث بالاسم ، تمامًا مثل القاموس.

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى