البرمجة النصية لقشرة نظام التشغيل 545 ) هو عدم فصل العناصر بمسافات. يجب وضعif/then( if( نمس ونجد أن العديد من لغات البرمجة الأخرى أكثر تسامحاً في استخدام المسافة. وفي حال عدم وضع مسافة في جملة if[«$USER« = »alice«] if [«$USER« = »alice«] if[ »$USER« = »alice« ] ة فرق آخر في استخدام الجملة الشرطية ثمو مقارنة باللغات البرمجية الأخرى وهذا الفرق هو أن مقارنة العبارات النصية تستخدم عامل مقارنة مختلف (=) عن العامل المس والجدول التالي يوضح قائمة بعوامل المقارنة مع أمثلة على استخداماتها. مثال على الاستخدامالمقارنةالعامل لأمثلة الاستخدام: X = 5 »Y = »RED -eq (عدد صحيح� لٍمساوif [ $X -eq 5] -ne (عدد صحيح� لٍغير مساوif [ $X -ne 3] if [ $X -gt 2] if [ $X -lt 10] if [ $X -ge 4] if [ $X -le 7] = (نص� لٍمساوif [ »$Y« = »RED«] != (نص� لٍغير مساوif [ »$Y« != »B LUE «]
عدد الصفحات ٥٤٦الفصل العا 546 :)الجملة الشرطية في ح تتخ else . وتوضح القائمةطوالذي سيتم تنفيذه عند عدم استيفاء الشر number_guess_v1 على هذا المثال الأساسي لتطوير تطبيقات أكثر تعقيداً في بقية هذا الفصل o قائمة bin/bash guess=2 number=$)) ) $RANDOM % 100( + 1 (( #Is the guess correct? if [ $guess -eq $number ] then echo »Correct Guess: The number is $number« else # Is the guess high? if [ $number -lt $guess ] then echo »Guess lower: The number is less than $guess« fi # Is the guess low? if [ $number -gt $guess ] then echo »Guess higher: The number is greater than $guess« fi fi
عدد الصفحات ٥٤٧البرمجة النصية لقشرة نظام التشغيل 547 )5 أن الرقم يساوين في حولأن سيكون دائماً خاطئاً (سوف نقوم بوضع تخمينات يمكن إضافتها من المستخدم لاحقاً في هذا الفص نره سابقاً: الجملة الشرطية المتداخلة. لمالمرحلة يقوم النص البرمجي بتنفيذ شيء والجملة الشرطية المتداخلة هي جملة if [ condition1 ] then echo »condition1 is true« else #Nested-if statement if [ condition2 ] then echo »condition2 is true« else echo »Neither condition is true« fi fi الأول صحيحاً فإن جزءطإذا كان الشر ط يكن الشرلم الثاني. لكن إذا طلا يتم تنفيذها أبداً حيث لا يتم تشغيل أي اختبار على الشر الثاني. وفي طالأول صحيحاً فإن الجملة الشرطية المتداخلة يتم تنفيذها كما يتم اختبار الشر guess الرقم أعلاه، نجد أننالنص البرمجي الخاص بتخم Guess higher:، ومن ثم يُعرضنوالث e number is greater than 2
عدد الصفحات ٥٤٨الفصل العا 548 [alice@sunshine ~]$ /opt/book/scripting/number_guess_v1 Guess higher: The number is greater than 2 الجملة الشرطية الجملة الشرطية التي سنناقش else ifة لجملصر�مخت : يأعلاه باستخدام هذه الجملة الشرطية كما ي if [ condition1 ] then echo »condition1 is true« elif [ condition2 ] then echo »condition2 is true« else echo »neither condition is true« fi .ن) في حelif يمكن إضافة مقاط�ك : ي الأرقام كما ينومثالاً على ذلك سنقوم بتحديث النص البرمجي لتخم
عدد الصفحات ٥٤٩البرمجة النصية لقشرة نظام التشغيل 549 :)قائمة bin/bash guess=2 number=$)) ) $RANDOM % 100 ( + 1 (( #Is the guess correct? if [ $guess -eq $number ] then echo »Correct guess: The number is $number« # Is the guess high? elif [ $number -lt $guess ] then echo »Guess lower: The number is less than $guess« # Is the guess low? elif [ $number -gt $guess ] then echo »Guess higher: The number is greater than $guess« fi صرإن استخدام قليلاً كما يجعلها أس ستؤدي إلى النتائج السابقة نفسها. [alice@sunshine ~]$ /opt/book/scripting/number_guess_v2 Guess higher: The number is greater than 2
عدد الصفحات ٥٥٠الفصل العا 550 مدخلات المستخدم يم جميع المتغيرات في النصوص البرمجية التي ناقشناها إلى الآن تُعد ضمنية ومثبتة ِرإن ق حيث ت ه قي معاملات سطر الأوامر، وأمر القراءة معاملات سطر الأوامر: وبش BASH ة نظام التش�لق بشكل آلي في متغيرات خاصة عند تنفيذ البرامج. ويتم تسمية هذه المتغيرات بأرقام حسب الترتيب الذي حصلت عليه المعاملات في سطر الأوامر: قائمة bin/bash echo »The first argument: $1« echo »The second argument: $2« echo »The third argument: $3« [alice@sunshine ~]$ /opt/book/scripting/user_input_ex1 42 »Hello World« Earth The first argument: 42 The second argument: Hello World The third argument: Earth
عدد الصفحات ٥٥١البرمجة النصية لقشرة نظام التشغيل أمن المعلومات وإدارة مخاطر تقنية المعلومات55( »Hello World«( نلاحظ أن المعامل الثاني يتكون من كلمت حول مجموعة من الكلمات تُخبر قشرة نظام التش عن معامل واحد. إذاً يمكنن هو الع (#$) وال عدد المعاملات المدخلة في مقابل عدد المعاملات المتوقع إدخالها ومن ثم طباعة رسالة خطأ عند فشل هذا الاختبار. قائمة bin/bash if [ $# -eq 3 ] then echo »The first argument: $1« echo »The second argument: $2« echo »The third argument: $3« else echo »Three arguments are required!« fi [alice@sunshine ~]$ /opt/book/scripting/user_input_ex2 42 Earth Three arguments are required!
عدد الصفحات ٥٥٢الفصل العا 552 قراءة مدخلات المستخدم الخي تنفيذ النص البرمجي حتى يقوم المستخدم بإدخال قيمة ما، ومن ثم يضغط على زر الإرجاع. الأرقام: ن)، سنقوم بتحديث النصي البرمجي لتخمولتوضيح استخدام الأمر قائمة bin/bash #Prompt for user input echo »Enter a number between 1 and 100 and press [ENTER]: « read guess number=$)) ) $RANDOM % 100 ( + 1 (( #Is the guess correct? if [ $guess -eq $number ] then echo »Correct guess: The number is $number« # Is the guess high? elif [ $number -lt $guess ] then echo »Guess lower: The number is less than $guess« # Is the guess low? elif [ $number -gt $guess ] then echo »Guess higher: The number is greater than $guess« fi [alice@sunshine ~]$ /opt/book/scripting/number_guess_v3 Enter a number between 1 and 100 and press [ENTER]: 15 Guess lower: The number is less than 15
عدد الصفحات ٥٥٣البرمجة النصية لقشرة نظام التشغيل 553 الحلقات أحد أكثر الجوانب فائدة في البرمجة النصية لقشرة نظام التشغيل تخفيض المهام المتكررة إلى عدد بس�الحاس الأوامر. وبدلاً من كتابة الأوامر المتش بكتابة الأوامر التي ترغب في تنفيذها مرة واحدة وبعد ذلك تترك الأمر لقشرة نظام التشغيل من الحلقات المتاحة في النص البرمجي لقشرة نلتكرار تلك الأوامر. وسوف نعمل على نوع نظام التشغيل •حلقات • المُعطى صحيحاً. طحلقات •حلقات وهذه الحلقات هي الأبسط والأكثر استخداماً في النصوص البرمجية لقشرة نظام التشغيل BASH( الحلقة خلال كل دورة. وعندما تصل قشرة نظام التش في ٍd one( الحاصرالحلق القائمة. والقائمة التالية مثال مبسط على الحلقات: قائمة bin/bash for var in »item1« »item2« »item3« do echo »The current item is $var« #More commands could be added here done وعند تشغيل هذا المثال سترى أن قيمة
عدد الصفحات ٥٥٤الفصل العا 554 alice@sunshine ~]$ /opt/book/scripting/for_loop_example1 The current item is item1 The current item is item2 The current item is item3 في سصروبالإضافة إلى سرد كل عن كقائمة عناصر للتكرار من جديد. قائمة bin/bash for word in $)head -3 /opt/book/scripting/words.txt( do echo »Original word: $word« echo »All uppercase: $)echo $word | tr ‘[:low er:]’ ‘[:upper:]’(« done [alice@sunshine ~]$ /opt/book/scripting/for_loop_example2 Original word: eyes All uppercase: EYES Original word: record All uppercase: RECORD Original word: explosive All uppercase: EXPLOSIVE
عدد الصفحات ٥٥٥البرمجة النصية لقشرة نظام التشغيل 555 opt/book/scripting/words.txt( )e yes, ترى فإن أول ثلاثة س�وك record, explosive ه الثاني فهو أكثر تعقيداً حيث يُنقل في هذا الأمر قيمة المتغ ) وبعد echo Sword I tr ›[:lower:]‹ ›[:upper:]‹ل الحروف الصغيرة إلى حروف كبيرةَّتُحو ذلك تُعرض مخرجات هذا الأمر على الشاشة. فاصل الحقول الداخلية: عن IFS خاص، وهوي العناصر باستخدام متغير داخنتحدد الفواصل ب internal field separator( جديد لحلقاتصرللحقول. وعندما يُعثر على أحد تلك الحدود، يُنشَ الافتراضية لمتغ يمكن تغيير هذه القائمة لتحقق عدة أهداف منها على سبيل المثال تحليل قائمة تستخدم ح لها ب�الفواص .صرعن
عدد الصفحات ٥٥٦الفصل العا 556 :)قائمة bin/bash for line in $)tail -3 /etc/passwd( do echo $line done [alice@sunshine ~]$ /opt/book/scripting/ifs_example1 russell.dacanay:x:1648:100: «Russell Dacanay )Staff -Library(«:/h ome/staff/russell.dacanay:/bin/bash daniel.saddler:x:1649:100: «Daniel Saddler )Staff -Student Services(«:/home/staff/daniel.saddler:/bin/bash russell.lavigne:x:1650:100: «Russell Lavigne )Staff -Academic Affairs VP Office(«:/home/staff/russell.lavigne:/bin/bash وكما ترى فإن اس etc/passwd( النص. ولتعديل هذا الوضع س ). ‘n\‘الجديد
عدد الصفحات ٥٥٧البرمجة النصية لقشرة نظام التشغيل 557 :)قائمة bin/bash #Change IFS to the newline character only IFS=$’\n’ for line in $)tail -3 /etc/passwd( do echo $line done [alice@sunshine ~]$ /opt/book/scripting/ifs_example1 russell.dacanay:x:1648:100: «Russell Dacanay )Staff-Library(«: \ /home/staff/russell.dacanay:/bin/bash daniel.saddler:x:1649:100: «Daniel Saddler )Staff-Student Services(«: \ /home/staff/daniel.saddler:/bin/bash russell.lavigne:x:1650:100: «Russell Lavigne )Staff-Academic Affairs VP Office(«: \ /home/staff/russell.lavigne:/bin/bash ) في المخرجات أعلاه هو رمز لمتابعة الس\ المائليلاح يس مائل يبتشغيل النص البرمجي في آلة لينكس الافتراضية فإنك ستجد السطر وفيه خط عك ) وستجد ما بعده معروضاً في سطر واحد. \(
عدد الصفحات ٥٥٨الفصل العا 558 التسلسلات غالباً ما تحتاج إلى تنفيذ أمر ما لعدد محدد من المرات، أو تحتاج إلى اس لقشرة نظام التش )4من الأرقام كمدخلات للحلقات. ومنذ الإصدار الثالث احتوت القشرة على قاعدة مدمجة لتوليد سلس (..). ن)، كما تكون المعاملات مفصولة بنقطت} {سلس وإما بثلاثة معاملات، فإذا أعطي عاملان، فإن نويمكن إنشاء السلسلة إما باستخدام معامل الأول هو متغير البداية والثاني هو متغير النهاية. وبعد ذلك يتم تنفيذ الحلقة باس جميع الأعداد الصحيحة بدءاً من متغيرة البداية وانتهاءً بمتغيرة النهاية. قائمة bin/bash for number in }1..5{ do echo $number done [alice@sunshine ~]$ /opt/book/scripting/sequence_example1 1 2 3 4 5 ولمزيد من المعلومات حول توليد المتسلسلات في الإصدارات السابقة، انظر أمر)4(
عدد الصفحات ٥٥٩البرمجة النصية لقشرة نظام التشغيل 559 قيمة البداية والرقم�ويمكن الأصغر قيمة النهاية. قائمة bin/bash for number in }10..1{ do echo $number done [alice@sunshine ~]$ /opt/book/scripting/reverse_sequence 10 9 8 7 6 5 4 3 2 1 كل الأرقامن فإن المعامل الثالث يحدد مقدار الزيادة ب)5وإذا تم إعطاء ثلاثة معاملات في هذه السلسلة. يتوجب استخدام الإصدار الرابع من قشرة نظام التشغيل )5(
عدد الصفحات ٥٦٠الفصل العا 560 :)قائمة bin/bash for number in }1..10..2{ do echo $number done [alice@sunshine ~]$ /opt/book/scripting/sequence_example3 1 3 5 7 9 يكن من ضمن النتائج التي تم الحصول عليها، وذلك لأن سلسلةلم) (0لاحظ أن الرقم �الأرقام تحتوي على جميع الأرقام الأقل من أو يساوي قيمة النهاية. وبما أن السلسلة تزيد ب ). (0) لكن هذا العدد أكبر من قيمة النهاية وهي((2( التوقف والاستمرار ق ال القي المتبقي تنفيذ النص البرمجي لا يتم مقاطعته حيث يستمر في تنفيذ الأوامر بعد الحلقة.
عدد الصفحات ٥٦١