رموز مفقودة أو غير متوقعة
خطأ شائع آخر هو نسيان إكمال أمر مركب ، مثل if or في حين. لنلق نظرة على ما يحدث إذا أزلنا الفاصلة المنقوطة بعد تجربه بالعربي في ال if أمر:
#! / بن / باش
# مشكلة: البرنامج النصي لتوضيح الأخطاء الشائعة رقم = 1
إذا كان [$ number = 1] إذًا
صدى "الرقم يساوي 1." آخر
صدى "الرقم لا يساوي 1."
fi
#! / بن / باش
# مشكلة: البرنامج النصي لتوضيح الأخطاء الشائعة رقم = 1
إذا كان [$ number = 1] إذًا
صدى "الرقم يساوي 1." آخر
صدى "الرقم لا يساوي 1."
fi
والنتيجة هي:
[me @ linuxbox ~] $ مشكلة
/ home / me / bin / trouble: السطر 9: خطأ في بناء الجملة بالقرب من رمز غير متوقع
"آخر"
/ home / me / bin / trouble: السطر 9: "else"
[me @ linuxbox ~] $ مشكلة
/ home / me / bin / trouble: السطر 9: خطأ في بناء الجملة بالقرب من رمز غير متوقع
"آخر"
/ home / me / bin / trouble: السطر 9: "else"
مرة أخرى ، تشير رسالة الخطأ إلى حدوث خطأ بعد المشكلة الفعلية. ما يحدث هو حقا ممتع جدا. كما نتذكر ، if يقبل قائمة الأوامر ويقيم كود الخروج للأمر الأخير في القائمة. في برنامجنا ، نعتزم أن تتكون هذه القائمة من أمر واحد ، [، وهو مرادف للاختبار. ال [ يأخذ الأمر ما يليه كقائمة من الوسائط ؛ في حالتنا أربع حجج: $ عدد، 1، =و ]. مع إزالة الفاصلة المنقوطة ، الكلمة then تمت إضافته إلى قائمة الوسائط ، وهو قانوني نحويًا. الأتى صدى الأمر قانوني أيضًا. يتم تفسيره على أنه أمر آخر في قائمة الأوامر if سيقيم لكود الخروج. ال آخر يتم الرد عليه بعد ذلك ، ولكنه في غير محله ، نظرًا لأن الغلاف يتعرف عليه باعتباره a كلمة محجوزة (كلمة لها معنى خاص للصدفة) وليس اسم الأمر ، ومن هنا جاءت الرسالة القديمة.