![]() |
اساسيات ال Shell Scripting سلام عليكم اليوم ان شاء الله ابدا معاك فى شرح بسيط عن البرمجه على السرفرات طبعا طريقه الشرح دي انا اللى مخترعها مقصدش حقوق الملكيه لكن اقصد ان لو فيها اخطاء معليش اعذروني انا أول مره اشرح حاجه بالشكل ده فى الاول لما بنيجي نعمل سكربت شيل لازم يكون الفكره واضحه فى دماغك وانت راسمها يدويا كدا وفاضل انك تكتب الكود ده يعتبر نص الشغل يعني لو قولنا ان اننا عايزين سكربت يغير بسوردات المواقع كلها مره وحده ويبعتهالك الخطوات بالبلدي كدا نعرف اليوزرات كلها نشوف هنعمل عليهم عمليه كل واحد ازاى هنغير البسورد نعرض البسورد اللى اتغير نبعتها على الميل مثلا بس علشان نعمل كدا لازم نفهم الشل سكربت ده بيشتغل ازاى هنتكلم عن شويه حاجات مهمه المتغيرات var loops مش عارف معانها بالعربي الصراحه الFunctions الدوال الخوارج والمداخل وشويه عك كدا المتغيرات الاول دلوقتي انت عايز تعمل عمليه على نتيجه امر معين يعني عايز تعمل عرض لأسماء اليوزرات الموجوده فى الموقع بطريقه الشيل سكربت هتقوله ان اليوزرات مثلا بتجبهم بالامر ده cat /etc/passwd | cut -d : -f1 فكره المتغير انه ياخد النتيجه دي يحزنها ولما تنادي عليه يعرضها انت ممكن تقول users=`cat /etc/passwd | cut -d : -f1` كدا لما تكتب echo $users هيقوم جاي عارض لك كل اليوزرات سيبك من شكل الأمر المطلوب دلوقتي فكره المتغير توصل لكم وهيا عموما زيها زي باقي لغات البرمجه بس لذيذه موت لما تحب تعمل متغير اما بيكون بقيمه انت بتحطها او بيكون نتيجه أمر حاجه ثابته تقوله مثلا backup=/home/backup/4me علشان لو عايز تستخدمه كتير بعد كدا ومش كل شويه تكتب المسار وعلشان متغلطش فيه كمان وعلشان يكون سهل التغير بعد كدا مش هتغير فى كل سطر موجود فيه الكلام ده وممكن يكون نتيجه أمر كأن يكون root@xen6 [~]# myos=` cat /etc/redhat-release` root@xen6 [~]# echo $myos CentOS release 5.2 (Final) root@xen6 [~]# احنا قولنا له ان المتغير اللى اسمه myos بيساوي ناتج الأمر بتاع cat /etc/redhat- لو في اي حاجه فى المتغير قولولي لان البرمجه دي بتقوم بشكل قاعده الهرم كدا لو مفهمتش الأساس مش هتعرف تكمل ودي من الأساسيات الLoops هو جوجل ترجمها بالعربي بالحلقات المهم انا هشرحها بص يا سيدي لو انت مثلا عندك وظيفه واحده او عدة وظائف عايز تنفذها على كذا عنصر مثلا عايز تحذف كل مجلد اسمه محمد من كل فلورد موجود جوه الهوم وعايز تنفذ القصه دي بالشيل اسكربت هتعمل ايه فيه طريقه بتعمل بيها العمليه على العنصر بشكل تسلسلي هنستخدم حاجه اسمها for القانون بتاعها بيتكتب كدا for var in command do commands to be done done لكل var القادم من ناتج command افعل كذا وكذا تم نقول بشكل عملي شويه for x in `cat /etc/passwd ` do; echo $x done بنقوله ان لكل قيمه تخرج من امر cat /etc/passwd والقيمه بتتحسب بالسطر اعمل echo $x يعني اعرضه وخلاص done المتغير اللى اسمه x ده المحتوي بتاعه هو القيمه الخارجه من الأمر هنعمل احنا عرض لكل سطر ممكن بئا تعمل اي حاجه فى النص مثلا باك اب لكل ملفات الhome تقوله for يعني لكل x اسم المتغير وممكن يكون اي عفريت تاني يعني x y z in يعني في ls /home/ محتوي ملفات الهوم do يعني افعل الآتي tar -czf $x.tar.gz $x يعني اعمل باك اب لكل مسار فى ملف بنفس الاسم على نفس المسار نكتبه بشكل ينفع للشيل هنقوله for x in `ls /home/` ;do tar -czp $x.tar.gz $x done وفي كذا loop بئا do while افعل كذا بينما القيمه الفلانيه بتساوي كذا دي هنشرحها ادام شويه الدوال functions الدوال دي عباره عن ايه شويه اوامر بتجمعهم مع بعض علشان الاختصار ولما تحب تنادي عليهم تكتب اسم الداله وخلاص بدل ما تكتب الأوامر كلها مره وحده وفيه حاجه مقدمه شويه انك تمرر فيها متغير يتنفذ عليه الأوامر اللى جوه بس دي هنشرحها ادام برضو طريقه كتابه القانون بتاعها كدا function zeko { ls /tmp ls /var/log mount df -h } الكلمه الاولانيه انت بتقول للنظام ان الكلام اللى جاي ده داله علشان ميفهمكش غلط ويبهدل الدنيا زيكو ده اسم الدالة ان شاء الله الأقواس دي طريقه الكتابه كدا تفتح القوس وتكتب اللى انت عايزه وبعدين تقفله بس أقواس من النوع ده الكلام اللى في النص دي الأوامر اللى هتتنفذ لما تستدعي الدالة دي وتستعديها ازاى تكتب اسمها وخلاص zeko لو كتبتها فى الشيل هتلاقيه نفذ الكلام اللى جوه اسم الداله انت حر تقدر تسميه ايه حاجه بس يكون حروف سمول فقط الكلام اللى جوه اكتب اى امر انت عايزه الدوال عموما حاجه زي المتغيرات بس بشكل متقدم شويه الدواخل والخوارج والعك بئا بص يا سيدي فى النظام فى تلت مخارج للأمر بتاعك لما بتنفذه او تلت أنفاق لما بتكتب مثلا ls /root /rooty اللى انا عملت اني استخدمت الامر ده علشان يعرض ليا الملفين دول الاول موجود والتاني مش موجود الامر ده بيروح للكرينال وهيا اللى بترد وبترد بئا الكرينال دي على تلت أنفاق حاجه اسمها stdin stdout stderr الأول ده بيطلع فيه النواتج الصحيحه التاني ده بيكون فيه المداخل وهنشرحها فى باقي الدرس ان شاء الله التالت ده المخرج بتاع الخطا ولما تحب تحول الناتج بدل ما يطلعلك على الشاشه تقوله < دي معناها حول اللى طالع فى المكان الفلاني ls /root /rooty > tmp/myls هتلاقي فى الملف ده ناتج الأمر الاول بس لكن الأمر التاني هو طلع من نفق الغلط وده بيكون فى 2> بكدا بنكون وصلنا لنهايه حلقتنا انهاردا وان شاء الله نكمل باقي الدرس هنشرح فيه 2> /dev/null positional parameter وهنعمل سكربت يعمل اى فكره بسيطه حد يقترحها علينا اسف على طريقتي العاميه فى الكتابة سلام عليكم |
الساعة الآن 07:26 PM |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.5.2 TranZ By
Almuhajir