از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
Bash For Loop
سرفصلهای مطلب
حلقه ها یکی از مفاهیم اساسی زبان های برنامه نویسی هستند. آنها زمانی مفید هستند که می خواهید یک سری دستورات را به طور مکرر اجرا کنید تا زمانی که به یک شرایط خاص برسید.
در زبانهای اسکریپتنویسی مانند Bash، حلقهها برای خودکارسازی کارهای تکراری مفید هستند و نیازی به نوشتن مکرر کد مشابه را از بین میبرند.
سه ساختار اصلی حلقه در اسکریپت نویسی Bash وجود دارد: for
حلقه، while
حلقه، و until
حلقه .
در این مقاله به اصول اولیه آن می پردازیم for
در Bash حلقه می زند و روش استفاده از آن را به شما نشان می دهد break
و continue
عباراتی برای تغییر جریان یک حلقه
استاندارد Bash for
حلقه
را for
حلقه روی لیستی از آیتم ها تکرار می شود و مجموعه دستورات داده شده را انجام می دهد.
باش for
حلقه به شکل زیر است:
for item in [LIST]
do
[COMMANDS]
done
لیست می تواند مجموعه ای از رشته ها باشد که با فاصله، محدوده ای از اعداد، خروجی یک دستور، آرایه، آرگومان های ارسال شده از خط فرمان و غیره از هم جدا شده اند. روی.
روی رشته ها حلقه بزنید
مثال زیر یک حلقه را نشان می دهد که روی لیستی از رشته ها تکرار می شود. حلقه عمل می کند روی هر آیتم در لیست و متغیر element
موردی را که حلقه در حال حاضر در حال کار است ذخیره می کند روی.
for element in Hydrogen Helium Lithium Beryllium
do
echo "Element: $element"
done
حلقه خروجی زیر را تولید می کند:
Element: Hydrogen
Element: Helium
Element: Lithium
Element: Beryllium
حلقه روی یک محدوده
می توانید از عبارت sequence برای تعیین محدوده ای از اعداد یا کاراکترها با تعریف نقطه شروع و پایان محدوده استفاده کنید. عبارت توالی به شکل زیر است:
{START..END}
در اینجا یک حلقه مثال است که در تمام اعداد از 0 تا 3 تکرار می شود:
for i in {0..3}
do
echo "Number: $i"
done
Number: 0
Number: 1
Number: 2
Number: 3
با شروع از Bash 4، می توان در هنگام استفاده از محدوده ها، یک افزایش نیز تعیین کرد. عبارت به شکل زیر است:
{START..END..INCREMENT}
در اینجا مثالی وجود دارد که روش افزایش 5 را نشان می دهد:
for i in {0..20..5}
do
echo "Number: $i"
done
Number: 0
Number: 5
Number: 10
Number: 15
Number: 20
حلقه روی عناصر آرایه
شما همچنین می توانید استفاده کنید for
حلقه برای تکرار روی آرایه ای از عناصر.
در مثال زیر آرایه ای به نام تعریف می کنیم BOOKS
و روی هر عنصر آرایه تکرار کنید.
BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby')
for book in "${BOOKS[@]}"; do
echo "Book: $book"
done
Book: In Search of Lost Time
Book: Don Quixote
Book: Ulysses
Book: The Great Gatsby
حلقه Bash به سبک C
نحو از سبک C for
حلقه به شکل زیر است:
for ((INITIALIZATION; TEST; STEP))
do
[COMMANDS]
done
را INITIALIZATION
زمانی که حلقه شروع می شود، قسمت فقط یک بار اجرا می شود. سپس TEST
بخشی مورد ارزیابی قرار می گیرد. اگر نادرست باشد، حلقه خاتمه می یابد. اگر TEST
درست است، دستورات داخل بدنه for
حلقه اجرا می شوند و STEP
قسمت به روز می شود
در کد مثال زیر، حلقه با مقداردهی اولیه شروع می شود i = 0
و قبل از هر تکرار، بررسی کنید که آیا i ≤ 10
. اگر درست باشد، مقدار فعلی را چاپ می کند i
و [increments the variable] i
توسط 1 (i++
). در غیر این صورت، حلقه خاتمه می یابد.
for ((i = 0 ; i <= 1000 ; i++)); do
echo "Counter: $i"
done
حلقه 1001 بار تکرار می شود و خروجی زیر را تولید می کند:
Counter: 0
Counter: 1
Counter: 2
...
Counter: 998
Counter: 999
Counter: 1000
حلقه های تودرتو
یک حلقه تو در تو حلقه ای در داخل یک حلقه دیگر است. شما می توانید هر حلقه ای را برای هر تعداد بار لانه کنید.
در یک حلقه for تو در تو، حلقه داخلی یک چرخه کامل از تکرارهای خود را برای هر تکرار حلقه بیرونی اجرا می کند. این بدان معنی است که برای هر اجرای حلقه خارجی، حلقه داخلی تمام تکرارهای خود را تا زمانی که حلقه بیرونی چرخه خود را کامل کند اجرا می کند.
در اینجا یک کد نمونه وجود دارد که سه فایل را یک به یک تا سه سرور کپی می کند.
for f in file_{1..3}; do
for j in server_{1..3}; do
echo "Copying file $f to server $j";
# command to copy files
done;
done
Copying file file_1 to server server_1
Copying file file_1 to server server_2
Copying file file_1 to server server_3
Copying file file_2 to server server_1
Copying file file_2 to server server_2
Copying file file_2 to server server_3
Copying file file_3 to server server_1
Copying file file_3 to server server_2
Copying file file_3 to server server_3
break
و continue
بیانیه
را break
و continue
عبارات را می توان برای کنترل استفاده کرد for
اجرای حلقه
break
بیانیه
را break
بیانیه حلقه جاری را خاتمه می دهد و کنترل برنامه را به عبارتی که بعد از عبارت پایان یافته می آید منتقل می کند. معمولاً برای خاتمه دادن به حلقه زمانی که یک شرط خاص برآورده می شود استفاده می شود.
در مثال زیر از if
بیانیه ای برای پایان دادن به اجرای حلقه زمانی که آیتم تکرار شده فعلی برابر با “لیتیوم” باشد.
for element in Hydrogen Helium Lithium Beryllium; do
if [[ "$element" == 'Lithium' ]]; then
break
fi
echo "Element: $element"
done
echo 'All Done!'
Element: Hydrogen
Element: Helium
All Done!
continue
بیانیه
را continue
بیانیه از تکرار جاری یک حلقه خارج می شود و کنترل برنامه را به تکرار بعدی حلقه می دهد.
در مثال زیر، ما در حال تکرار از طریق طیف وسیعی از اعداد هستیم. وقتی آیتم تکرار شده فعلی برابر با ‘2’ باشد، مقدار continue
دستور باعث می شود که اجرا به ابتدای حلقه بازگردد و با تکرار بعدی ادامه یابد:
for i in {1..5}; do
if [[ "$i" == '2' ]]; then
continue
fi
echo "Number: $i"
done
Number: 1
Number: 3
Number: 4
Number: 5
ضربه شدید for
نمونه های حلقه
تغییر نام فایل ها با فاصله در نام فایل
مثال زیر نشان می دهد که چگونه می توان نام همه فایل های دایرکتوری فعلی را با یک فاصله در نام آن با جایگزین کردن فاصله ها به زیرخط تغییر نام داد:
for file in *\ *; do
mv "$file" "${file// /_}"
done
بیایید کد را خط به خط تجزیه کنیم:
- خط اول یک را ایجاد می کند
for
حلقه و از طریق لیستی از همه فایل ها با یک فاصله در نام آن تکرار می شود. بیان*\ *
لیست را ایجاد می کند. - خط دوم برای هر یک از آیتم های لیست اعمال می شود و فایل را به یک مورد جدید منتقل می کند و فاصله را با یک زیرخط جایگزین می کند (
_
). بخش${file// /_}
در حال استفاده از بسط پارامتر پوسته
برای جایگزینی یک الگوی درون یک پارامتر با یک رشته. done
پایان بخش حلقه را نشان می دهد.
تغییر پسوند فایل
مثال زیر روش استفاده از Bash را نشان می دهد for
حلقه برای تغییر نام تمام فایل هایی که با .jpeg ختم می شوند در فهرست فعلی با جایگزین کردن پسوند فایل از .jpeg به .jpg.
for file in *.jpeg; do
mv -- "$file" "${file%.jpeg}.jpg"
done
بیایید کد را خط به خط تجزیه و تحلیل کنیم:
- خط اول یک را ایجاد می کند
for
حلقه بزنید و از طریق فهرستی از تمام فایلهایی که با «.jpeg» ختم میشوند، تکرار میشود. - خط دوم برای هر مورد از لیست اعمال می شود و فایل را به یک مورد جدید منتقل می کند و به جای «jpeg.» با «.jpg».
${file%.jpeg}
برای حذف قسمت ‘.jpeg’ از نام فایل با استفاده از بسط پارامتر پوسته done
پایان بخش حلقه را نشان می دهد.
نتیجه
باش for
حلقه برای اجرای مکرر مجموعه ای از دستورات و برای تعداد ثابتی بارها استفاده می شود.
اگر سوال یا بازخوردی دارید، در کامنت بگذارید.
حلقه
terminal
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1403-04-15 14:40:04