![استخدم shellcheck للبحث عن أخطاء البرنامج النصي وإصلاحها - CloudSavvy | اخبار مصر مباشر استخدم shellcheck للبحث عن أخطاء البرنامج النصي وإصلاحها - CloudSavvy IT](https://egyptlivenews.com/wp-content/uploads/2021/03/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-shellcheck-%D9%84%D9%84%D8%A8%D8%AD%D8%AB-%D8%B9%D9%86-%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D8%AC-%D8%A7%D9%84%D9%86%D8%B5%D9%8A-%D9%88%D8%A5%D8%B5%D9%84%D8%A7%D8%AD%D9%87%D8%A7-CloudSavvy.png)
يعد Shellcheck أداة ممتازة لتحليل البرامج النصية لنظام Linux Shell ، والتي يمكن استخدامها لاكتشاف أخطاء البرمجة الشائعة. يحلل Shellcheck البرنامج النصي ويبلغ عن الأخطاء والتحذيرات ، على غرار ما سيفعله المترجم.
ما هو فحص شل؟
إذا كنت مطور Linux Bash لبعض الوقت ، فربما تكون قد وجدت الكثير من الأخطاء في البرامج النصية الخاصة بك أو البرامج النصية الأخرى. عندما يطور البشر رمزًا ، يجب عليهم إدخال أخطاء في الكود. حتى أفضل المطورين قد يفوتهم أحيانًا تعقيدات أو تحذيرات غير متوقعة في التعليمات البرمجية الخاصة بهم.
في Bash ، لا يوجد مترجم حقيقي ، على سبيل المثال في C ++. ومع ذلك ، هناك مجموعة من الأدوات التي يمكن أن تساعد كثيرًا عند تطوير البرامج النصية Bash. بمجرد أن تصبح هذه الأداة هي shellcheck. ستعمل هذه الأداة الرائعة على تحليل ملف البرنامج النصي Bash وتقديم توصيات بناءً على المحتوى الموجود أثناء التحليل. إنه يشبه إلى حد ما مترجم Bash.
تختلف الأدوات مثل shellcheck عن أدوات وقت التشغيل الأخرى قيد التشغيل ، على سبيل المثال ، استخدام bash -x
اعرض كل أمر يتم تنفيذه في البرنامج النصي في الوقت الفعلي. والسبب هو أن shellcheck سيحلل البرنامج النصي (الملف) دون تنفيذه فعليًا ، وهو ما يشبه ما سيفعله المترجم.
للمزيد من المعلومات bash -x
، قد ترغب في قراءة أساسيات Bash Automation and Scripting (الجزء 3) ، والتي تعد جزءًا من سلسلة مكونة من 3 أجزاء حول أساسيات البرمجة النصية وأتمتة Bash.
التثبيت فحص شل
تثبيت فحص شل في توزيعات Linux التي تستند إلى Debian / Apt (مثل Ubuntu و Mint) ، نفِّذ الأوامر التالية على الجهاز:
sudo apt set up shellcheck
تثبيت فحص شل في توزيعات Linux التي تستند إلى RedHat / Yum (مثل RHEL و Centos و Fedora) ، قم بتنفيذ الأوامر التالية في الجهاز:
sudo yum set up shellcheck
يركض فحص شل
بعد تثبيت shellcheck ، يمكننا استخدام البرنامج النصي المعطل للاختبار البسيط.أولاً ، نحدد البرنامج النصي examination.sh
كما يلي:
#! / bin / clean echo "إذا لم يكن Bash أو Clean echo ، فسيكون هناك المزيد من الأخطاء بالنسبة لي" [ -d ./directory }; than echo 'sure! < start fif
How many bugs can you find? (Tip: there are 8!).
Let’s next see what shellcheck makes of this code:
shellcheck test.sh
Immediately on the first line it finds an issue with the shebang specification. If you haven’t heard of shebang yet, please checkout our Bash Automation and Scripting Basics Part 1 article. Our pun shebang line #!/bin/wash
should be #!/bin/bash
. Let’s fix this. Issue 1/8 fixed!
We will also at the same time fix the other two issues immediately recognized by shellcheck: Did you forget to close this single quoted string? for the second line: spot on! Issue 2/8 fixed. For the third issue there is a little confusion as to our/the developers intent for shellcheck, and this is to be expected, as the '
on line 2 opens a string which is only terminated on line 5 when another '
is seen!
As this third issue is thus a result of the second issue, this run will allow us to fix two issues for the time being. Our script now looks like this:
#!/bin/bash echo 'Bash is not wash' echo More errors for me" if [ -d ./directory }; than echo 'sure! < start fif
Let’s run shellcheck on this again after making the corrections and see what the output is.
In this instance, shellcheck sees that a "
is opened on line 3 (even though it is at the end of the line, it is actually an opening double quote as such), and that even at script end (note the line 8 indication, which does not exist in our 6-line script with a single empty line after the last line. Let’s clean up this empty line, and fix the double quoting issue at the start of line 3, which can now be readily understood. Issue 3/8 fixed!
Our script now looks like this:
#!/bin/bash echo 'Bash is not wash' echo "More errors for me" if [ -d ./directory }; than echo 'sure! < start fif
Re-running shellcheck (note how similar again these steps are to using a compiler in other coding languages):
Could not be clearer; The mentioned syntax error was in this if expression and Expected test to end here. We shall do as suggested and change the }
to ]
لجعل الخط يقرأ if [ -d ./directory ] than
. تم إصلاح المشكلة 4/8! قمنا بتشغيل shellcheck مرة أخرى ونرى الآن ما يلي:
مشكلة اقتباس واحدة أخرى. نحن نعلم بالفعل كيفية حل هذه المشاكل.دعونا نتغير echo 'sure! < start
إلى echo 'sure!' < start
(تم إصلاح المشكلة 5/8!) ، ثم قم بتشغيل shellcheck مرة أخرى:
أول شيء مثير للاهتمام هو أننا نرى أن shellcheck لا يمكنه تحليل السطر.على الرغم من أن هذا يبدو وكأنه عيب في shellcheck ، إلا أننا سنجد المزيد من القراءة then
لقد ذهب. آها!نضع than
بدلا من then
. يا له من خطأ مهمل - سهل الإصلاح (تم إصلاح المشكلة 6/8!). يبدو البرنامج النصي الخاص بنا الآن كما يلي:
#!/bin/bash echo 'Bash is not wash' echo "More errors for me" if [ -d ./directory ] then echo 'sure!' < start
 fif
يوفر لنا تشغيل آخر لـ shellcheck معلومة أخرى مفيدة:
نحن مفقودون fi
! اها نعم fif
مستحيل.نحن نتغير fif
إلى fi
إصلاح في السطر الأخير من البرنامج النصي (الإصدار 7/8) وتشغيل shellcheck مرة أخرى!
مشكلة إعادة التوجيه.بصراحة لم أتوقع shellcheck
طرح هذا الخطأ أيضًا ، لأن <
يمكن استخدامه أيضًا في Bash ، لكنه كذلك.في الواقع ، تم تصميم إعادة التوجيه لدينا ل >
بدلا من <
. الإصدار 8/8-تم إصلاح جميع المشكلات!هذا يقودنا إلى السيناريو النهائي
#!/bin/bash echo 'Bash is not wash' echo "More errors for me" if [ -d ./directory ] then echo 'sure!'> get started fi
دعونا نرى كيف يراه shellcheck الآن.
في احسن الاحوال! منذ التنفيذ الأول ، يعمل البرنامج النصي بشكل مثالي.
إذا نظرت إلى مخرجات أوامر shellcheck المختلفة ، ستلاحظ أيضًا ميزة أخرى ملائمة جدًا لـ shellcheck ، خاصة للمبتدئين: يتم عرض مجموعة من الارتباطات التشعبية (روابط مواقع الويب) ، ويمكنك النقر فوق هذه الارتباطات التشعبية في النافذة الطرفية ، أو حدد (إذا لزم الأمر)> انقر بزر الماوس الأيمن للنسخ واللصق في المتصفح. سيؤدي النقر فوق هذه الروابط إلى نقلك إلى مشروع shellcheck GitHub.
في عجلة من امرنا؟
إذا كنت تريد فقط التحقق بسرعة من الخيارات الأكثر أهمية ، فقد ترغب في التحقق --severity=SEVERITY
الخيار ، حيث ستحل محل SEVERITY
مع واحد من error, warning, info, style
.
لذلك أنت تبحث فقط عن الأخطاء والتحذيرات ، يمكنك استخدامها --severity=warning
(بما في ذلك المستويات الأعلى ، في هذه الحالة ، mistake
) كخيار shellcheck
.
يتم إحتوائه
إذا لم تكن هناك مشكلة في المنطق في البرنامج النصي ، فيرجى تشغيل shellcheck
قبل تنفيذ البرنامج النصي وإصلاح جميع المشكلات المرئية ، سيضمن تشغيله بشكل مثالي عند التشغيل الأول. يمكنك حتى استخدام shellcheck للتعامل مع تحديات الترميز في مقابلة Bash coding المباشرة التالية!في هذه المقالة ، استكشفنا العديد من المشكلات التي قد تظهر في البرنامج النصي وكيفية حلها shellcheck
تعامل معهم.
استمتع بالبرامج النصية الخالية من الأخطاء!