دوستان و علاقمندان به مباحث آموزش یونیکس (UNIX) ، این آموزش را از سایت پی وی لرن دنبال خواهیم نمود. بررسی کنترل حلقه Shell در یونیکس (UNIX) را در این بخش خواهیم داشت.
در این بخش، در مورد کنترل حلقه شل در یونیکس بحث خواهیم کرد. تاکنون به ایجاد حلقه ها و کار با حلقه ها برای انجام کارهای مختلف آشنا شده ایم. گاهی اوقات شما نیاز دارید که یک حلقه را متوقف کنید یا از تکرار حلقه پرش کنید.
در این بخش ، دو عبارت زیر را می آموزیم که برای کنترل حلقه های شل استفاده می شوند
تمام حلقه ها عمر محدودی دارند و بسته به حلقه، که یک شرط نادرست یا درست باشد، می توان از حلقه بیرون آمد.
اگر شرط مورد نیاز یک حلقه برآورده نشود ، ممکن است آن حلقه برای همیشه ادامه یابد، حلقه ای که بدون این که خاتمه یابد، برای تعداد دفعات نامحدود و یا برای همیشه اجرا می شود. به همین دلیل به چنین حلقه هایی حلقه های نامحدود یا بی نهایت گفته می شود.
در این جا یک مثال ساده وجود دارد که از حلقه while برای نمایش اعداد صفر تا نه استفاده می کند.
1 2 3 4 5 6 7 8 9 | #!/bin/sh a=10 until [ $a -lt 10 ] do echo $a a=`expr $a + 1` done |
این حلقه برای همیشه ادامه می یابد زیرا a همیشه بزرگ تر یا برابر با ۱۰ است و هیچگاه از ۱۰ کم تر نیست.
عبارت break برای خاتمه اجرای کل حلقه ، پس از اتمام اجرای کلیه خطوط کد تا بیانیه break استفاده می شود. سپس پس از پایان حلقه به کد پایین می رود.
عبارت break زیر برای بیرون آمدن از حلقه استفاده می شود.
1 | break |
فرمان break همچنین می تواند برای خارج شدن از یک حلقه تو در تو با استفاده از این قالب استفاده شود.
1 | break n |
در این جا n حلقه ی n ام را برای خروج از، مشخص می کند.
در این جا مثالی ساده وجود دارد که نشان می دهد حلقه به محض ۵ شدن، خاتمه می یابد.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/bin/sh a=0 while [ $a -lt 10 ] do echo $a if [ $a -eq 5 ] then break fi a=`expr $a + 1` done |
پس از اعلام ، نتیجه زیر را دریافت خواهید کرد.
1 2 3 4 5 6 | 0 1 2 3 4 5 |
در این جا مثال ساده ای از حلقه تو در تو در تو آمده است. به نتیجه ی کدهای زیر در صورتی که var1 برابر ۲ و var2 برابر ۰ باشد ، توجه نمایید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Live Demo #!/bin/sh for var1 in 1 2 3 do for var2 in 0 5 do if [ $var1 -eq 2 -a $var2 -eq 0 ] then break 2 else echo "$var1 $var2" fi done done |
پس از اجرا، نتیجه زیر را دریافت خواهید کرد. در حلقه داخلی ، یک دستور break با آرگومان ۲ دارید. این نشان می دهد که اگر یک شرط برآورده شود ، باید از حلقه بیرونی و در نهایت از حلقه داخلی نیز خارج شوید.
1 2 | 1 0 1 5 |
عبارت continue شبیه به دستور break است ، مستثنی از این که باعث خروج تکرار فعلی حلقه به جای کل حلقه می شود.
این عبارت هنگامی که خطایی (error) روی داده است مفید است اما می توانید تکرار بعدی حلقه را اجرا کنید.
1 | continue |
مانند جمله break ، یک آرگومان integer می تواند به دستور continue داده شود تا دستورات از حلقه های تو در تو پرش کنند.
1 | continue n |
در این جا n، حلقه محصور n ام را برای ادامه مشخص می کند.
حلقه زیر از عبارت continue استفاده می کند که از continue باز می گردد و پردازش بیانیه بعدی را شروع می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Live Demo #!/bin/sh NUMS="1 2 3 4 5 6 7" for NUM in $NUMS do Q=`expr $NUM % 2` if [ $Q -eq 0 ] then echo "Number is an even number!!" continue fi echo "Found odd number" done |
پس از اجرا ، نتیجه زیر را دریافت خواهید کرد.
1 2 3 4 5 6 7 | Found odd number Number is an even number!! Found odd number Number is an even number!! Found odd number Number is an even number!! Found odd number |
بررسی کنترل حلقه Shell در یونیکس (UNIX) را دنبال نمودیم. در جلسه ی آینده به بررسی Shell Substitution در یونیکس می پردازیم. با وب سایت آموزشی پی وی لرن همراه باشید.