كيفية تصحيح أخطاء برنامج باش؟

How Debug Bash Script




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

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







ما هي شل في لينكس؟

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



في يونكس ، هناك نوعان من الأصداف الرئيسية قذيفة بورن و قذيفة C. . كلا النوعين لهما فئات فرعية. أنواع مختلفة من قذائف بورن قذيفة كورن (ksh) ، قذيفة Almquist (الرماد) ، Bourne قذيفة مرة أخرى (bash) ، و شل Z (zsh) . في الوقت نفسه ، تحتوي قذيفة C على فئات فرعية خاصة بها مثل قذيفة C (csh) و قذيفة TENEX C. (tcsh) . كما ذكرنا أعلاه ، من بين جميع القذائف ، باش (بورن شل مرة أخرى) هي الصدفة الأكثر استخدامًا وتخرج من منطقة الجزاء في العديد من توزيعات Linux نظرًا لكفاءتها وسهولة استخدامها.



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





ما هو برنامج شل النصي:

كما تعلمنا الفكرة الأساسية لـ shell ، فلنتحرك الآن نحو البرمجة النصية للصدفة. البرنامج النصي shell هو برنامج كمبيوتر ينفذ أوامر متعددة في shell يعمل كمترجم لأداء وظيفة معينة. كما نوقش أعلاه ، هناك نوعان محددان من القذائف. ومع ذلك ، يركز هذا الدليل على قذيفة Bourne Again (Bash).
إذن ما هو نص باش؟ في Linux ، يتم تخزين جميع أوامر bash بتنسيق / البيرة / بن و / بن المجلدات. على سبيل المثال ، عندما تقوم بتشغيل أمر ما ، يبحث bash عما إذا كان موجودًا في الدليل أم لا. يتم تنفيذ الأمر إذا وجد في الدلائل آخر يعطي خطأ.

ماذا عن أداء مهمة تحتاج إلى أوامر متعددة لتشغيلها في الجهاز؟ في هذه الحالة المحددة ، يمكن أن تساعدك البرمجة النصية bash. البرمجة النصية Bash هي شكل من أشكال البرمجة النصية للقذيفة والتي تسمح لك بإنشاء برامج لتشغيل أوامر bash متعددة لأداء مهمة محددة.



ما هي الأخطاء في البرمجة النصية باش:

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

كل لغة برمجة لها إجراءاتها الخاصة للعثور على الأخطاء ؛ وبالمثل ، فإن لدى bash أيضًا العديد من الخيارات المضمنة لتصحيح أخطاء برنامج طرفية.

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

كيفية تصحيح أخطاء برنامج باش:

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

هناك العديد من الأدوات في Linux لتصحيح الأخطاء ، على سبيل المثال ، GNU Debugger aka gdb. أدوات مثل GDB مفيدة للغات البرمجة التي يتم تجميعها في ثنائيات. نظرًا لأن bash هي لغة مفسرة بسيطة ، فلا داعي لأدوات ثقيلة لتصحيحها.

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

حسنًا ، تعد إضافة التأكيدات إحدى التقنيات التقليدية القديمة. هناك مجموعات من العلامات / الخيارات المتاحة في bash لتصحيح أخطاء نصوص bash. يمكن إضافة هذه الخيارات مع shebang في النصوص أو إضافتها أثناء تنفيذ البرنامج في المحطة. الموضوعات التي سنتناولها مدرجة أدناه:

  1. كيفية تصحيح أخطاء البرنامج النصي bash عن طريق تمكين مطول -v اختيار
  2. كيفية تصحيح أخطاء برنامج باش باستخدام ملفات xtrace -x اختيار
  3. كيفية تصحيح أخطاء برنامج باش باستخدام ملفات noexec -n اختيار
  4. كيفية التعرف على غير مجموعة المتغيرات أثناء تصحيح أخطاء البرنامج النصي bash
  5. كيفية تصحيح أخطاء جزء محدد من نص باش
  6. كيفية تصحيح أخطاء برنامج باش باستخدام امتداد فخ أمر
  7. كيفية تصحيح أخطاء برنامج باش بإزالة ملف globbing باستخدام -F اختيار
  8. كيف يجمع خيارات التصحيح لتصحيح أخطاء برنامج شل
  9. كيف إعادة توجيه تقرير التصحيح إلى ملف

فلنتحقق من الأساليب المختلفة في bash لتصحيح أخطاء نصوص bash:

1. كيفية تصحيح أخطاء bash script عن طريق تمكين خيار Verbose -v:

من أسهل الطرق لتصحيح أخطاء البرنامج النصي bash استخدام امتداد الملف -الخامس الخيار ، المعروف أيضًا باسم مطول. يمكن إضافة الخيار مع shebang أو وضعه بوضوح مع اسم ملف البرنامج النصي أثناء تنفيذه. سيقوم الخيار المطول بتنفيذ وطباعة كل سطر من الكود كعملية بواسطة المترجم. دعونا نفهم ذلك من خلال مثال على نص برمجي bash:

#! /bin/bash
رما - طرد - قذف 'أدخل الرقم 1'
اقرأرقم 1
رما - طرد - قذف 'أدخل الرقم 2'
اقرأرقم 2
لو [ 'number1 دولار' -Gt 'number2 دولار' ]
من ثم
رما - طرد - قذف 'Number1 أكبر من Number2'
أليف [ 'number1 دولار' -مكافئ 'number2 دولار' ]
من ثم
رما - طرد - قذف 'Number1 يساوي Number2'
آخر
رما - طرد - قذف 'Number2 أكبر من Number1'
يكون

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

$سودوملائمتثبيت انا قد جئت

قم بإنشاء ملف نصي باش باستخدام:

$انا قد جئتb_script.sh

إذا كنت جديدًا على محرر Vim ، فإنني أوصيك بالتعلم كيفية استخدام محرر vim قبل المتابعة.

الآن ، عد إلى البرنامج النصي ، قم بتنفيذ البرنامج النصي باستخدام -الخامس اختيار:

$سحق -الخامسb_script.sh

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

#! / بن / باش -v

وبالمثل ، يمكن أيضًا إضافة العلم المطول في السطر التالي من shebang باستخدام يضع أمر:

#! /bin/bash
يضع -الخامس

يمكن لأي من الطرق التي تمت مناقشتها أعلاه تمكين الإسهاب.

2 كيفية تصحيح أخطاء برنامج bash باستخدام خيار xtrace -x:

يعد تتبع التنفيذ ، المعروف أيضًا باسم xtrace ، خيارًا ذكيًا ومفيدًا لتصحيح الأخطاء ، خاصةً لتتبع الأخطاء المنطقية. عادة ما ترتبط الأخطاء المنطقية بالمتغيرات والأوامر. للتحقق من حالة المتغير أثناء تنفيذ البرنامج النصي ، نستخدم الامتداد -x اختيار. الآن مرة أخرى ، قم بتشغيل b_script.sh ملف بامتداد -x علم:

$سحق -xb_script.sh

يظهر الناتج بوضوح قيمة كل متغير أثناء عملية التنفيذ. مرة أخرى ، فإن -x يمكن استخدامها بجانب shebang وبعد سطر shebang باستخدام الأمر set. يضع xtrace علامة + مع كل سطر من البرنامج النصي.

3 كيفية تصحيح أخطاء برنامج bash باستخدام خيار noexec -n:

الأخطاء النحوية هي أحد الأسباب الرئيسية للأخطاء. نستخدم ملفات noexec (لا يوجد تنفيذ). الخيار المستخدم في وضع noexec هو -ن. سيعرض فقط أخطاء بناء الجملة للشفرة بدلاً من تنفيذها. نهج أكثر أمانًا لتصحيح أخطاء الكود. دعونا ننفذ b_script.sh مرة أخرى مع اختيار:

$سحق b_script.sh

لن يكون هناك تنفيذ للكود إذا لم يكن هناك خطأ في بناء الجملة. الآن ، دعونا نعدل الكود الخاص بنا:

#! /bin/bash

رما - طرد - قذف 'أدخل الرقم 1'
اقرأرقم 1
رما - طرد - قذف 'أدخل الرقم 2'
اقرأرقم 2
لو [ 'number1 دولار' -Gt 'number2 دولار' ]
من ثم
رما - طرد - قذف 'Number1 أكبر من Number2'
أليف [ 'number1 دولار' -مكافئ 'number2 دولار' ]
#من ثم
رما - طرد - قذف 'Number1 يساوي Number2'
آخر
رما - طرد - قذف 'Number2 أكبر من Number1'
يكون

أنا أعلق من ثم بعد، بعدما أليف . الآن ، مع تنفيذ -n b_script.sh النصي:

$سحق b_script.sh

كما هو متوقع ، حدد الخطأ بوضوح وعرضه في المحطة.

4 كيفية تحديد المتغيرات غير المحددة أثناء تصحيح أخطاء bash script:

من الشائع إجراء خطأ مطبعي أثناء كتابة رمز. في كثير من الأحيان ، تخطئ في كتابة متغير ، والذي لا يسمح بتنفيذ التعليمات البرمجية. لتحديد مثل هذا الخطأ ، نستخدم -u اختيار. دعونا نعدل الكود مرة أخرى:

#! /bin/bash
رما - طرد - قذف 'أدخل الرقم 1'
اقرأرقم 1
رما - طرد - قذف 'أدخل الرقم 2'
اقرأرقم 2
لو [ 'num1 دولار' -Gt 'number2 دولار' ]
من ثم
رما - طرد - قذف 'Number1 أكبر من Number2'
أليف [ 'number1 دولار' -مكافئ 'number2 دولار' ]
من ثم
رما - طرد - قذف 'Number1 يساوي Number2'
آخر
رما - طرد - قذف 'Number2 أكبر من Number1'
يكون

في الاول لو البيان الشرطي ، لقد أعدت تسمية رقم 1 متغير ل عدد 1 . حاليا عدد 1 هو متغير غير محدد. الآن قم بتشغيل البرنامج النصي:

$سحق -ub_script.sh

حدد الإخراج ويعرض بشكل صريح اسم متغير غير محدد.

5. كيفية تصحيح أخطاء جزء معين من البرنامج النصي bash:

يعالج وضع xtrace كل سطر من التعليمات البرمجية ويعطي الإخراج. ومع ذلك ، فإن العثور على أخطاء في رمز كبير سيكون مضيعة للوقت إذا كنا نعرف بالفعل أي جزء من المحتمل أن يتسبب في الخطأ. لحسن الحظ ، يسمح لك xtrace أيضًا بتصحيح جزء معين من الكود ، والذي يمكن إنجازه باستخدام ملف يضع أمر. مكان مجموعة -x في بداية الجزء الذي يجب تصحيحه ثم مجموعة + x في نهايةالمطاف. على سبيل المثال ، أريد تصحيح أخطاء العبارات الشرطية لـ b_script.sh ، لذلك سوف أرفق جميع العبارات الشرطية في مجموعة -x و مجموعة + x الخيارات كما هو موضح في الكود أدناه:

#! /bin/bash
رما - طرد - قذف 'أدخل الرقم 1'
اقرأرقم 1
رما - طرد - قذف 'أدخل الرقم 2'
اقرأرقم 2
يضع -x
لو [ 'رقم $' -Gt 'number2 دولار' ]
من ثم
رما - طرد - قذف 'Number1 أكبر من Number2'
أليف [ 'number1 دولار' -مكافئ 'number2 دولار' ]
من ثم
رما - طرد - قذف 'Number1 يساوي Number2'
آخر
رما - طرد - قذف 'Number2 أكبر من Number1'
يكون
يضع+ س

الآن ، قم بتشغيل البرنامج النصي باستخدام bash b_script.sh .

الإخراج هو تصحيح فقط شروط if كما هو محدد.

6. كيفية تصحيح أخطاء برنامج باش باستخدام الأمر trap:

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

#! /bin/bash
فخ 'صدى' السطر $ {LINENO}: الرقم الأول هو $ number1 ، والرقم الثاني هو $ number2 والمبلغ هو $ sum 'تصحيح
رما - طرد - قذف 'أدخل الرقم الأول'
اقرأرقم 1
رما - طرد - قذف 'أدخل الرقم الثاني'
اقرأرقم 2
مجموع= دولار[number1 + number2]
رما - طرد - قذف 'المجموع هومبلغ دولار'

ال فخ الأمر مع تصحيح عرض إشارة حالة المتغيرات رقم 1 و رقم 2 و مجموع بعد تنفيذ كل سطر كما هو موضح في صورة الإخراج التالية:

المربعات الصفراء عبارة عن مسافات فارغة لأن المستخدم لم يدخل بعد أي إدخال ؛ سوف تملأ هذه الفراغات عندما يقوم المستخدم بإدخال القيم. هذه الطريقة مفيدة أيضًا في تصحيح أخطاء البرامج النصية bash.

7. كيفية تصحيح أخطاء برمجية bash عن طريق التخلص من ملف globbing باستخدام الخيار -f:

ملف globbing هو عملية العثور على الملفات التي تحتوي على أحرف البدل ، أي * و ؟ . في كثير من الحالات ، لا تحتاج إلى توسيع الملفات أثناء التصحيح. في مثل هذه الحالات ، يمكنك حظر الملف المتلألئ باستخدام امتداد -F اختيار. دعونا نفهم ذلك مع النص fglobe_script.sh :

#! /bin/bash
رما - طرد - قذف 'عرض كافة الملفات النصية'.
ls *.رسالة قصيرة

سيعرض الكود أعلاه جميع الملفات النصية في الدليل الحالي ، وتنفيذ:

$سحقfglobe_script.sh

لإيقاف تشغيل ملف globbing ، استخدم ملف -F اختيار:

$سحق -Ffglobe_script.sh

وبالمثل ، يمكنك استخدامه مع shebang ومع ملف يضع الأمر كذلك:

#! /bin/bash
رما - طرد - قذف 'عرض كافة الملفات النصية'.
ls *.رسالة قصيرة
يضع -F
رما - طرد - قذف 'عرض كافة الملفات النصية'
ls *.رسالة قصيرة
يضع+ و

الآن ، قم بتشغيل bash fglobe_script.sh:

الجزء المرفق مع مجموعة -f / مجموعة + f الخيارات لم تعالج الأوامر باستخدام أحرف البدل.

8. كيفية الجمع بين خيارات التصحيح لتصحيح أخطاء برنامج شل النصي:

نحن نستخدم خيارًا واحدًا فقط في تقنيات التصحيح المذكورة أعلاه ، ولكن يمكننا الجمع بين الخيارات المختلفة لفهم أفضل. دعونا ننفذ -x و -الخامس خيارات sum_script.sh النصي. أنا أستخدم ملف sum_script.sh النصي.

#! /bin/bash
رما - طرد - قذف 'أدخل الرقم الأول'
اقرأرقم 1
رما - طرد - قذف 'أدخل الرقم الثاني'
اقرأرقم 2
مجموع= دولار[number1 + number2]
رما - طرد - قذف 'المجموع هومبلغ دولار'

نفذ الآن:

$سحق -xvsum_script.sh

على حد سواء -x و -الخامس يتم دمج المخرجات ، كما هو معروض في صورة الإخراج. وبالمثل ، يمكننا أيضًا دمج -u الخيار مع مطول -v لاكتشاف الخطأ. أنا أستبدل ملف رقم 1 متغير مع على واحد في السطر السادس من البرنامج النصي:

#! /bin/bash
يكونnumber2 دولارومجموعيكونمبلغ دولار'' تصحيح
رما - طرد - قذف '
أدخل الرقم الأول'
قراءة number1
رما - طرد - قذف '
أدخل الرقم الثاني'
قراءة number2
المجموع = $ [num + number2]
رما - طرد - قذف '
المجموعيكونمبلغ دولار'

لعرض الإخراج ، قم بتشغيل الأمر المذكور أدناه:

$سحق -uvsum_script.sh

9. كيفية إعادة توجيه تقرير التصحيح إلى ملف:

يمكن أن يكون حفظ تقرير تصحيح البرنامج النصي bash في ملف مفيدًا في العديد من المواقف. إنه أمر صعب بعض الشيء بسبب إعادة توجيه تقرير التصحيح إلى ملف ؛ نستخدم بعض المتغيرات الخاصة. دعونا ننفذها b_script.sh الشفرة:

#! /bin/bash
إكسيك 5>dubug_report.log
BASH_XTRACED='5'
PS4='LINENO $ -'
رما - طرد - قذف 'أدخل الرقم 1'
اقرأرقم 1
رما - طرد - قذف 'أدخل الرقم 2'
اقرأرقم 2
لو [ 'رقم $' -Gt 'number2 دولار' ]
من ثم
رما - طرد - قذف 'Number1 أكبر من Number2'
أليف [ 'number1 دولار' -مكافئ 'number2 دولار' ]
من ثم
رما - طرد - قذف 'Number1 يساوي Number2'
آخر
رما - طرد - قذف 'Number2 أكبر من Number1'
يكون

في السطر الثاني من الكود ، يمكن ملاحظة أننا نعيد توجيه الإخراج إلى ملف debug_report.log باستخدام ملف إكسيك الأمر مع واصف الملف 5 (FD5).

exec 5> debug_report.log: ال إكسيك يقوم الأمر بإعادة توجيه كل ما يحدث في الصدفة إلى ملف debug_report.log.

BASH_XTRACEFD = 5: إنها متغير باش خاص ولا يمكن استخدامه في أي غلاف آخر. يجب تعيين واصف ملف صالح ، وسيقوم bash بكتابة الإخراج المستخرج إليه debug_report.log.

PS4 = 'LINENO– $ ‘: إنه أيضًا متغير bash يُستخدم لطباعة رقم السطر أثناء التصحيح باستخدام وضع xtrace. القيمة الافتراضية لـ PS4 هي + لافتة

يقوم البرنامج النصي أعلاه بإنشاء ملف سجل يسمى debug_report.log ، لقراءته ، استخدم قط أمر:

استنتاج:

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

تحتوي العديد من لغات وبيئات البرمجة على مصحح الأخطاء المصاحب لها. في البرمجة النصية bash ، يمكن تنفيذ تقنيات مختلفة لتصحيح البرنامج النصي. ركز هذا الدليل تمامًا على جميع الطرق التي يمكن استخدامها للعثور على الأخطاء في نصوص bash النصية. لذلك كلما شعرت أن نص bash الخاص بك لا يتصرف كما هو متوقع ، استخدم أيًا من الأساليب المذكورة أعلاه ، لكن وضع xtrace (-x) مفيد جدًا في معظم الحالات.