اختبار: إتقان Bash و Shell
هل تستطيع التحدث مع الحواسيب؟ أعني، بطلاقة؟
اختبر مهاراتك في كتابة نصوص Bash مع هذه الأسئلة الـ16!
تغطي المتغيرات، الحلقات، الشروط، معالجة النصوص، الدوال، والمزالق النحوية من الأساسية إلى الصعبة.
صقل (أو إثبات) مهاراتك في كتابة نصوص الصدفة!
كيف يتم تعريف المتغيرات في Bash؟
يتم إعلان المتغيرات في Bash بدون مسافات حول علامة =. على سبيل المثال:
name=Aliceهذا يعين القيمة "Alice" للمتغير name.
ملاحظة: $name يُستخدم للإشارة أو قراءة قيمة المتغير.
إضافة مسافات تجعل الصدفة تفسر الأمر كبرنامج لتشغيله، وهو ليس ما تريده عند تعيين متغير.
أيضًا، Bash حساس لحالة الأحرف، لذا name و NAME و Name متغيرات مختلفة.
أخيرًا، لا يمكن أن تحتوي أسماء المتغيرات على مسافات أو شرطات (-). استخدم الشرطات السفلية (_) أو camelCase بدلاً من ذلك.
ما الذي سيطبع It's 🔨 Time!؟
أعرف. من الجنون كيف يجعل الإفلات تحليل السلاسل النصية صعبًا بسرعة. تخيل إفلات لغات أخرى في سلاسل Bash - مع كل تلك علامات الاقتباس والفواصل العليا ورموز $ التي قد تزعجك. 🫠
لا يمكن وضع علامة اقتباس مفردة داخل سلسلة Bash مقتبسة بعلامات مفردة، حتى مع شرطة مائلة عكسية. أغلق الجزء المقتبس، ثم اكتب علامة اقتباس مُفلتة خارجه وأعد فتح الاقتباس. التسلسل (إغلاق الاقتباس، إفلات الاقتباس، إعادة فتح الاقتباس) ('\'') يسمح بإخراج:
It's 🔨 Time!هناك طرق أخرى للتعامل مع هذا، لكن هذه هي الأكثر شيوعًا.
الآن، ماذا سيطبع هذا؟
price="$100"echo "Cost: $price"المتغيرات المرقمة لها معنى خاص. في هذه الحالة، $1 هو متغير خاص يحمل الوسيط الأول الذي تم تمريره إلى السكريبت أو الدالة.
بما أننا نشغل السكريبت في بيئة REPL، فلا توجد وسائط، لذا فإن $1 فارغ. النص المتبقي 00 يُطبع كما هو.
لطباعة حرف $ حرفيًا، استخدم علامات الاقتباس المفردة، أو قم بإفلاته باستخدام الخط المائل العكسي (\):
price="\$100"echo "Cost: $price"كيف يمكنك الحصول على طول متغير في Bash؟
الصيغة ${#username} تُرجع طول username.
على سبيل المثال:
username="@justsml"echo ${#username} # => 8بينما wc قد تعمل، إلا أنها تقنيًا ليست جزءًا من Bash.
الأداة wc هي نكتة داخلية قديمة تشير إلى “water closet”، أو المرحاض.
أمزح! هل يقرأ أحد هذه النصوص؟
في الواقع wc هي أمر قديم من Posix (وأيام AT&T Unix.) وهي اختصار لـ “word count” ويمكنها عد الأسطر والكلمات والأحرف في ملف أو تيار إدخال.
كيف يمكننا مقارنة السلاسل النصية في Bash؟
cat1="Rosie"cat2="Sunflower"if [ "$cat1" === "$cat2" ]; then echo "Same cat"else echo "Different cats"fiخطأ آخر في بناء الجملة الاختباري!
هل لاحظت العامل غير الصحيح ===؟
ربما كنت تفكر في JavaScript…
مع [ ... ]، يبلغ Bash عن تشخيص ويكون الشرط خاطئًا، لذا يطبع فرع else Different cats. في Bash، استخدم = أو == لمقارنات المساواة.
كيف تعمل العمليات الحسابية في Bash؟
بناء الجملة (( )) يقوم بإجراء العمليات الحسابية على الأعداد الصحيحة في Bash.
يمكن استخدامه في العمليات الحسابية البسيطة:
((result = 2 + 2))echo $result # => 4أو للتعبيرات الشرطية:
if (( 2 > 1 )); then echo "2 is greater than 1"fiللعمليات الحسابية على الأعداد العشرية، فكر في استخدام bc أو awk.
ماذا يفعل : في هذا السكريبت؟
rosie="Bad cat, good cat"echo ${rosie:9}الصيغة ${var:offset} تستخرج سلسلة فرعية تبدأ من offset. هنا، المخرجات هي:
good catلاستخراج سلسلة فرعية بطول محدد، استخدم ${var:offset:length}.
للاستخراج من نهاية السلسلة، استخدم ${var: -offset}. (لاحظ المسافة قبل -!)
هل تركك اختبار Bash الخاص بي في حالة من الفوضى؟
أخبرني في التعليقات أدناه!
قراءة إضافية
حسّن مهاراتك في Bash باستخدام الموارد التالية:
- دليل Bash
- أسئلة شائعة عن Bash
- ShellCheck
- أكاديمية Bash
- درس تعليمي لبرمجة Bash
- دليل Bash المرجعي
- ويكي Bash Hackers
- دليل Bash للمبتدئين
- بطاقة Bash المرجعية
