وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

Bash For Loop

0 3
زمان لازم برای مطالعه: 5 دقیقه



حلقه ها یکی از مفاهیم اساسی زبان های برنامه نویسی هستند. آنها زمانی مفید هستند که می خواهید یک سری دستورات را به طور مکرر اجرا کنید تا زمانی که به یک شرایط خاص برسید.

در زبان‌های اسکریپت‌نویسی مانند 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 قسمت به روز می شود

پیشنهاد می‌کنیم بخوانید:  HPE SPP Version 2019.03.0

در کد مثال زیر، حلقه با مقداردهی اولیه شروع می شود 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 بیانیه از تکرار جاری یک حلقه خارج می شود و کنترل برنامه را به تکرار بعدی حلقه می دهد.

پیشنهاد می‌کنیم بخوانید:  روش نصب Ruby بر روی CentOS 7

در مثال زیر، ما در حال تکرار از طریق طیف وسیعی از اعداد هستیم. وقتی آیتم تکرار شده فعلی برابر با ‘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 حلقه برای اجرای مکرر مجموعه ای از دستورات و برای تعداد ثابتی بارها استفاده می شود.

اگر سوال یا بازخوردی دارید، در کامنت بگذارید.

bash

حلقه
terminal

برای نگارش بخشهایی از این متن ممکن است از ترجمه ماشینی یا هوش مصنوعی GPT استفاده شده باشد
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم

زمان انتشار: 1403-04-15 14:40:04

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید