نص شل

تعديل سكربت شل في نظام FreeBSD لتكوين جدار الحماية IP

سكربت الصدفة هو برنامج حاسوبي مصمم ليتم تشغيله بواسطة صدفة يونكس ، وهي مترجم أوامر سطر الأوامر . [ 1 ] تُعتبر لهجات سكربتات الصدفة المختلفة لغات أوامر . تشمل العمليات النموذجية التي تُنفذها سكربتات الصدفة معالجة الملفات، وتنفيذ البرامج، وطباعة النصوص. يُطلق على السكربت الذي يُهيئ البيئة، ويُشغل البرنامج، ويُجري أي عمليات تنظيف أو تسجيل ضرورية، اسم " الغلاف" .

يُستخدم المصطلح أيضًا بشكلٍ أعم للدلالة على الوضع الآلي لتشغيل واجهة سطر الأوامر لنظام التشغيل. وتستخدم أنظمة التشغيل المختلفة أسماءً محددة لهذه الوظائف. تتضمن جميع الأنظمة الشبيهة بنظام يونكس واجهة سطر أوامر واحدة على الأقل متوافقة مع معيار POSIX ، وعادةً ما تكون إما bash أو وضع التوافق zsh . [ 2 ]

القدرات

تعليقات

تتجاهل الصدفة التعليقات# . تبدأ عادةً برمز الهاش ( )، وتستمر حتى نهاية السطر. [ 3 ]

اختيار لغة البرمجة النصية القابلة للتكوين

يُعدّ سطر shebang ، أو سطر التجزئة، نوعًا خاصًا من التعليقات يستخدمه النظام لتحديد المُفسِّر المُناسب لتنفيذ الملف. يجب أن يكون سطر shebang هو السطر الأول من الملف، ويبدأ بـ " #!". [ 3 ] في أنظمة التشغيل الشبيهة بنظام Unix، تُفسَّر الأحرف التي تلي #!البادئة " " على أنها مسار إلى برنامج قابل للتنفيذ يقوم بتفسير النص البرمجي. [ 4 ]

اختصارات

يمكن لبرنامج نصي shell أن يوفر صيغة ملائمة لأمر النظام حيث يتم تطبيق إعدادات البيئة الخاصة أو خيارات الأمر أو المعالجة اللاحقة تلقائيًا، ولكن بطريقة تسمح للبرنامج النصي الجديد بالعمل كأمر Unix عادي تمامًا .

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

#!/bin/sh LC_COLLATE = C ls -FCas " $@ "

هنا، يستخدم السطر الأول سطر shebang لتحديد المفسر الذي سينفذ باقي البرنامج النصي، بينما يُنشئ السطر الثاني قائمةً تتضمن خياراتٍ لمؤشرات تنسيق الملفات، والأعمدة، وعرض جميع الملفات (دون حذف أي منها)، وحجمها بالكتل. LC_COLLATE=Cيُحدد هذا الخيار ترتيب الفرز الافتراضي بحيث لا يدمج الأحرف الكبيرة والصغيرة معًا، ولا يخلط بين أسماء الملفات المخفية ( dotfiles) وأسماء الملفات العادية كنتيجةٍ جانبيةٍ لتجاهل علامات الترقيم في الأسماء (عادةً ما تُعرض أسماء الملفات المخفية فقط عند -aاستخدام خيارٍ مثل )، ويجعل "$@"أي معلماتٍ مُعطاةٍ لـ تمر كمعلماتٍ إلى ls، بحيث يمكن استخدام lجميع الخيارات العادية والصيغ الأخرى المعروفة لـ ls.

وبذلك، يمكن للمستخدم ببساطة استخدام lالقائمة المختصرة الأكثر استخدامًا.

مثال آخر على نص برمجي يمكن استخدامه كاختصار هو طباعة قائمة بجميع الملفات والمجلدات داخل دليل معين.

#!/bin/sh واضح ls -al 

في هذه الحالة، سيبدأ سكربت الصدفة بسطره الابتدائي المعتاد #!/bin/sh . بعد ذلك، يُنفذ السكربت الأمر clear الذي يمسح جميع النصوص من الطرفية قبل الانتقال إلى السطر التالي. يُقدم السطر التالي الوظيفة الرئيسية للسكربت. يعرض الأمر ls -al قائمة بالملفات والمجلدات الموجودة في المجلد الذي يُشغل منه السكربت. يمكن تعديل خصائص الأمر ls لتناسب احتياجات المستخدم.

وظائف الدفعات

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

#!/bin/sh printf 'compiling...\n' cc -c foo.c cc -c bar.c cc -c qux.c cc -o myprog foo.o bar.o qux.o printf 'done.\n'

كان البرنامج النصي يسمح للمستخدم بحفظ الملف الذي يتم تعديله، وإيقاف المحرر مؤقتًا، ثم تشغيله ./buildلإنشاء البرنامج المُحدَّث، واختباره، ثم العودة إلى المحرر. ولكن منذ ثمانينيات القرن الماضي تقريبًا، استُبدلت البرامج النصية من هذا النوع بأدوات مثل " make" المتخصصة في بناء البرامج.

تعميم

لا تُعدّ مهام الدفعات البسيطة أمرًا غير مألوف للمهام المعزولة، ولكن استخدام حلقات shell والاختبارات والمتغيرات يوفر مرونة أكبر للمستخدمين. يمكن إنشاء سكربت POSIX sh لتحويل صور JPEG إلى صور PNG، حيث يتم توفير أسماء الصور في سطر الأوامر - ربما باستخدام أحرف البدل - بدلاً من سرد كل منها داخل السكربت، باستخدام هذا الملف، الذي يُحفظ عادةً في ملف مثل/home/username/bin/jpg2png

#!/bin/sh for jpg ; do # استخدم $jpg بدلاً من كل اسم ملف مُعطى، بالتناوب png = ${ jpg %.jpg } .png # أنشئ نسخة PNG من اسم الملف عن طريق استبدال .jpg بـ .png printf 'converting "%s" ...\n' " $jpg " # اعرض معلومات الحالة للمستخدم الذي يُشغّل البرنامج النصي if convert " $jpg " jpg.to.png ; then # استخدم convert (المُقدّم من ImageMagick) لإنشاء PNG في ملف مؤقت mv jpg.to.png " $png " # إذا نجح الأمر، أعد تسمية صورة PNG المؤقتة إلى الاسم الصحيح else # ...وإلا، أبلغ عن خطأ واخرج من البرنامج النصي printf > & 2 'jpg2png: error: failed output saved in "jpg.to.png".\n' exit 1 fi # نهاية اختبار "if" done # نهاية حلقة "for" printf 'all conversions successful\n' # أخبر المستخدم بالخبر السار

ويمكن بعد ذلك تشغيل الأمر jpg2pngعلى مجلد كامل مليء بصور JPEG باستخدام/home/username/bin/jpg2png *.jpg

برمجة

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

توفر أدوات يونكس القياسية sed و awk إمكانيات إضافية لبرمجة الصدفة؛ ويمكن أيضًا تضمين لغة بيرل في نصوص الصدفة، كما هو الحال مع لغات البرمجة النصية الأخرى مثل Tcl . [ 5 ] وتأتي بيرل و Tcl مع مجموعات أدوات رسومية أيضًا.

لغات الصدف النموذجية

تشمل لغات البرمجة النصية الشائعة في أنظمة التشغيل UNIX وLinux وأنظمة التشغيل المتوافقة مع معيار POSIX ما يلي:

تشمل الأغلفة غير المتوافقة مع معيار POSIX الشائعة الاستخدام ما يلي:

تتشابه بنية واجهات سطر الأوامر C وTcl إلى حد كبير مع لغات البرمجة التي تحمل أسماءً مشابهة، وتُعدّ واجهات Korn وBash تطويرًا لواجهة Bourne، المبنية على لغة ALGOL مع إضافة عناصر من لغات أخرى. [ 11 ] من جهة أخرى، ساهمت واجهات سطر الأوامر المختلفة، بالإضافة إلى أدوات مثل awk و sed و grep ولغات BASIC و Lisp و C وغيرها، في تطوير لغة البرمجة Perl . [ 12 ]

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

كما تتوفر على نطاق واسع برامج ذات صلة مثل البرامج النصية القائمة على Python و Ruby و C و Java و Perl و Pascal و Rexx وما إلى ذلك بأشكال مختلفة.

ما يسمى بالأصداف البعيدة مثل

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

لغات البرمجة النصية الأخرى

تم تقديم العديد من لغات البرمجة النصية القوية، مثل Rexx و Python و Perl و Tcl، لمعالجة المهام الكبيرة أو المعقدة أو المتكررة التي يصعب التعامل معها بسهولة باستخدام البرامج النصية التقليدية، مع تجنب العبء الزائد المرتبط باللغات المترجمة مثل C أو Java. [ 14 ]

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

كتابة البرامج النصية هي شكل من أشكال البرمجة . وبينما قد يركز مصطلح "كتابة البرامج النصية" على الأتمتة البسيطة والموجهة نحو المهام، فإن مصطلح "البرمجة" الأوسع يشمل كلاً من كتابة البرامج النصية وتطوير البرمجيات بلغات مُجمّعة أو مُهيكلة. وعلى هذا النحو، تتضمن كتابة البرامج النصية كتابة تعليمات برمجية لتوجيه الحاسوب لأداء مهام محددة، وهو ما يُحقق التعريف الأساسي للبرمجة. [ 16 ]

دورة الحياة

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

على الرغم من أن الملفات ذات الامتداد ".sh" عادةً ما تكون عبارة عن سكربتات شل من نوع ما، إلا أن معظم سكربتات الشل لا تحتوي على أي امتداد لاسم الملف. [ 17 ] [ 18 ] [ 19 ] [ 20 ]

المزايا والعيوب

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

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

من جهة أخرى، تُعدّ برمجة سطر الأوامر (shell scripting) عرضةً لأخطاء مكلفة. تُعتبر أخطاء الكتابة غير المقصودة، مثل كتابة `<script>` rm -rf * /بدلاً من `<script>` المقصودة ، شائعةً في مجتمع يونكس؛ إذ تُحوّل مسافة إضافية واحدة الأمر من حذف جميع المجلدات الفرعية الموجودة في المجلد الحالي إلى حذف كل شيء من المجلد الجذرrm -rf */ لنظام الملفات . [ 21 ] يمكن أن تُحوّل مشاكل مماثلة `<script>` و` <script>` إلى أدوات خطيرة، وقد يؤدي سوء استخدام إعادة التوجيه إلى حذف محتويات ملف. [ 22 ]cpmv>

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

توجد أيضًا مشاكل توافق بين المنصات المختلفة. كتب لاري وول ، مبتكر لغة بيرل ، عبارة شهيرة مفادها أن "نقل الصدفة أسهل من نقل نص برمجي للصدفة". [ 23 ]

وبالمثل، قد تواجه البرامج النصية الأكثر تعقيدًا قيود لغة برمجة سطر الأوامر نفسها؛ إذ تجعل هذه القيود من الصعب كتابة كود عالي الجودة، وقد تؤدي الإضافات التي تُجريها مختلف أنظمة التشغيل لتحسين مشاكل لغة سطر الأوامر الأصلية إلى تفاقم هذه المشاكل. [ 24 ]

Many disadvantages of using some script languages are caused by design flaws within the language syntax or implementation, and are not necessarily imposed by the use of a text-based command-line; there are a number of shells which use other shell programming languages or even full-fledged languages like Scsh (which uses Scheme).

Interoperability among scripting languages

Many scripting languages share similar syntax and features due to their adherence to the POSIX standard, and several shells provide modes to emulate or maintain compatibility with others. This allows scripts written for one shell to often run in another with minimal changes.

For example, Bash supports much of the original Bourne shell syntax and offers a POSIX-compliant mode to improve portability. However, Bash also includes a number of extensions not found in POSIX, commonly referred to as bashisms. While these features enhance scripting capabilities, they may reduce compatibility with other shells like Dash or ksh.

Shell scripting on other operating systems

Interoperability software such as Cygwin, the MKS Toolkit, Interix (formerly part of Microsoft Windows Services for UNIX), Hamilton C shell, and UWIN (AT&T Unix for Windows) enables Unix shell programs to run on Windows NT-based systems, though some features may not be fully supported on the older MS-DOS/Windows 95 platforms. Earlier versions of the MKS Toolkit also provided support for OS/2.

تتميز لغات البرمجة النصية، بحكم تعريفها، بإمكانية التوسع. في أنظمة يونكس وغيرها من الأنظمة المتوافقة مع معيار POSIX ، تُستخدم أدوات مثل awk و sed لتوسيع قدرات معالجة النصوص والأرقام في نصوص shell. تمتلك لغات مثل Tcl وPerl وRexx وPython أدوات رسومية، ويمكن استخدامها لكتابة الدوال والإجراءات لنصوص shell التي تُشكل عائقًا أمام السرعة (حيث تُعد لغات مثل C وFortran ولغة التجميع أسرع بكثير)، ولإضافة وظائف غير متوفرة في لغة shell، مثل المقابس ووظائف الاتصال الأخرى، ومعالجة النصوص المعقدة، والتعامل مع الأرقام إذا لم يكن النص المُستدعي يمتلك هذه الإمكانيات، وكتابة التعليمات البرمجية وتعديلها ذاتيًا، وتقنيات مثل الاستدعاء الذاتي ، والوصول المباشر إلى الذاكرة، وأنواع مختلفة من الفرز، وغيرها، والتي يصعب أو يستحيل تنفيذها في النص الرئيسي، وما إلى ذلك. يمكن استخدام Visual Basic for Applications و VBScript للتحكم والتواصل مع أشياء مثل جداول البيانات وقواعد البيانات والبرامج القابلة للبرمجة من جميع الأنواع وبرامج الاتصالات وأدوات التطوير وأدوات الرسومات وغيرها من البرامج التي يمكن الوصول إليها من خلال نموذج كائن المكون .

انظر أيضاً

مراجع

  1. كيرنيغان، برايان دبليوبايك، روب (1984). "3. استخدام الصدفة". بيئة برمجة يونكس . برنتيس هول، ص 94. ISBN  0-13-937699-2. إن الصدفة هي في الواقع لغة برمجة: فهي تحتوي على متغيرات، وحلقات تكرارية، واتخاذ قرارات، وما إلى ذلك.
  2. أرنولد روبنز ونيلسون إتش إف بيبي (2005). برمجة سكريبتات شل الكلاسيكية . دار نشر أورايلي. ص 5. ISBN  978-0-596-00595-5.
  3. 1 2 جونسون، كريس (2009). برمجة باش الاحترافية: كتابة البرامج النصية لصدفة لينكس . أبريس. ISBN 9781430219989تم الاطلاع عليه بتاريخ 27 سبتمبر 2019 .
  4. "exec(3p) – دليل مبرمج POSIX" . تم الاطلاع عليه بتاريخ 24-07-2020 .
  5. ستيفن ج. كوتشان، باتريك هـ. وود (2003). برمجة يونكس شل . دار نشر سامز. ص 243. ISBN  9780672324901.
  6. https://linuxhandbook.com/dash-shell/
  7. https://www.terminal.guide/shell/dash/
  8. https://www.gnu.org/software/bash/
  9. https://busybox.net/
  10. https://waitwhat.sh/blog/the_case_for_fish/
  11. أمثلة على استخدام أنظمة يونكس، الصفحات 7-10،
  12. وول، لاري؛ كريستيانسن، توم؛ أوروانت، جون (2012). برمجة بيرل ( الطبعة الخامسة). أورايلي ميديا. ص. مقدمة. ISBN   9781449303587.
  13. "osh - manned.org" . manned.org . تم الاطلاع عليه بتاريخ 16 يناير 2019 .
  14. فلانغان، ديفيد (2020). جافا سكريبت: الدليل الشامل . دار نشر أورايلي ميديا. ص 2. ISBN  9781491952023.
  15. هارولد، إليوت راستي (2013). برمجة الشبكات باستخدام جافا . دار نشر أورايلي. ص 6. ISBN  9781449365943.
  16. لوتز، مارك (2013). تعلم بايثون ( الطبعة الخامسة). دار نشر أورايلي. ص 6. ISBN   9781449355739يُطلق على لغة بايثون غالبًا اسم لغة برمجة نصية، لكنها في الحقيقة مجرد لغة برمجة عامة الأغراض تتميز أيضًا بقدرتها على كتابة النصوص البرمجية. في الواقع، تُعدّ كتابة النصوص البرمجية فرعًا من فروع البرمجة بشكل عام.
  17. روبنز، أرنولد؛ هانا، إلبرت؛ لامب، ليندا (2008). تعلم محرري vi و Vim . دار نشر أورايلي ميديا، ص 205. ISBN  9781449313258.
  18. إيستوم، تشاك (2012). إدارة لينكس الأساسية: دليل شامل للمبتدئين . كورس تكنولوجي/سينجايج ليرنينج. ص 228. ISBN  978-1435459571.
  19. كوماري، سيني (23 نوفمبر 2015). أساسيات برمجة سكريبتات لينكس شل . دار نشر باكت المحدودة. رقم ISBN 9781783552375تم الاطلاع عليه في 7 مايو 2017. بدلاً من استخدام امتداد ملف لبرامج shell النصية، يُفضل الاحتفاظ باسم ملف بدون امتداد والسماح للمفسر بتحديد النوع من خلال النظر في shebang(#!).
  20. تايلور، ديف؛ بيري، براندون (16 ديسمبر 2016). نصوص شل رائعة، الطبعة الثانية: 101 نصًا لأنظمة لينكس، ماك أو إس إكس، ويونكس . دار نشر نو ستارش. رقم ISBN 9781593276027تم الاطلاع عليه في 7 مايو 2017. لا تحتاج البرامج النصية Shell إلى امتداد ملف خاص، لذا اترك الامتداد فارغًا (أو يمكنك إضافة الامتداد .sh إذا كنت تفضل ذلك، ولكن هذا ليس مطلوبًا).
  21. شوتس، ويليام (2019). سطر أوامر لينكس . دار نشر نو ستارش. ص 72. ISBN  9781593279523.
  22. ^ ألبينج، كارل. فوسن، جي بي؛ نيوهام، كاميرون (2007). كتاب طبخ باش . أورايلي وسائل الإعلام. ص. 53. ردمك  9780596526788.
  23. لاري وول (4 يناير 1991). "إيجاد الوسيط الأخير" . مجموعة الأخبار : comp.unix.shell . تم الاسترجاع في 5 يناير 2023 . 
  24. كريستيانسن، توم. "برمجة Csh تعتبر ضارة" .