حلقهی for در زبان بش(Bash) به 2 صورت استفاده میشود.صورت اول آن برای زمانیست که میخواهیم یک کار را جند بار(مثلا 10 بار) تکرار کنیم. صورت دوم آن برای زمانیست که میخواهیم یک مجموعه را پیمایش کنیم.در این مطلب هر دو صورت این حلقه را آموزش میدهم.
صورت اول:
شکل اول حلقه for معمولا زمانی استفاده میشود که میخواهیم یک یا چند کار را چندین بار تکرار بکنیم.برای مثال میخواهیم 10 فایل جدید ایجاد کنیم.الگوی ان به این صورت است:
for (( expr1; expr2; expr3 )); do something; done
معمولا expr1 یک عبارت است که متغیری را ایجاد میکند و به آن مقداری میدهد. expr2 هم شرط حلقه است و حلقه تا زمان درست بودن آن شرط به کار خود ادامه میدهد. expr3 هم کاریست که در هر دور حلقه آنرا انجام میدهد و معمولا افزایش متغیر حلقه است.
مثال زیر اعداد ۱ تا ۱۰ را چاپ میکند:
for (( i=1; i<=10; i++ )); do
echo $i
done
عبارت اول حلقه یعنی i=1 مقدار و نام متغیر حلقه را مشخص میکند(در اینجا به ترتیب 1 و i). عبارت دوم نیز شرط حلقه است.اینجا حلقه تا زمانی که i یعنی متغیر حلقه کوچکتر یا مساوی ۱۰ باشد، حلقه دستورات داده شده را اجرا میکند.عبارت سوم نیز مقدار i را در هر بار اجرای حلقه یک واحد افزایش میدهد.
نکته: در بش خط جدید معادل سمی کالن عمل میکند برای همین نیازی به گذاشتن ; بعد از echo نیست.
خروجی دستورات بالا:
1
2
3
4
5
6
7
8
9
10
صورت دوم:
صورت دوم حلقه همانطور که گفته شد یک لیست(مجموعه یا آرایه) را پیمایش میکند. به تعداد عناصر در لیست این حلقه دستورات داده شده را اجرا میکند و هر بار متغیر حلقه برابر است با عنصر فعلی در لیست.الگوی آن به این صورت است:
for var in list; do something; done
var نام متغیر حلقه است و list نیز مجموعه ای از عناصر است.
برای مثال من یک پوشه به نام test دارم که شامل فایل زیر است:
19661 22114 22732 23179 26586 28571 29613 30288 3264 692
میخواهم محتویات تمام آنها را با استفاده از دستور for ببینم.به این صورت عمل میکنم:
for in $(ls); do cat $i; done
خروجی:
6343
24075
6023
26877
2352
24302
20303
25253
19278
23220
نکته: راه های بهتری هم برای مشاهده محتویات تمام فایل ها در یک پوشه وجود دارد :)