دليل المبتدئين للكتابة النصية للقذيفة: الأساسيات

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

ما هي البرمجة النصية شل؟

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

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

تسمح لنا برامج Shell النصية ببرمجة الأوامر في سلاسل وجعل النظام ينفذها كحدث مكتوب ، تمامًا مثل الملفات الدفعية. كما أنها تسمح بوظائف أكثر فائدة ، مثل استبدال الأوامر. يمكنك استدعاء أمر ، مثل التاريخ ، واستخدامه كجزء من نظام تسمية الملفات. يمكنك أتمتة النسخ الاحتياطية ويمكن أن يكون لكل ملف منسوخ التاريخ الحالي إلحاقه بنهاية اسمه. النصوص ليست مجرد استدعاءات للأوامر أيضًا. إنها برامج في حد ذاتها. تتيح لك البرمجة النصية استخدام وظائف البرمجة - مثل حلقات "for" وعبارات if / then / else وما إلى ذلك - مباشرةً داخل واجهة نظام التشغيل لديك. ولا يتعين عليك تعلم لغة أخرى لأنك تستخدم ما تعرفه بالفعل: سطر الأوامر.

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

قبل ان تبدأ

قبل أن نبدأ سلسلة البرمجة النصية الخاصة بنا ، دعنا نغطي بعض المعلومات الأساسية. سنستخدم bash shell ، الذي تستخدمه معظم توزيعات Linux في الأصل. Bash متاح لمستخدمي Mac OS و Cygwin على Windows أيضًا. نظرًا لأنه عالمي جدًا ، يجب أن تكون قادرًا على البرمجة النصية بغض النظر عن النظام الأساسي الخاص بك. بالإضافة إلى ذلك ، طالما أن جميع الأوامر المشار إليها موجودة ، يمكن أن تعمل البرامج النصية على أنظمة أساسية متعددة مع القليل من التغيير والتبديل المطلوب.

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

في جوهرها ، البرامج النصية هي مجرد ملفات نصية عادية. يمكنك استخدام أي محرر نصوص لكتابتها: gedit ، emacs ، vim ، nano ... هذه القائمة تطول. فقط تأكد من حفظه كنص عادي ، وليس كنص منسق ، أو مستند Word. نظرًا لأنني أحب سهولة الاستخدام التي يوفرها nano ، سأستخدم ذلك.

أذونات البرنامج النصي والأسماء

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

chmod + x ~ / somecrazyfolder / script

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

chmod u + x ~ / somecrazyfolder / script

من أجل تشغيل هذا البرنامج النصي ، يجب أن تقوم بالقرص المضغوط في الدليل المناسب ثم تشغيل البرنامج النصي مثل هذا:

cd ~ / somecrazyfolder

./script1

لجعل الأمور أكثر ملاءمة ، يمكنك وضع البرامج النصية في مجلد "bin" في دليلك الرئيسي:

~ / بن

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

قبل تسمية برنامج نصي ، يجب عليك الأمر التالي للتحقق مما إذا كان لديك برنامج مثبت يستخدم هذا الاسم:

أي [الأمر]

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

إرشادات البرمجة النصية

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

  1. يجب أن يكون كل نص برمجي مع "#! / bin / bash"
  2. كل سطر جديد هو أمر جديد
  3. تبدأ أسطر التعليق بعلامة #
  4. الأوامر محاطة بـ ()

هاش هاش بانغ

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

#! / بن / باش

إذا كنت تستخدم قذيفة أخرى ، فاستبدل مسارها هنا. تبدأ سطور التعليق بعلامات التجزئة (#) ، لكن إضافة الانفجار (!) ومسار الصدفة بعد ذلك يعد نوعًا من الاختراق الذي سيتجاوز قاعدة التعليق هذه وسيجبر البرنامج النصي على التنفيذ بالصدفة التي يشير إليها هذا السطر.

سطر جديد = أمر جديد

يجب اعتبار كل سطر جديد أمرًا جديدًا ، أو مكونًا لنظام أكبر. عبارات if / then / else ، على سبيل المثال ، ستتولى سطورًا متعددة ، لكن كل مكون من مكونات هذا النظام في سطر جديد. لا تدع الأمر ينزف إلى السطر التالي ، لأن هذا يمكن أن يقطع الأمر السابق ويعطيك خطأ في السطر التالي. إذا كان محرر النصوص لديك يقوم بذلك ، فيجب عليك إيقاف تشغيل التفاف النص لتكون في الجانب الآمن. يمكنك إيقاف تشغيل التفاف النص في نانو بت بالضغط على ALT + L.

التعليق في كثير من الأحيان مع #s

إذا بدأت سطرًا بعلامة # ، فسيتم تجاهل السطر. هذا يحوله إلى سطر تعليق ، حيث يمكنك تذكير نفسك بما كان ناتج الأمر السابق ، أو ما سيفعله الأمر التالي. مرة أخرى ، قم بإيقاف تشغيل التفاف النص ، أو قسم التعليق إلى عدة أسطر تبدأ جميعها بتجزئة. يعد استخدام الكثير من التعليقات ممارسة جيدة يجب الاحتفاظ بها ، حيث تتيح لك وللآخرين تعديل البرامج النصية الخاصة بك بسهولة أكبر. الاستثناء الوحيد هو اختراق Hash-Bang المذكور أعلاه ، لذا لا تتبع #s بـ! s. ؛-)

الأوامر محاطة بأقواس

في الأيام القديمة ، كانت استبدالات الأوامر تُجرى بعلامات تجزئة مفردة (`، تشارك المفتاح ~). لن نتطرق إلى هذا الأمر بعد ، ولكن نظرًا لأن معظم الناس ينطلقون ويستكشفون بعد تعلم الأساسيات ، فمن المحتمل أن نذكر أنه يجب عليك استخدام الأقواس بدلاً من ذلك. هذا بشكل أساسي لأنه عندما تقوم بالتداخل - وضع الأوامر داخل أوامر أخرى - تعمل الأقواس بشكل أفضل.

السيناريو الأول الخاص بك

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

يمكنك أن ترى أنه لا يوجد إخراج لأي أمر ، لذلك نحن جميعًا على استعداد لاستخدام هذا الاسم.

لنقم بإنشاء ملف فارغ في المجلد ~ / bin:

المس ~ / bin / datecp

ودعنا نغير الإذن الآن قبل أن ننسى:

لنبدأ في بناء السيناريو الخاص بنا بعد ذلك. افتح هذا الملف في محرر النصوص الذي تختاره. كما قلت ، أحب بساطة النانو.

نانو ~ / بن / datecp

ودعنا نمضي قدمًا ونضع السطر الأول المطلوب مسبقًا ، وتعليقًا حول ما يفعله هذا النص.

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

ما الذي سنضعه في المتغير؟ حسنًا ، دعنا نخزن التاريخ والوقت! للقيام بذلك ، سوف نستدعي أمر التاريخ.

ألق نظرة على لقطة الشاشة أدناه لمعرفة كيفية إنشاء إخراج أمر التاريخ:

يمكنك أن ترى أنه بإضافة متغيرات مختلفة تبدأ بـ٪ ، يمكنك تغيير إخراج الأمر إلى ما تريد. لمزيد من المعلومات ، يمكنك إلقاء نظرة على صفحة الدليل لأمر التاريخ.

دعنا نستخدم هذا التكرار الأخير لأمر التاريخ ، "التاريخ +٪ m_٪ d_٪ y-٪ H.٪ M.٪ S" ، ونستخدم ذلك في البرنامج النصي الخاص بنا.

إذا كان علينا حفظ هذا البرنامج النصي في الوقت الحالي ، فيمكننا تشغيله وسيمنحنا إخراج أمر التاريخ كما كنا نتوقع:

لكن ، لنفعل شيئًا مختلفًا. دعنا نعطي اسم متغير ، مثل date_formatted لهذا الأمر. الصيغة الصحيحة لهذا هي كما يلي:

متغير = $ (وسيطات الأوامر - الخيارات)

وبالنسبة لنا ، سنبنيها على النحو التالي:

date_formatted = $ (تاريخ +٪ m_٪ d_٪ y-٪ H.٪ M.٪ S)

هذا ما نسميه استبدال الأوامر. نحن نخبر bash بشكل أساسي أنه كلما ظهر المتغير "date_formatted" ، لتشغيل الأمر داخل الأقواس. بعد ذلك ، يجب عرض أي مخرجات تعطيها الأوامر بدلاً من اسم المتغير "date_formatted".

إليك مثال على البرنامج النصي ومخرجاته:

لاحظ أن هناك مسافتين في الإخراج. يتم عرض كل من المسافة بين علامات اقتباس أمر echo والمسافة الموجودة أمام المتغير. لا تستخدم مسافات إذا كنت لا تريدها أن تظهر. لاحظ أيضًا أنه بدون سطر "echo" الإضافي هذا ، لن يعطي البرنامج النصي أي إخراج على الإطلاق.

دعنا نعود إلى السيناريو الخاص بنا. دعنا نضيف بعد ذلك جزء النسخ من الأمر.

cp –iv $ 1 $ 2. $ date_formatted

سيؤدي هذا إلى استدعاء أمر copy ، مع خيارات –i و –v. سيطلب منك الأول التحقق قبل الكتابة فوق الملف ، وسيعرض الأخير ما هو معطّل في سطر الأوامر.

بعد ذلك ، يمكنك رؤية أنني أضفت الخيار "$ 1". عند البرمجة النصية ، ستشير علامة الدولار ($) متبوعة برقم إلى تلك الوسيطة المرقمة للنص البرمجي عند استدعائه. على سبيل المثال ، في الأمر التالي:

نغمة رنين cp –iv. mp3

الوسيطة الأولى هي “Trogdor2.mp3” والوسيطة الثانية هي “ringtone.mp3”.

بالنظر إلى السيناريو الخاص بنا ، يمكننا أن نرى أننا نشير إلى وسيطين:

هذا يعني أنه عند تشغيل البرنامج النصي ، سنحتاج إلى توفير وسيطين لتشغيل البرنامج النصي بشكل صحيح. المتغير الأول ، $ 1 ، هو الملف الذي سيتم نسخه ، ويتم استبداله بالمعامل الأول للأمر "cp iv".

الوسيطة الثانية ، $ 2 ، ستعمل كملف إخراج لنفس الأمر. لكن يمكنك أيضًا أن ترى أن الأمر مختلف. لقد أضفنا فترة وقمنا بالإشارة إلى المتغير "date_formatted" من الأعلى. فضولي لما يفعل هذا؟

إليك ما يحدث عند تشغيل البرنامج النصي:

يمكنك أن ترى أن ملف الإخراج مدرج على أنه كل ما أدخلته مقابل 2 دولار ، متبوعًا بنقطة ، ثم ناتج أمر التاريخ! من المنطقي ، أليس كذلك؟

الآن عندما أقوم بتشغيل الأمر datecp ، سيتم تشغيل هذا البرنامج النصي ويسمح لي بنسخ أي ملف إلى موقع جديد وإضافة التاريخ والوقت تلقائيًا إلى نهاية اسم الملف. مفيد لأرشفة الأشياء!

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

هل تقوم بالكتابة؟ هل لديك أي نصيحة للمبتدئين؟ مشاركة أفكارك في التعليقات! هناك المزيد في هذه السلسلة!