دليل المبتدئين إلى BASH - مقارنة الأشياء

01 من 08

دليل المبتدئين إلى BASH - مقارنة الأشياء

برنامج BASH التعليمي - مقارنة الأوتار.

في الجزء السابق من البرنامج التعليمي BASH نظرنا في البيانات الشرطية .

كان هذا الدليل طويلاً جدًا ولكنه أظهر فقط كيفية التحكم في تدفق المنطق. يوضح هذا الدليل الطرق المختلفة التي يمكنك من خلالها مقارنة المتغيرات.

توضح الصورة الموضحة أعلاه المثال الأول في دليل هذا الأسبوع:

#! / بن / سحق

NAME1 = "غاري"
NAME2 = "بوب"

if ["$ name1" = "$ name2"]
ثم
صدى "تطابق الأسماء"
آخر
صدى "الأسماء لا تتطابق"
فاي


في البرنامج النصي أعلاه قمت بتعريف اثنين من المتغيرات يسمى name1 و name2 وقمنا بتعيينهما القيم "gary" و "bob". بما أن المتغيرات متضمنة بين علامات الاقتباس ، فإنها تسمى متغيرات السلسلة التي تصبح أكثر أهمية كلما استمر البرنامج التعليمي.

لا يقوم البرنامج النصي بأكمله بمقارنة قيمة $ name1 و $ name2 وإذا كانا يطابقان إخراج السلسلة "تطابق الأسماء" وإذا لم يخرجوا السلسلة "فإن الأسماء غير متطابقة".

تعتبر علامات الاقتباس حول المتغيرات $ name1 و $ name2 مهمة لأنه إذا لم يتم تعيين قيمة أي منهما ، فسيظل البرنامج النصي يعمل.

على سبيل المثال ، إذا لم يتم تعيين $ name1 ، فستقارن "" بـ "bob". بدون علامات الاقتباس سيتم تركك مع = "bob" الذي يفشل بشكل واضح.

يمكنك أيضًا استخدام! = الترميز لتعريف لا يساوي كما يلي:

if ["$ name1"! = "$ name2"]

02 من 08

دليل المبتدئين إلى باش - مقارنة السلاسل

برنامج BASH التعليمي - مقارنة الأوتار.

في المثال أعلاه ، يقارن الاختبار نفس السمتين ويطرح السؤال الذي يأتي به gary قبل bob في الأبجدية؟

الاجابة بوضوح هي لا.

يقدم البرنامج النصي أقل من المشغل (<). نظرًا لاستخدام أقل من المشغل أيضًا لإعادة التوجيه ، يجب عليك الفرار منه باستخدام علامة مائلة (\) حتى تعني أقل مما هو السبب في السيناريو أعلاه مقارنة بـ "$ name1" \ <"$ name2".

عكس أقل من الواضح هو أكبر من. بدلاً من استخدام \ .

فمثلا

if ["$ name1" \> "$ name2"]

03 من 08

دليل المبتدئين إلى باش - مقارنة السلاسل

برنامج BASH التعليمي - مقارنة الأوتار.

إذا كنت ترغب في اختبار ما إذا كان للمتغير قيمة ، فيمكنك استخدام الاختبار التالي:

إذا كان [-n $ name2]

في البرنامج النصي أعلاه لقد اختبرت ما إذا كان $ name2 قد أعطيت قيمة وما لم تكن الرسالة "لا يوجد bob ، لم يكن هناك أبداً".

04 من 08

دليل المبتدئين إلى باش - مقارنة السلاسل

برنامج BASH التعليمي - مقارنة الأوتار.

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

على سبيل المثال:

name1 = ""

لاختبار ما إذا كان المتغير له قيمة أم لا (أي له طول صفري) استخدم -z كما يلي:

إذا كان [-z $ name1]

في البرنامج النصي أعلاه قمت بتعيين $ name1 إلى سلسلة طول صفري ثم مقارنتها باستخدام --z. إذا كانت قيمة $ name1 صفرية ، فسيتم عرض الرسالة "gary has out out the the evening".

05 من 08

دليل المبتدئين إلى BASH - مقارنة الأرقام

برنامج BASH التعليمي - مقارنة الأرقام.

حتى الآن جميع المقارنات كانت للسلاسل. ماذا عن مقارنة الارقام؟

يعرض النص أعلاه مثالاً لمقارنة رقمين:

#! / بن / سحق

و= 4
ب = 5

إذا كان [$ a = $ b]
ثم
صدى "4 = 5"
آخر
صدى "4 لا يساوي 5"
فاي

لتعيين متغير ليكون رقم ببساطة تعيينه دون علامات اقتباس. يمكنك بعد ذلك مقارنة الأرقام مع علامة يساوي.

لكنني أفضل استخدام المشغل التالي لمقارنة رقمين:

إذا كان [$ a -e $ $ b]

06 من 08

دليل المبتدئين إلى BASH - مقارنة الأرقام

برنامج BASH التعليمي - مقارنة الأرقام.

إذا كنت ترغب في مقارنة ما إذا كان الرقم أقل من رقم آخر ، فيمكنك استخدام أقل من عامل التشغيل (<). كما هو الحال مع السلاسل ، يجب عليك الهروب من أقل من المشغل باستخدام شرطة مائلة. (\ <).

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

فمثلا:

إذا كان [$ a -lt $ b]

إذا كان [$ a -le $ b]

إذا كان [$ a -ge $ b]

إذا كان [$ a -gt $ b]

07 من 08

دليل المبتدئين إلى BASH - مقارنة الأرقام

برنامج BASH التعليمي - مقارنة الأرقام.

أخيرًا لهذا الدليل ، إذا كنت تريد اختبار ما إذا كان رقمين مختلفين ، فيمكنك استخدام إما أقل من أو أكثر من المشغلين معًا (<>) أو - على النحو التالي:

إذا كان [$ a <> $ b]

إذا كان [$ a -ne $ b]

08 من 08

دليل المبتدئين إلى BASH - مشغلي المقارنة - ملخص

إذا فاتتك الأجزاء الثلاثة الأولى من هذا الدليل ، يمكنك العثور عليها بالنقر فوق الروابط التالية:

في الجزء التالي من الدليل سأقوم بتغطية الحساب.