التحكم في العمليات قذيفة
وجافا، PHP وغيرها من اللغات ليست هي نفسها، التحكم في التدفق ش ليست فارغة، على سبيل المثال (وفيما يلي هو الكتابة PHP التحكم في العمليات):
<?php if (isset($_GET["q"])) { search(q); } else { // 不做任何事情 }
في ش / باش قد لا تكون كذلك في الكتابة، يتم تنفيذ أي بيان إذا كان فرع آخر، لا أكتب هذا آخر.
إذا آخر
إذا
إذا جملة البيان:
if condition then command1 command2 ... commandN fi
سطر واحد (لموجه الأوامر النهائي):
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
يتم عكس نهاية فاي إذا الإملائي في وقت لاحق سوف تواجه مماثل.
إذا آخر
إذا تركيب آخر:
if condition then command1 command2 ... commandN else command fi
عدا ذلك، إذا آخر
عدا ذلك، إذا تركيب آخر:
if condition1 then command1 elif condition2 then command2 else commandN fi
الأمثلة التالية تحديد ما إذا كان اثنين من المتغيرات على قدم المساواة:
a=10 b=20 if [ $a == $b ] then echo "a 等于 b" elif [ $a -gt $b ] then echo "a 大于 b" elif [ $a -lt $b ] then echo "a 小于 b" else echo "没有符合的条件" fi
الإخراج:
a 小于 b
إذا غالبا ما تستخدم عبارات شيء آخر بالتزامن مع قيادة الاختبار على النحو التالي:
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo '两个数字相等!' else echo '两个数字不相等!' fi
الإخراج:
两个数字相等!
لحلقة
مثل لغات البرمجة الأخرى، دعم شل للحلقة.
الشكل العام للللحلقة:
for var in item1 item2 ... itemN do command1 command2 ... commandN done
سطر واحد:
for var in item1 item2 ... itemN; do command1; command2… done;
عندما تكون قيمة المتغير في القائمة، لحلقة التي يتم تنفيذها مرة واحدة كل الأوامر، أسماء المتغيرات الحصول على قائمة من القيمة الحالية. يمكن أن تكون قيادة أية أوامر قذيفة وبيانات صحيحة. في القائمة يمكن أن تشمل استبدال سلسلة واسم الملف.
في القائمة هو اختياري، إذا كنت لا تستخدم، لإعادة التدوير معلمات سطر الأوامر الموقع.
على سبيل المثال، من اجل القائمة الانتاج الحالي من الأرقام:
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
الإخراج:
The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5
بالتتابع إخراج سلسلة من الأحرف:
for str in 'This is a string' do echo $str done
الإخراج:
This is a string
في حين بيان
في حين حلقة لتنفيذ باستمرار سلسلة من الأوامر، كما أنها تستخدم لقراءة البيانات من ملف المدخلات؛ الأمر عادة اختبار الظروف. والشكل هو:
while condition do command done
ما يلي هو جزء أساسي بينما ظروف الاختبار حلقة: إذا كثافة أقل من أو يساوي 5، ترجع شرط صحيح. الباحث تبدأ من الصفر في كل مرة تجهيز حلقة، بالإضافة إلى 1 كثافة العمليات. تشغيل البرنامج النصي أعلاه إرجاع عدد 1-5، ثم إنهاء.
#!/bin/sh int=1 while(( $int<=5 )) do echo $int let "int++" done
تشغيل البرنامج النصي، الإخراج:
1 2 3 4 5
استخدام المستخدم السماح باش الأوامر، والذي يستخدم لإجراء واحد أو أكثر من أشكال التعبير وحسابات متغيرة لا تحتاج إلى إضافة $ لتمثيل المتغيرات، وتحديدا المتطلبات: دعونا باش القيادة
.في حين حلقة يمكن استخدامها لقراءة المعلومات وحة المفاتيح. في المثال التالي، يتم تعيين إدخال المعلومات إلى فيلم متغير، اضغط على <Ctrl-D> نهاية الحلقة.
echo '按下 <CTRL-D> 退出' echo -n '输入你最喜欢的电影名: ' while read FILM do echo "是的!$FILM 是一部好电影" done
تشغيل البرنامج النصي، خرج مشابهة لما يلي:
按下 <CTRL-D> 退出 输入你最喜欢的电影名: w3cschool本教程 是的!w3cschool本教程 是一部好电影
حلقة لانهائية
اللانهائي تركيب الحلقة:
while : do command done
أو
while true do command done
أو
for (( ; ; ))
حتى حلقة
حتى ينفذ حلقة في سلسلة من الأوامر حتى الشرط صحيحا عندما توقفت.
حتى حلقة وعلى الرغم من حلقة على النهج المعاكس.
عادة حين حلقة حتى أفضل التداول، ولكن في مرحلة ما - وفقط في حالات نادرة، حتى دورة أكثر فائدة.
حتى في بناء الجملة:
until condition do command done
الظروف قد يكون أي ظروف الاختبار، يحدث اختبار في نهاية الدورة، وحلقة أعدم الأقل مرة واحدة في - يرجى ملاحظة هذه النقطة.
حالة
قذيفة بيان الحالة هو أكثر العبارات المختارة. يمكنك استخدام العبارة حالة تطابق قيمة مع نمط، وإذا كانت مباراة ناجحة، تنفيذ الأوامر مطابقة. شكل بيان الحالة كما يلي:
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
حالة العمل كما هو مبين أعلاه. يجب أن يتبع القيمة من خلال كلمة في كل نموذج يجب أن تغلق قوسين. يمكن أن تكون قيمة متغير أو ثابت. بعد مطابقة نمط ثابت مع القيم الموجودة خلالها جميع الأوامر المنفذة حتى ؛؛.
فإن قيمة كل مباراة الكشف عن نمط. مرة واحدة مطابقة النمط، نمط مطابقة بعد تنفيذ الأمر الموافق لم يعد الاستمرار في طرق أخرى. إذا لم يكن هناك مطابقة نمط، استخدام علامة النجمة * لالتقاط قيمة، ثم قم بتشغيل وراء الأمر.
يطالب النصي التالي ل1-4، مع كل نمط مطابقة:
echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;; esac
أدخل محتوى مختلف، سيكون هناك نتائج مختلفة، مثل:
输入 1 到 4 之间的数字: 你输入的数字为: 3 你选择了 3
للخروج من حلقة
في الدورة، وأحيانا أنها لا تلبي احتياجات اضطر للخروج من حلقة عندما يكون الشرط نهاية الحلقة، يستخدم شل اثنين من الأوامر لتنفيذ هذه الميزة: استراحة ومتابعة.
قيادة استراحة
كسر قيادة يسمح من جميع حلقات (الحلقة ينهي تنفيذ كل مرة).
في المثال التالي، والسيناريو في حلقة لا نهائية حتى يقوم المستخدم بإدخال رقم أكبر من 5. للخروج من هذه الدوامة والعودة إلى قذيفة موجه، استخدم الأمر الشوط الاول.
#!/bin/bash while : do echo -n "输入 1 到 5 之间的数字:" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esac done
تنفيذ التعليمات البرمجية أعلاه، والناتج هو:
输入 1 到 5 之间的数字:3 你输入的数字为 3! 输入 1 到 5 之间的数字:7 你输入的数字不是 1 到 5 之间的! 游戏结束
استمر
تواصل وكسر القيادة أمر مشابه، مع فارق واحد، فإنه لا يقفز من جميع الحلقات، للتو من دورة الحالية.
لتعديل المثال أعلاه:
#!/bin/bash while : do echo -n "输入 1 到 5 之间的数字: " read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esac done
تشغيل تم العثور على رمز، وعندما يكون عدد المدخلات أكبر من 5، وهذه الحالة لن ينهي دورة، البيان صدى "اللعبة قد انتهت!" لن يتم تنفيذه.
ESAC
قواعد اللغة ولغة الاختلافات في حالة الأسرة C كبيرة، فإنه يأخذ ESAC (القضية هي بدورها) بمناسبة نهاية كل فرع الحال مع قوس الصحيح، ممثلة من قبل اثنين من الفواصل المنقوطة كسر.