خلال الفترة الماضية، بدأت أتعلم بعض الأمور حول Shell وأردت أن أشارككم هذه المعلومات.
ليس الكثير من المعلومات لكن القليل عن تاريخ الموضوع وإنشاء الملف وأمور عن الطباعة.
ببساطة، الـ Shell هو برنامج يمكننا من التواصل مع نظام التشغيل عبر كتابة الأوامر. هذا التفاعل يساعدنا على أداء العديد من المهام مثل إدارة الملفات، تثبيت البرامج، وإدارة النظام بشكل عام.
1- Unix
قبل ظهور لينكس، كانت أنظمة التشغيل Unix تستخدم عدة أنواع من الشيل، مثل Bourne Shell (sh) و C Shell (csh) و Korn Shell (ksh). هذه الشيل كانت توفر واجهة سطر الأوامر للتفاعل مع النظام
2- Thompson shell
كانت واجهة تومسون هي واجهة يونكس الأولى، والتي تم تقديمها في الإصدار الأول من يونكس في عام 1971، وقد كتبها كين تومسون.كانت عبارة عن مفسر أوامر بسيط، غير مصمم للبرمجة النصية، ولكنها مع ذلك قدمت العديد من الميزات المبتكرة لواجهة سطر الأوامر وأدت إلى تطوير واجهات يونكس اللاحقة
3- (sh) c shell
أنشأه بيل جوي عندما كان طالب دراسات عليا في جامعة كاليفورنيا، بيركلي في أواخر السبعينيات
تم توزيعه على نطاق واسع لأول مرة في عام 1978
4- Bourne Shell
تم تطويره بواسطة ستيفن بورن في مختبرات بيل، وكان بديلاً لواجهة تومسون(Thompson shell)، التي كان ملفها القابل للتنفيذ يحمل نفس الاسم -sh. تم إصداره في عام 1979 في إصدار يونكس 7 الموزع على الكليات والجامعات. على الرغم من أنه يستخدم كمترجم أوامر تفاعلي، إلا أنه كان مخصصًا أيضًا كلغة برمجة نصية ويحتوي على معظم الميزات التي تعتبر عادةً لإنتاج برامج منظمة.
5- Korn Shell (ksh)
هي واجهة برمجة تطبيقات يونكس تم تطويرها بواسطة ديفيد كورن في مختبرات بيل في أوائل الثمانينيات وتم الإعلان عنها في مؤتمر USENIX في 14 يوليو 1983
6- bash
اختصار لـBourne-Again SHell
هو برنامج شل ولغة أوامر مدعومة من قبل مؤسسة البرمجيات الحرة وتم تطويره لأول مرة لمشروع جنو بواسطة بريان فوكس. تم تصميمه كبديل برمجي مجاني بنسبة 100% لـ Bourne shell، وتم إصداره في البداية عام 1989
عند تطوير لينكس في أوائل التسعينيات، تم اختيار (bash) كالشيل الافتراضي. Bash هو تحسين لـ Bourne Shell ويشمل ميزات من C Shell وKorn Shell، مما يجعله أكثر قوة ومرونة.
سطر الأوامر:
وسيلة للتفاعل مع برنامج كمبيوتر عن طريق إدخال أسطر نصية تسمى أسطر الأوامر
في سطر الأوامر في لينكس، ستلاحظ وجود السطر الذي يكون على الشكل username@hostname$، وهو يتكون من ثلاثة أجزاء رئيسية:
1- username: يمثل اسم المستخدم الحالي الذي قام بتسجيل الدخول إلى النظام. 2- hostname: يمثل اسم الجهاز أو النظام الذي يعمل عليه المستخدم. 3- $: هذا الرمز يشير إلى أن المستخدم الحالي هو مستخدم عادي. إذا كان المستخدم هو الجذر (root)، فإن الرمز يكون # بدلاً من$
ملاحظة: تجنب استخدام سطر الأوامر بشكل مباشر على الجذر (root)، لأن الأخطاء في الكتابة قد تسبب مشاكل يصعب حلها.
من الصحيح استخدام اسم المستخدم العادي $، ويمكنك استخدام الأمر sudo لإعطاء صلاحيات الجذر عند التعامل مع أوامر تحتاج إلى صلاحيات الجذر (root).
البداية:
1- إنشاء ملف جديد
في البداية لكتابات شل تحتاج إلى إنشاء ملف امتداده sh
من سطر الأومر , استخدم الأمر touch لإنشاء ملف جديد. على سبيل المثال، لإنشاء ملف باسم myscript.sh، اكتب:
Bash:
touch myscript.sh
هاد الأمر رح ينشىء ملف جديد بمتداد sh
2- تحرير الملف
افتح الملف باستخدام محرر النصوص المفضل لديك. يمكنك استخدام nano أو vim أو أي محرر آخر. على سبيل المثال، لفتح الملف باستخدام nano :
Bash:
nano myscript.sh
3- حفظ الملف والخروج
اضغط على Ctrl + O لحفظ الملف، ثم Ctrl + X للخروج.
كتابة السكربت:
ابدأ بكتابة السكربت, في العادة يبدأ برنامج shell في النص التالي:
Bash:
bin/bash/!#
السطر bin/bash/!# يُعرف بـ “shebang” أو “hashbang”. وهو يُستخدم في بداية سكربتات الشل لتحديد المفسر الذي يجب استخدامه لتشغيل السكربت.
!#: هذا الجزء يُعرف بـ “shebang”. وهو يُخبر النظام بأن الملف هو سكربت ويجب تشغيله باستخدام المفسر المحدد بعده.
bin/bash/: هذا هو المسار إلى مفسر الشل (Bash) الذي سيقوم بتشغيل السكربت. في هذه الحالة، يشير إلى Bash الموجود في دليل /bin
هذا الأمر يعرض المسار الكامل للشل الحالي المستخدم:
في توزيعات Garuda مستخدم fish و هو بتل bash بس أحدث
سهولة الاستخدام و الإكمال التلقائي الذكي , عندما تقوم بتشغيل السكربت، يقوم النظام بقراءة السطر الأول ويستخدم المفسر المحدد لتشغيل الأوامر الموجودة في السكربت. إذا لم تقم بتضمين هذا السطر، فقد لا يعرف النظام أي مفسر يستخدم، مما قد يؤدي إلى أخطاء
ممكن عدم استخدم هذا السطر بس عند استخدام السكربت لازم أعرف المترجم في هذا الشكل.
echo
أسهل طريقة للطباعة هي باستخدم الأمر echo وبضيف سطر جديد بنهاية كل سطر.
تاريخ الأمرecho:
الأمر echo هو أحد الأوامر الأساسية والمستخدمة بشكل متكرر في أنظمة التشغيل المستندة إلى يونكس ولينكس. تم تقديمه لأول مرة كجزء من نظام التشغيل يونكس الأصلي في السبعينيات. تم تضمينه في معظم الشلات الشائعة مثل Bashو Zshو Ksh.
الأساس والاستخدام الأول:
الأمر echo هو أمر مدمج في الشلات، ويستخدم لطباعة النصوص أو القيم المتغيرة إلى المخرجات القياسية (الشاشة). تم استخدامه لأول مرة في شل يونكس الأصلي، وكان الهدف منه تسهيل عرض الرسائل والنصوص في السكربتات والأوامر التفاعلية.
الاستخدامات شائعة للأمر echo
طباعة النصوص:
Bash:
"!echo "Hello,world
الأمر يطبع النص “Hello, World!” على الشاشة.
استخدام الخيارات:
-n: يمنع إضافة سطر جديد بعد النص.
-e: يمكن من تفسير الأحرف الخاصة مثل \n (سطر جديد) و\t (مسافة أفقية).
Bash:
"!echo -e "Hello,\nWorld"
طباعة القيم المتغيرة:
يمكن استخدام الأمر echo لطباعة قيم المتغيرات, راح نفهم بعدين شو يعني القيم المتغيرة
Bash:
NAME="Alice"
"!echo "Hello, $NAME
إعادة توجيه المخرجات إلى ملف:
يمكن إعادة توجيه مخرجات الأمر echo إلى ملف باستخدام < أو<<.
عند استخدام < يتم حذف محتوى الملف وكتابة المخرجات الجديدة. وعند استخدام << يتم الكتابة فوق المخرجات السابقة، أي لن يتم مسح أي معلومات من الملف.
Bash:
echo "This is a test." > test.txt
الخلاصة: الأمر echo هو أداة قوية وبسيطة في نفس الوقت
تُستخدم بشكل واسع في سكربتات الشل والأوامر التفاعلية لطباعة النصوص والقيم المتغيرة وتنسيق المخرجات.
printf
بدأ استخدام printf في سكربتات الشل مع Bourne Shell (sh)، الذي كان الشل الافتراضي في يونكس
الأمر printf مُستوحى من دالة printf في لغة البرمجة C، والتي تم تطويرها في أوائل السبعينيات. يتيح printf التحكم الكامل في كيفية عرض النصوص والأرقام
بناء جملة printf
كود:
printf [-v var] [format specifiers] [arguments]
[-v var]
خيار -v في الأمر printf في بيئة bash يُستخدم لتخزين الناتج في متغير بدلاً من طباعته مباشرةً على الشاشة. هذا الخيار مفيد جدًا عندما ترغب في إعادة استخدام النص المُنسَّق في أماكن مختلفة من الكود دون الحاجة إلى إعادة التنسيق في كل مرة.
مثال على استخدام:
لنفترض أنك تريد طباعة رسالة ترحيبية للمستخدم تحتوي على اسمه في عدة أماكن في السكريبت الخاص بك. يمكن أن يكون الكود كما يلي:
printf -v welcome_message "Welcome, %s! We're glad to have you." "$username"
-v welcome_message: هذا الخيار يقوم بتخزين الناتج في المتغير welcome_message بدلاً من طباعته على الشاشة.
"Welcome, %s! We're glad to have you.": هذه هي رسالة التنسيق. %s هو عنصر تنسيق سيتم استبداله باسم المستخدم.
"$username": هذا هو الاسم الذي سيتم إدراجه في مكان %s في النص.
استخدام المتغير في أماكن متعددة
كود:
echo "$welcome_message"
echo "The same message will be printed here: $welcome_message"
echo "You can reuse it as many times as you want: $welcome_message"
هنا، نستخدم المتغير welcome_message لعرض الرسالة في أماكن متعددة في السكريبت
الفائدة من استخدام:
يمكنك تنسيق النص مرة واحدة فقط واستخدامه في أماكن متعددة. هذا يقلل من الحاجة إلى تكرار التعليمات البرمجية.
يساعد في الحفاظ على الاتساق في التنسيق، حيث يتم توليد الرسالة نفسها في كل مرة يتم استخدام المتغير.
يجعل الكود أكثر نظافة وأسهل في القراءة والصيانة.
[format specifiers]
محددات التنسيق الأكثر استخدامًا
المحددات
نوع الإخراج
%d أو %i
عدد صحيح عشري أو عدد صحيح بإشارة
%c
حرف بإشارة
%f
عدد عشري بإشارة
%e
عدد عشري في الشكل الأسي
%s
سلسلة نصية أو مجموعة من الحروف
%lf
عدد عشري من النوع double
%Lf
عدد عشري طويل من النوع long double
%o
عدد صحيح بالنظام الثماني
%u
عدد صحيح غير موقع قصير
%ld
عدد عشري طويل
%x
عدد صحيح بالنظام الست عشري
%p
طباعة عنوان الذاكرة بصيغة الست عشري
%d أو %i
كود:
printf "القيمة العددية: %d\n" 123
يطبع هذا المحدد العدد الصحيح number بقيمته العشرية، وهي 10.
%c
كود:
printf "الحرف: %c\n" A
يطبع الحرف A.
%f
كود:
printf "القيمة العشرية: %f\n" 12.34
يتم استبدال %f بالقيمة 12.34 وطباعة "القيمة العشرية: 12.340000". يتم عرض 6 منازل عشرية افتراضيًا
%eC
كود:
printf "القيمة الأسية: %e\n" 12345.6789
يتم استبدال %e بالقيمة 12345.6789 وطباعة "القيمة الأسية: 1.234568e+04".
يتم استبدال %ld بالقيمة 1234567890 وطباعة "القيمة العشرية الطويلة: 1234567890".
%x
كود:
printf "القيمة الست عشرية: %x\n" 255
يتم استبدال %x بالقيمة 255 وطباعة "القيمة الست عشرية: ff". (255 في النظام العشري = ff في النظام الست عشري).
%p
كود:
printf "عنوان الذاكرة: %p\n" $BASH
يتم استبدال %p بعنوان الذاكرة المرتبط بالمتغير $BASH وطباعة عنوان الذاكرة بصيغة الست عشري.
printf على عكس echo، فإن استخدام printf لطباعة سلسلة أو متغير بدون أي محددات تنسيق يؤدي إلى إخراج النص غير المنسق في سطر واحد. لإضافة سطر جديد وفصل الإدخالات، حدد محدد التنسيق n\
السلام عليكم ورحمة الله وبركاته، عزيزي الزائر هناك الكثير من خدمات المنتدى مغلقة على الزوّار وذلك تجنباً للمشاكل التقنية مع محركات البحث. يرجى التسجيل في المنتدى كي تحصل على صلاحية الدخول لباقي الاقسام والمستودع.