Skip to main content

دليل المبتدئين إلى باش - الشروط والمتغيرات

Linux Tutorial for Beginners: Introduction to Linux Operating System (أبريل 2025)

Linux Tutorial for Beginners: Introduction to Linux Operating System (أبريل 2025)
Anonim

المقدمة

مرحبًا بكم في الجزء الثالث من "دليل المبتدئين إلى BASH". إذا كنت قد غاب عن المادتين السابقتين ، فربما تريد معرفة ما الذي يجعل هذا الدليل مختلفًا عن أدلة البرمجة النصية الأخرى في BASH.

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

يمكنك الاطلاع على أول دليلين عن طريق زيارة:

  • دليل المبتدئين إلى BASH - مرحبا العالم
  • دليل المبتدئين إلى BASH - معلمات الإدخال

إذا كنت جديدًا في برمجة Bash ، فأوصيك بقراءة أول دليلين قبل المتابعة مع هذا البرنامج.

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

تثبيت rsstail

من أجل اتباع هذا الدليل ، ستحتاج إلى تثبيت تطبيق سطر الأوامر يسمى rsstail والذي يُستخدم لقراءة مواجز RSS.

إذا كنت تستخدم نوع توزيع قائم على Debian / Ubuntu / Mint ، فقم بما يلي:

sudo apt-get install rsstail

بالنسبة إلى فيدورا / CentOS ، اكتب ما يلي:

yum تثبيت rsstail

ل openSUSE اكتب ما يلي:

zypper تثبيت rsstail

بيان IF

افتح الطرفية وقم بإنشاء ملف يسمى rssget.sh بكتابة ما يلي:

sudo nano rssget.sh

ضمن محرر nano أدخل النص التالي:

#! / بن / سحقrsstail -u http://z.about.com/6/o/m/linux_p2.xml؛

احفظ الملف بضغط CTRL و O ثم قم بالخروج بضغط CTRL و X.

قم بتشغيل البرنامج النصي بكتابة ما يلي:

sh rssget.sh

سيقوم البرنامج النصي بإرجاع قائمة العناوين من موجز ويب linux.about.com.

لا يعد هذا البرنامج نصيًا مفيدًا للغاية لأنه يسترد فقط العناوين من موجز ويب RSS واحد ولكنه يوفر الحاجة إلى تذكر المسار إلى موجز ويب RSS الخاص بـ Linux.about.com.

افتح البرنامج النصي rssget.sh في nano مرة أخرى وقم بتحرير الملف ليبدو كالتالي:

#! / بن / سحق

إذا كان $ 1 = "verbose"ثم rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml؛فاي

قم بتشغيل البرنامج النصي مرة أخرى بكتابة ما يلي:

sh rssget.sh مطول

هذه المرة تأتي تغذية RSS مع العنوان والارتباط والوصف.

دعنا نحلل النص البرمجي في جزء من التفاصيل:

يظهر #! / bin / bash في كل نص نكتبه. يبحث السطر التالي أساسًا عن أول معامل إدخال يقدمه المستخدم ويقارنه بكلمة "verbose". إذا كانت معلمة الإدخال وكلمة "verbose" تطابق السطور بين ثم و فاي ركض.

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

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

استخدم nano مرة أخرى لتحرير الملف rssget.sh وتعديل الشفرة على النحو التالي:

#! / بن / سحق

إذا كان $ 1 = "verbose"ثم rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml؛آخر rsstail -u http://z.about.com/6/o/m/linux_p2.xml؛فاي

احفظ الملف وشغله بكتابة ما يلي:

sh rssget.sh مطول

ستظهر قائمة بالعناوين والأوصاف والروابط. الآن قم بتشغيله مرة أخرى كما يلي:

sh rssget.sh العناوين

هذه المرة فقط تظهر قائمة العناوين.

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

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

قبل أن نحاول مسح هذه المشكلات ، أريد أن أظهر لك أمرًا آخرًا يتناسب مع عبارة IF.

قم بتحرير البرنامج النصي rssget.sh الخاص بك ليبدو كالتالي:

#! / بن / سحق

إذا كان $ 1 = "all"ثم rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml؛elif $ 1 = "description"ثم rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml؛

آخر rsstail -u http://z.about.com/6/o/m/linux_p2.xml؛فاي

قررت التخلص من الكلمة المطولة واستبدالها بكل شيء. هذا ليس الجزء المهم. السيناريو أعلاه يقدم أليف وهي طريقة قصيرة لقول ELSE IF.

الآن يعمل البرنامج النصي على النحو التالي. اذا ركضت ش rssget.sh كل شيء ثم تحصل على الأوصاف والروابط والعناوين. إذا كنت تعمل فقط ش وصف rssget.shستحصل فقط على العناوين والأوصاف. إذا قمت بتوفير أي كلمة أخرى ستحصل على قائمة من العناوين.

هذا يقدم وسيلة للخروج بسرعة مع قائمة من البيانات الشرطية. طريقة بديلة للقيام ELIF هي استخدام ما يعرف ببيانات IF المتداخلة.

فيما يلي مثال يوضح كيفية عمل عبارات IF المتداخلة:

#! / بن / سحق

إذا كان $ 2 = "aboutdotcom"ثم إذا كان $ 1 = "all" ثم rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml؛ elif $ 1 = "description" ثم rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml؛

آخر rsstail -u http://z.about.com/6/o/m/linux_p2.xml؛ فايآخر إذا كان $ 1 = "all" ثم rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss elif $ 1 = "description" ثم rsstail -d -u http://lxer.com/module/newswire/headlines.rss آخر rsstail -u http://z.about.com/6/o/m/linux_p2.xml؛ فايفاي

لا تتردد في كتابة كل ذلك إذا أردت أو نسخها ولصقها في ملف rssget.sh الخاص بك.

يقدم البرنامج النصي أعلاه معلمة ثانية تسمح لك باختيار "about.com" أو "lxer.com" على موجز RSS.

لتشغيله ، اكتب ما يلي:

sh rssget.sh كل aboutdotcom

أو

sh rssget.sh جميع lxer

يمكنك بالطبع استبدال جميع الأوصاف أو العناوين لتوفير أوصاف فقط أو مجرد عناوين.

في الأساس ، يشير الكود أعلاه إلى ما إذا كانت المعلمة الثانية هي aboutdotcom ، ثم أنظر إلى العبارة الثانية إذا كانت هي نفسها من النص السابق ، إذا كانت المعلمة الثانية هي lxer ثم أنظر إلى العبارة if الداخلية مرة أخرى لتحديد ما إذا كنت تريد إظهار العناوين والأوصاف أو كل شيء.

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

تخيل أنك تريد إضافة موجز RSS آخر مثل Everyday Linux User أو Linux Today؟ سيصبح البرنامج النصي ضخمًا وإذا قررت أنك تريد تغيير عبارة IF الداخلية ، فسيتعين عليك تغييرها في أماكن متعددة.

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

دعونا ننظر الآن في حل مشكلة الأشخاص الذين يدخلون معلمات داف. على سبيل المثال ، في البرنامج النصي أعلاه إذا أدخل المستخدم شيئًا آخر غير "aboutdotcom" كمعامل ثانٍ ، تظهر قائمة المقالات من خلاصة RSS من LXER بغض النظر عما إذا كان المستخدم يدخل lxer أم لا.

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

انظر إلى النص التالي (أو انسخه والصقه في ملف rssget.sh الخاص بك.

#! / بن / سحق

إذا كان $ 2 = "aboutdotcom" || $ 2 = "lxer"ثم إذا كان $ 1 = "all" || $ 1 = "description" || $ 1 = "title" ثم إذا كان $ 2 = "aboutdotcom" ثم إذا كان $ 1 = "all" ثم rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml؛ elif $ 1 = "description" ثم rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml؛

آخر rsstail -u http://z.about.com/6/o/m/linux_p2.xml؛ فاي آخر إذا كان $ 1 = "all" ثم rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss elif $ 1 = "description" ثم rsstail -d -u http://lxer.com/module/newswire/headlines.rss آخر rsstail -u http://z.about.com/6/o/m/linux_p2.xml؛ فاي فاي فايفاي

أول شيء يجب أن تلاحظه هو أن البرنامج النصي أصبح الآن كبيرًا إلى حد كبير ويمكنك أن ترى بسرعة كيف يمكن أن تصبح عبارات IF المتداخلة خارج السيطرة.

الشيء المهم في هذا البرنامج النصي هو عبارة IF || قسم THEN على السطر 2 والخط 4.

ذا لتقف على OR. لذا الخطإذا كان $ 2 = "aboutdotcom" || $ 2 = "lxer"يتحقق ما إذا كانت المعلمة الثانية تساوي "aboutdotcom" أو "lxer". إذا لم يكن الأمر كذلك ، فإن عبارة IF تكون كاملة لعدم وجودها آخر بيان الخارجي أكثر إذا.

وبالمثل على خط 4 الخط إذا كان $ 1 = "all" || $ 1 = "description" || $ 1 = "title"يتحقق ما إذا كانت المعلمة الأولى تساوي إما "الكل" أو "الوصف" أو "العنوان".

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

عكس || هو &&. يشير عامل التشغيل && إلى AND.

سأجعل النص يبدو أكثر شبهاً بالكابوس ، لكنه يجعل كل الشيكات المهمة للتأكد من أن المستخدم قد قدم معلمتين.

#! / بن / سحق

إذا كان $ # -eq 2ثم

إذا كان $ 2 = "aboutdotcom" || $ 2 = "lxer" ثم إذا كان $ 1 = "all" || $ 1 = "description" || $ 1 = "title" ثم إذا كان $ 2 = "aboutdotcom" ثم إذا كان $ 1 = "all" ثم rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml؛ elif $ 1 = "description" ثم rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml؛

آخر rsstail -u http://z.about.com/6/o/m/linux_p2.xml؛ فاي آخر إذا كان $ 1 = "all" ثم rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss elif $ 1 = "description" ثم rsstail -d -u http://lxer.com/module/newswire/headlines.rss آخر rsstail -u http://z.about.com/6/o/m/linux_p2.xml؛ فاي فاي فاي فايفاي

الجزء الوحيد الإضافي في هذا البرنامج النصي هو عبارة IF خارجية أخرى كما يلي:إذا كان $ # -eq 2. إذا قرأت المقالة حول معلمات الإدخال ، ستعرف أن $ # يعرض عددًا من معلمات الإدخال. و -eq لتقف على قدم المساواة. ومن ثم ، فإن عبارة IF تتحقق من أن المستخدم أدخل معلمتين وإذا لم يخرجا من القائمة فقط دون القيام بأي شيء. (غير ودية بشكل خاص).

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

الأمر الأخير الذي تحتاج إلى معرفته حول عبارات الشرطية هو عبارة CASE.

#! / بن / سحق

إذا كان $ # -eq 2ثم حالة 2 دولار في aboutdotcom) حالة $ 1 في الكل) rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml ;; وصف) rsstail -d -u z.about.com/6/o/m/linux_p2.xml ;; عنوان) rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml ;; ESAC ;; lxer) حالة $ 1 في الكل) rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss ;; وصف) rsstail -d -u http://lxer.com/module/newswire/headlines.rss ;; عنوان) rsstail -u http://lxer.com/module/newswire/headlines.rss ;; ESAC ;; ESACفاي

بيان الحالة هو طريقة أجمل للكتابة إذا كان EL ELSE IF ELSE IF ELSE IF.

على سبيل المثال هذا المنطق

إذا الفاكهة = الموزثم هذاآخر إذا الفاكهة = البرتقالثم هذاآخر إذا الفاكهة = العنبثم هذاإنهاء إذا

يمكن إعادة كتابتها على النحو التالي:

حالة الفاكهة في موز) افعل هذا ;; البرتقال) افعل هذا ;; العنب) افعل هذا ;;ESAC

في الأساس ، يكون العنصر الأول بعد الحالة هو الشيء الذي ستقارنه (أي الفاكهة). ثم كل عنصر قبل الأقواس هو الشيء الذي تقارنه ، وإذا كان يتطابق مع الخطوط السابقة ؛ سيتم ركض. يتم إنهاء بيان الحالة مع esac عكسي (وهو حالة backward).

في النص البرمجي rssget.sh يزيل بيان الحالة بعض ذلك التعشيش الشنيع على الرغم من أنه لا يحسّنه بشكل كاف.

لتحسين البرنامج النصي بالفعل ، أحتاج إلى تعريفك بالمتغيرات.

انظر الى الكود التالي:

#! / بن / سحق

lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"عرض = ""URL = ""

إذا كان $ # -lt 2 || $ # -gt 2ثم echo "usage: rssget.sh all | description | title aboutdotcom | lxer"؛ ىخرج؛فاي

حالة $ 1 في الكل) display = "- d -l -u" ;; وصف) display = "- d -u" ;; عنوان) عرض = "- ش" ;;ESAC

حالة 2 دولار في aboutdotcom) URL = $ aboutdotcom. ;; lxer) URL = $ lxer. ;;ESACعرض $ rsstail $ url؛

يتم تعريف متغير بإعطائه اسما ثم تخصيص قيمة له. في المثال أعلاه ، فيما يلي تعيينات المتغيرات:

lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"عرض = ""URL = ""

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

يتم الآن ضبط متغير العرض بناءً على ما إذا اخترت الكل أو الوصف أو العنوان وتم تعيين متغير url على قيمة المتغير aboutdotcom أو قيمة متغير lxer حسب ما إذا كنت قد اخترت aboutdotcom أو lxer.

الآن يجب أن يستخدم الأمر rsstail قيمة العرض وعنوان url للتشغيل بشكل صحيح.

في حين يتم تعيين المتغيرات فقط من خلال منحهم اسما واستخدامها فعليك أن تضع علامة $ أمامهم. بمعنى آخر متغير = قيم مجموعات متغير إلى قيمة بينما المتغير $ يعني إعطائي محتويات المتغير.

ما يلي هو البرنامج النصي النهائي لهذا البرنامج التعليمي.

#! / بن / سحق

lxer = "lxer.com/module/newswire/headlines.rss"aboutdotcom = "z.about.com/6/o/m/linux_p2.xml"everydaylinuxuser = "http://feeds.feedburner.com/everydaylinuxuser/WLlg"linuxtoday = "http://feedproxy.google.com/linuxtoday/linux"الاستخدام = "الاستخدام: rssget.sh الكل | الوصف | العنوان lxer | aboutdotcom | everydaylinuxuser | linuxtoday"عرض = ""URL = ""

إذا كان $ # -lt 2 || $ # -gt 2ثم صدى استخدام دولار. ىخرج؛فاي

حالة $ 1 في الكل) display = "- d -l -u" ;; وصف) display = "- d -u" ;; عنوان) عرض = "- ش" ;; *) صدى استخدام دولار. ىخرج؛ ;;ESAC

حالة 2 دولار في aboutdotcom) URL = $ aboutdotcom. ;; lxer) URL = $ lxer. ;; linuxtoday) URL = $ linuxtoday. ;; everydaylinuxuser) URL = $ everydaylinuxuser. ;; *) صدى استخدام دولار. ىخرج؛ESAC

عرض $ rsstail $ url؛

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

ملخص

لقد كانت هذه مقالة ملحمية وربما تكون قد ذهبت بعيدا جدا في وقت قريب جدا. في الدليل التالي سوف أريكم جميع خيارات المقارنة لبيانات IF ، ولا يزال هناك الكثير للتحدث عنه فيما يتعلق بالمتغيرات.

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

تحقق من كيفية (قم بالتمرير لأسفل الفئات لمشاهدة قائمة المقالات) قسم من linux.about.com للعثور على أدلة أكثر فائدة من التشغيل المزدوج Windows و Ubuntu لإعداد جهاز ظاهري باستخدام مربعات GNOME.