در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش لینوکس : مدیریت سیستم : قسمت 8 : Loops

سلام و وقت بخیر. در این جلسه در مورد حلقه ها در bash صحبت میکنیم. حلقه ها در برنامه نویسی بسیار پرکاربرد هستند. انواع مختلفی از حلقه ها در bash وجود دارد.

1- حلقه for

2- حلقه until

3- حلقه while

قبل از اینکه وارد مبحث حلقه ها بشیم به نکته کوچیک بگم. توی چند قسمت گذشته توی مثال ها دیدید که بعضی وقت ها خروجی یک دستور رو میریختیم توی یه متغیر. این کار به 2 صورت انجام میشه.

راه اول: گذاشتن دستور داخل back quotation و برابر یک مقدار قرار دادن. مثلا خروجی دستور ls را درون متغیر var ریختیم

[root@CentOS6 boot]# var=`ls`
[root@CentOS6 boot]# echo $var
config-2.6.32-279.el6.i686 efi elf-memtest86+-4.10 grub initramfs-2.6.32-279.el6.i686.img lost+found memtest86+-4.10 symvers-2.6.32-279.el6.i686.gz System.map-2.6.32-279.el6.i686 vmlinuz-2.6.32-279.el6.i686
[root@CentOS6 boot]# ls
config-2.6.32-279.el6.i686  grub                               memtest86+-4.10                 vmlinuz-2.6.32-279.el6.i686
efi                         initramfs-2.6.32-279.el6.i686.img  symvers-2.6.32-279.el6.i686.gz
elf-memtest86+-4.10         lost+found                         System.map-2.6.32-279.el6.i686
[root@CentOS6 boot]# 

راه دوم : دستور را داخل ()$ گذاشتن و برابر یک متغیر قرار دادن:

[root@CentOS6 boot]# var=$(ls)
[root@CentOS6 boot]# echo $var
config-2.6.32-279.el6.i686 efi elf-memtest86+-4.10 grub initramfs-2.6.32-279.el6.i686.img lost+found memtest86+-4.10 symvers-2.6.32-279.el6.i686.gz System.map-2.6.32-279.el6.i686 vmlinuz-2.6.32-279.el6.i686
[root@CentOS6 boot]# ls
config-2.6.32-279.el6.i686  grub                               memtest86+-4.10                 vmlinuz-2.6.32-279.el6.i686
efi                         initramfs-2.6.32-279.el6.i686.img  symvers-2.6.32-279.el6.i686.gz
elf-memtest86+-4.10         lost+found                         System.map-2.6.32-279.el6.i686
[root@CentOS6 boot]# 

برگردیم سر حلقه ها. از حلقه for که قبلا هم در مثال ها استفاده کردیم. کد ساده زیر رو ببینید. برای نوشتن برنامه حتما لازم نیست توی یه فایل متنی نوشته بشن. توی خود ترمینال هم میتونید دستورات رو وارد کنید.

[root@CentOS6 ~]# for i in `seq 10`
> do
> echo $i
> sleep 1
> done
1
2
3
4
5
6
7
8
9
10
[root@CentOS6 ~]# 

دستور seq تا عدد مقابل آن میشمارد. در اینجا هر بار که دستور seq یک عدد تولید میکند، مقدار i برابر این مقدار میشود. دستورات حلقه for درون do و done نوشته میشود. دقت داشته باشید که seq 10 رو داخل back quotation نوشتم. بزارید یه مثال ساده دیگه هم ببینیم.

[root@CentOS6 /]# for i in $(ls)
> do
> echo -e "item: $i \n"
> done
item: bin 
item: boot 
item: dev 
item: etc 
item: file1 
item: file2 
item: home 
item: lib 
item: lost+found 
item: media 
item: misc 
item: mnt 
item: net 
item: opt 
item: proc 
item: root 
item: sbin 
item: selinux 
item: srv 
item: sys 
item: tmp 
item: usr 
item: var 
[root@CentOS6 /]#

حالا بریم سراغ حلقه while. مثال ساده زیر را ببینید. تا زمانی که شرط حلقه while برقرار باشد، دستورات داخل آن اجرا میشوند.

[root@CentOS6 /]# count=0
[root@CentOS6 /]# while [ $count -lt 10 ]
> do
> echo count is $count
> let count=count+1
> done
count is 0
count is 1
count is 2
count is 3
count is 4
count is 5
count is 6
count is 7
count is 8
count is 9
[root@CentOS6 /]# 

واسه اینکه یکم ذهنتون درگیر بشه برید سرچ کنید که چرا وقتی دستور for یا while رو میزنیم شکل prompt میشه < و اسم این حالتی که فعال میشه چیه و آیا میشه تغییرش داد یا نه. سر کاری نیستا !!!! :)))) شاید اینجوری یکی یه کامنتی بزاره زیر پستا !!!

دستور until هم بصورت زیره، فقط دقت داشته باشید که شرطی که به until میدهیم ، شرط اتمام حلقه است.

[root@CentOS6 /]# counter=1
[root@CentOS6 /]# until [ $counter -gt 10 ]
> do
> echo $counter
> ((counter++))
> done
1
2
3
4
5
6
7
8
9
10
[root@CentOS6 /]# 

حالا یه مدل دیگه هم for داریم که مث for توی خانواده c میمونه:

[root@CentOS6 /]# for ((i=0;i<10;i+=1))
> do
> echo $i
> done
0
1
2
3
4
5
6
7
8
9
[root@CentOS6 /]# 

اینم ببینید جالبه. یعنی از 0 شروع کن و تا 25 برو. قدم هاتم 5 تایی باشه

[root@CentOS6 /]# for i in {0..25..5}
> do
>     echo $i
> done
0
5
10
15
20
25
[root@CentOS6 /]# 

مثال یکم سخت تر: برنامه ای ینویسید که یک عدد از کاربر بگیرد و به همان تعداد عدد اول چاپ کند.

#!/bin/bash

read -p "How many prime numbers ?: " num

c=0
k=0
n=2

echo 1
numero=$[$num-1]

while [ $k -ne $num ]; do
     for i in `seq 1 $n`;do
        r=$[$n%$i]
                if [ $r -eq 0 ]; then
                        c=$[$c+1]
                fi
     done

      if [ $c -eq 2 ]; then
              echo "$i"
              k=$[$k+1]
        fi
        n=$[$n+1]
        c=0
done
[root@CentOS6 ~]# ./prime.sh
How many prime numbers ?: 3
1
2
3
5
[root@CentOS6 ~]# ./prime.sh
How many prime numbers ?: 5
1
2
3
5
7
11
[root@CentOS6 ~]# ./prime.sh
How many prime numbers ?: 15
1
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
[root@CentOS6 ~]# 

پایان قسمت پنجم (آخر) از بخش دوم

نویسنده : سید محمد باقر موسوی

منبع : جزیره لینوکس و سیستم های متن باز وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است

#دوره_آموزشی_linux_فارسی #نوشتن_shell_script_در_لینوکس #آموزش_لینوکس_فارسی #آموزش_linux_مقدماتی #آموزش_shell_scripting #آموزش_دستورات_مقدماتی_لینوکس #حلقه_ها_در_برنامه_نویسی #آموزش_shell_scripting_در_لینوکس #دوره_آموزشی_shell_scripting_در_لینوکس #نوشتن_یک_shell_script_ساده
عنوان
1 آموزش لینوکس : مدیریت سیستم : قسمت 1 : Shell سفارشی : متغیرها رایگان
2 آموزش لینوکس : مدیریت سیستم قسمت 2 : Shell سفارشی : تنظیمات Shell رایگان
3 آموزش لینوکس : مدیریت سیستم : قسمت 3 : Shell سفارشی : Aliases رایگان
4 آموزش لینوکس : مدیریت سیستم : قسمت 4: Shell سفارشی: Login Scripts رایگان
5 آموزش لینوکس : مدیریت سیستم : قسمت 5 : ایجاد اسکریپت رایگان
6 آموزش لینوکس : مدیریت سیستم : قسمت 5 : Read User Input رایگان
7 آموزش لینوکس : مدیریت سیستم : قسمت 6 : IF Statement رایگان
8 آموزش لینوکس : مدیریت سیستم : قسمت 7 : Case Statement رایگان
9 آموزش لینوکس : مدیریت سیستم : قسمت 8 : Loops رایگان
10 آموزش لینوکس : مدیریت سیستم : قسمت 9 : Managing Users رایگان
11 آموزش لینوکس : مدیریت سیستم : قسمت 10 : Managing Groups رایگان
12 آموزش لینوکس : مدیریت سیستم : قسمت 11 : ارتباط با اکتیودایرکتوری رایگان
13 آموزش لینوکس : مدیریت سیستم : قسمت 12 : OpenLDAP رایگان
14 آموزش لینوکس : مدیریت سیستم : قسمت 13 : Cron AnaCron و Batch رایگان
15 آموزش لینوکس : مدیریت سیستم : قسمت 14 : آشنایی با IPTables رایگان
زمان و قیمت کل 0″ 0
1 نظر
مصطفی چگنی

اقا سید شما خیلی کارت درسته داداش به خدا فدایی داری مرسی که داری مینویسی و ادامه میدی عزیز مایی بدون خیلی فدایی داری

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....