الصفحة الرئيسية » howto » دليل المبتدئين إلى Shell Scripting The Basics

    دليل المبتدئين إلى Shell Scripting The Basics

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

    ما هو شل البرمجة?

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

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

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

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

    قبل ان تبدأ

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

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

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

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

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

    chmod + x ~ / somecrazyfolder / script1

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

    chmod u + x ~ / somecrazyfolder / script1

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

    CD ~ / somecrazyfolder

    ./ script1

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

    ~ / بن

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

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

    أي [أمر]

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

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

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

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

    هش بانج هاك

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

    #! / بن / سحق

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

    الخط الجديد = قيادة جديدة

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

    تعليق غالبًا مع #s

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

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

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

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

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

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

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

    المس ~ / بن / datecp

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

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

    نانو ~ / بن / datecp

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

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

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

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

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

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

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

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

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

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

    date_formatted = $ (date +٪ m_٪ d_٪ y-٪ H.٪ M.٪ S)

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

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

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

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

    cp -iv $ 1 $ 2. $ date_formatted

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

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

    cp -iv Trogdor2.mp3 ringtone.mp3

    الحجة الأولى هي "Trogdor2.mp3" والوسيطة الثانية هي "ringtone.mp3".

    عند الرجوع إلى نصوصنا ، يمكننا أن نرى أننا نرجع إلى حجتين:

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

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

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

    يمكنك أن ترى أن ملف المخرجات قد تم إدراجه على أنه كل ما أدخله مقابل $ 2 ، متبوعًا بنقطة ، ثم إخراج الأمر date! من المنطقي ، صحيح?

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


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

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