از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
30 مثال حلقه Bash
سرفصلهای مطلب
از سه نوع حلقه استفاده می شود bash برای اهداف مختلف اینها حلقه های for، while و while هستند. کاربردهای مختلف این حلقه ها با استفاده از 30 مثال مختلف در این مقاله توضیح داده شده است.
موارد استفاده از حلقه های Bash:
- استفاده از حلقه for برای خواندن موارد موجود در لیست
- استفاده از حلقه for برای خواندن آرایه
- استفاده از حلقه for برای خواندن لیستی از مقادیر رشته با فاصله
- استفاده از حلقه for در محدوده {START..END..INCREMENT}
- استفاده از حلقه for در محدوده {START..END..INCREMENT} به سمت عقب
- استفاده از حلقه for با 3 قسمت و شمارنده شرط
- استفاده از حلقه for با 3 قسمت و چند شرط و اکشن با کاما
- استفاده از حلقه Infinite for
- استفاده از حلقه for با استراحت شرطی و ادامه دادن
- استفاده از حلقه for برای خواندن نام فایل ها با globbing
- استفاده از حلقه for برای خواندن خروجی از دستور find
- استفاده از حلقه for برای خواندن نام فایل یک دایرکتوری به صورت بازگشتی
- استفاده از حلقه for برای خواندن نام فایل های دایرکتوری به صورت بازگشتی با شرط
- اجرای حلقه تا زمانی که فایل وجود داشته باشد
- استفاده از حلقه مبتنی بر روی خروجی فرمان لیست بسته
- استفاده از حلقه for برای خواندن هر خط از یک فایل
- استفاده از حلقه for برای خواندن هر خط از یک فایل بر اساس روی یک مسابقه مشروط
- استفاده از حلقه while با شمارنده
- استفاده از حلقه while با ورودی کاربر و خروج هنگام انتخاب خروج از منو
- ترکیب حلقههای while با getopts
- با استفاده از تا حلقه با شمارنده
- تا زمانی که بر اساس حلقه باشد خاتمه دهید روی ورودی کاربر
- استفاده از حلقه های Nested while
- استفاده از تا حلقه برای خواب/انتظار برای کار پسزمینه شروع شده در اسکریپت
- استفاده از حلقه while برای خواندن pid از خروجی ps که خاتمه نیافته است
- جستجوی هر رشته در یک فایل با استفاده از حلقه و خروج
- ترکیب کردن bash با curl برای ارزیابی داده ها از URL
- خواندن اطلاعات از پورت ارسال شده توسط netcat با استفاده از حلقه while
- پینگ URL با استفاده از حلقه
- اجرای بالا در حالت دسته ای با استفاده از یک حلقه و خروجی ضبط
استفاده از حلقه for برای خواندن موارد موجود در لیست
ساده ترین استفاده از ‘برای’ حلقه خواندن لیستی از رشته یا داده های عددی است. لیست داده های عددی با استفاده از آن تکرار می شود برای در در مثال زیر حلقه بزنید. در اینجا، چهار عدد در متغیر خوانده می شود، $n در هر مرحله از حلقه و چاپ شده است. ایجاد یک bash با اسکریپت زیر فایل کنید و از terminal.
# حلقه for-in برای خواندن لیستی از اعداد
برای n که در 10 11 17 25
انجام دادن
# هر عدد را چاپ کنید
echo “شماره است $n“
انجام شده
خروجی:
اسکریپت را اجرا کنید.
پس از اجرای اسکریپت خروجی زیر ظاهر می شود.
استفاده از حلقه for برای خواندن آرایه
هر متغیر آرایه ای حاوی لیستی از داده ها است که با استفاده از آنها می توان به راحتی تکرار کرد برای در حلقه مثال زیر استفاده از برای در حلقه برای خواندن آرایه ای از داده های رشته ای. در اینجا، هر مقدار آرایه در متغیر واکشی می شود، زبان $ و print یک پیام مبتنی بر روی زبان در هر تکرار
زبان ها=(“Bash PERL Python PHP”)
برای زبان که در $ زبان ها
انجام دادن
اگر [ $language == ‘PHP’ ]
سپس
echo “زبان $ یک زبان برنامه نویسی وب است”
دیگر
echo “زبان $ یک زبان اسکریپت است”
فی
انجام شده
خروجی:
اسکریپت را اجرا کنید.
پس از اجرای اسکریپت خروجی زیر ظاهر می شود.
استفاده از حلقه for برای خواندن لیستی از مقادیر رشته با فاصله
وقتی لیستی از یک رشته توسط برای در حلقه و هر مقدار رشته حاوی فاصله است و سپس مقادیر بر اساس کلمات تقسیم می شوند روی اگر مقدار رشته با نقل قول تکی یا دوگانه نقل قول نشده باشد فاصله. مثال زیر نشان می دهد که چگونه می توان لیستی از مقادیر رشته با فاصله را خواند برای در حلقه در اینجا، یک مقدار از لیست حاوی فاصله است و با فاصله در خروجی چاپ می شود.
حلقه #for-in برای خواندن لیست رشته ها با فاصله
برای سیستم عامل که در “اوبونتو” “لینوکس مینت” “فدورا” “CentOS”
انجام دادن
#هر رشته را چاپ کنید
echo “سیستم عامل – $os“
انجام شده
خروجی:
اسکریپت را اجرا کنید.
در اینجا، مقدار رشته، ‘لینوکس مینت‘ به درستی چاپ شده است.
استفاده از حلقه for در محدوده {START..END..INCREMENT}
استفاده دیگر از برای در حلقه برای خواندن آرایه محدوده است. در مثال زیر، از یک حلقه for برای خواندن محدوده ای از داده ها از 10 تا 30 استفاده می شود که در هر مرحله 5 عدد افزایش می یابد. بعد، اسکریپت خواهد شد print اعدادی در محدوده که بر 10 بخش پذیرند.
# یک محدوده را با استفاده از حلقه for بخوانید
برای تعداد که در {10..30..5}
انجام دادن
# بررسی کنید عدد بر 10 بخش پذیر است یا خیر
اگر (( تعداد $%10==0 ))
سپس
echo “تعداد $ بر 10 بخش پذیر است
فی
انجام شده
خروجی:
اسکریپت را اجرا کنید.
پس از اجرای اسکریپت خروجی زیر ظاهر می شود.
استفاده از حلقه for در محدوده {START..END..INCREMENT} به سمت عقب
محدوده داده ها را می توان با استفاده به عقب خواند برای در حلقه ای که در آن مقدار شروع محدوده از مقدار پایانی محدوده بیشتر است. در مثال زیر، محدوده از 50 شروع می شود و به 30 ختم می شود تعداد $ در هر مرحله از حلقه 10 عدد کاهش می یابد. فیلمنامه خواهد شد print اعدادی از محدوده که بر 5 و 10 بخش پذیرند.
echo “اعداد زیر بر 5 و 10 بخش پذیر هستند”
# یک محدوده را با استفاده از حلقه for بخوانید
برای تعداد که در {50..30..10}
انجام دادن
# بررسی کنید عدد بر 5 و 10 بخش پذیر است یا خیر
اگر (( تعداد $%5==0 && تعداد $%10==0 ))
سپس
echo -n “تعداد $ “
فی
انجام شده
echo “انجام شده”
خروجی:
اسکریپت را اجرا کنید.
پس از اجرای اسکریپت خروجی زیر ظاهر می شود.
استفاده از حلقه for با 3 قسمت و شمارنده شرط
Bash از حلقه با سه قسمت مانند سایر زبان های برنامه نویسی استاندارد پشتیبانی می کند. قسمت اول شامل مقداردهی اولیه، قسمت دوم شامل شرط پایان و قسمت سوم شامل عملیات افزایش یا کاهش است. این حلقه عمدتاً زمانی استفاده می شود که تعداد تکرار قبلاً تعریف شده باشد. در مثال زیر، حلقه for 50 بار تکرار می شود و مجموع 1 تا 50 را محاسبه می کند. print به عنوان خروجی
# متغیر را مقدار دهی اولیه کنید
مجموع=0
# حلقه 50 بار تکرار می شود
برای (( n=1; n<=50; n++ ))
انجام دادن
# مقدار مجموع را با مقدار بعدی n اضافه کنید
((مجموع=$ مجموع+$n))
انجام شده
# نتیجه را چاپ کنید
echo «مجموع 1 تا 50 است $ مجموع“
خروجی:
اسکریپت را اجرا کنید.
مجموع 1 تا 50 در خروجی نشان داده شده است.
استفاده از حلقه for با 3 قسمت و چند شرط و اکشن با کاما
برای حلقه با سه قسمت را می توان با مقداردهی اولیه، شرایط پایان و اقدامات تعریف کرد. مثال زیر کاربرد این نوع حلقه را نشان می دهد. اینجا، x $ و $y متغیرها توسط مقداردهی اولیه می شوند 5 و 25. حلقه تا مقدار ادامه خواهد یافت x $ کمتر یا مساوی است 20 و ارزش $y بزرگتر از 5 است. مقدار x $ افزایش خواهد یافت 5 و ارزش $y کاهش خواهد یافت 5 در هر تکرار حلقه مقدار فعلی $x و $y در هر مرحله خواهد بود print به عنوان خروجی
# حلقه بر اساس تکرار خواهد شد روی دو شرط
برای (( ایکس=5،y=25; ایکس<=20 && y>5; x+=5,y-=5 ))
انجام دادن
echo “مقدار فعلی x=x $ و y=$y“
انجام شده
خروجی:
اسکریپت را اجرا کنید.
پس از اجرای اسکریپت خروجی زیر ظاهر می شود.
استفاده از حلقه Infinite for
وقتی هر حلقه ای بدون هیچ شرط پایانی تعریف می شود، حلقه به عنوان یک حلقه بی نهایت عمل می کند. مثال زیر استفاده از حلقه for infinite را نشان می دهد که شامل هیچ بخش اولیه، پایان و عمل نیست. این نوع حلقه for با دو نقطه ویرگول (; 😉 تعریف می شود. اسکریپت زیر حلقه را تا زمانی که کاربر به عنوان ورودی تایپ کند، ادامه خواهد داد. فیلمنامه خواهد شد print هر عددی از 1 تا 20 که به عنوان ورودی در نظر گرفته شود در غیر این صورت خواهد بود print “شماره خارج از محدوده است”
# حلقه بی نهایت را اعلام کنید
برای (( ; ; ))
انجام دادن
# ورودی بگیرید
echo “عددی بین 1 تا 20 وارد کنید”
خواندن n
# شرایط پایان حلقه را تنظیم کنید
اگر [ $n == “quit” ]
سپس
echo “برنامه خاتمه یافت”
خروج 0
فی
# محدوده اعداد را بررسی کنید
اگر (( $n < 1 || $n > 20 ))
سپس
echo “تعداد خارج از محدوده است”
دیگر
echo “شماره است $n“
فی
انجام شده
خروجی:
اسکریپت را اجرا کنید.
اینجا، 6 به عنوان ورودی اول گرفته می شود که یک عدد معتبر است، 22 به عنوان ورودی دوم که یک عدد نامعتبر است و ترک کردن به عنوان ورودی سومی که اسکریپت را خاتمه داد، در نظر گرفته می شود.
استفاده از حلقه for با استراحت شرطی و ادامه دادن
‘ادامه هید’ دستور برای حذف برخی از بخش ها از حلقه مبتنی بر استفاده می شود روی هر شرطی وزنگ تفریح’ دستور برای پایان دادن به حلقه مبتنی بر استفاده می شود روی هر شرطی مثال زیر کاربرد این عبارات را در یک حلقه for نشان می دهد. در اینجا، حلقه برای خواندن لیستی از داده های رشته استفاده می شود و هر مقدار در لیست در متغیر ذخیره می شود. $ غذا. وقتی مقدار $food ‘Soup’ باشد، بدون چاپ مقدار به حلقه ادامه می دهد. وقتی مقدار $food ‘Pasta’ باشد، حلقه را خاتمه می دهد. وقتی $food حاوی مقداری غیر از «Soup» و «Pasta» باشد، این مقدار خواهد بود print ارزش. بنابراین، فیلمنامه خواهد شد print دو مقدار از لیست به عنوان خروجی.
# یک حلقه با یک لیست اعلام کنید
برای غذا که در سوپ پیتزا برگر رشته فرنگی پاستا
انجام دادن
# شرط را برای ادامه تنظیم کنید
اگر [ $food == ‘Soup’ ]
سپس
ادامه هید
# شرط را برای استراحت تنظیم کنید
elif [ $food == ‘Pasta’ ]
سپس
زنگ تفریح
دیگر
echo “$ غذا مورد علاقه من است”
فی
انجام شده
خروجی:
اسکریپت را اجرا کنید.
در اینجا دو مقدار از لیست حذف شده است. ‘سوپ“برای عبارت ادامه چاپ نشده است و”پاستا‘ برای عبارت break چاپ نمی شود.
استفاده از حلقه for برای خواندن نام فایل ها با globbing
نام فایل ها یا محتوای خاص یک فایل را می توان با استفاده از globbing جستجو کرد. از انواع مختلفی از کاراکترهای عام برای تطبیق هر نام فایل یا جستجوی محتوای موجود در فایل استفاده می کند. همه فایل ها با txt پسوند مکان فعلی با مثال زیر جستجو می شود. هنگامی که اسکریپت را اجرا می کنید، تمام نام فایل های منطبق بدون خط جدید به عنوان خروجی چاپ می شود.
# Loop همه فایلهای متنی را جستجو میکند و هر نام فایل را در $file ذخیره میکند
برای فایل که در “*.txt”;
انجام دادن
# نام فایل را چاپ کنید
echo $file;
انجام شده
خروجی:
اسکریپت را اجرا کنید.
استفاده از حلقه for برای خواندن خروجی از دستور find
‘پیدا کردن’ دستور برای اهداف مختلف در bash. در مثال زیر، دستور ‘find’ برای خواندن همه نام فایل های متنی از مکان فعلی استفاده می شود. اینجا، ‘-نام’ گزینه ای برای استفاده برای جستجوی حساس به حروف کوچک و بزرگ. بنابراین، فیلمنامه خواهد شد print نام فایل های مکان فعلی که دارای ‘.txt’ پسوند با هر نامی اینجا، IFS متغیر برای تعریف استفاده می شود خط جدید به عنوان جداکننده میدان و print ارزش $file در هر خط
# جداکننده فیلد را تنظیم کنید
IFS=$‘\n’;
# فایل های یک دایرکتوری را بخوانید
برای فایل که در $(پیدا کردن -نام “*.txt”); انجام دادن
echo $file
انجام شده
جداکننده فیلد #Uunset
تنظیم نشده IFS;
خروجی:
اسکریپت را اجرا کنید.
پس از اجرای اسکریپت خروجی زیر ظاهر می شود.
استفاده از حلقه for برای خواندن نام فایل یک دایرکتوری به صورت بازگشتی
‘پیدا کردن’ دستور را می توان برای خواندن تمام فایل ها و زیر پوشه های یک دایرکتوری خاص استفاده کرد. مثال زیر استفاده از ‘ را نشان می دهدپیدا کردن’ دستور خواندن همه نام فایل ها و دایرکتوری ها در زیر “mydir’ فهرست راهنما. اینجا، IFS متغیر استفاده می شود print ارزش $filename با ‘خط جدید’ مانند مثال قبلی
# جداکننده فیلد را تنظیم کنید
IFS=$‘\n’;
# فایل های یک دایرکتوری را بخوانید
برای نام فایل که در $(پیدا کردن “mydir”)
انجام دادن
echo “$filename“
انجام شده
# جداکننده فیلد را تنظیم نکنید
تنظیم نشده IFS;
خروجی:
اسکریپت را اجرا کنید.
پس از اجرای اسکریپت خروجی زیر ظاهر می شود.
استفاده از حلقه for برای خواندن نام فایل های دایرکتوری به صورت بازگشتی با شرط
‘برای’ حلقه با ‘پیدا کردن’ می توان از دستور استفاده کرد print som+
نام فایل های خاص یک دایرکتوری مبتنی بر روی هر شرطی ‘پیدا کردن’ دستور با یک شرط در مثال زیر استفاده شده است. این فقط نام فایل های متنی را جستجو می کند mydir فهرست راهنما. اینجا، ‘-inname’ گزینه با استفاده می شود ‘پیدا کردن’ دستور برای جستجوی مورد انگیزه یعنی تمام فایل های دارای پسوند ‘txt’ یا “TXT” مطابقت داده می شود و به عنوان خروجی چاپ می شود. اینجا، IFS متغیر استفاده می شود print ارزش $filename با ‘خط جدید’ مانند مثال قبلی
# جداکننده فیلد را تنظیم کنید
IFS=$‘\n’;
# تمام فایل های متنی یک فهرست را بخوانید
برای نام فایل که در $(پیدا کردن mydir -نام “*.txt”); انجام دادن
echo “$filename“
انجام شده
# جداکننده فیلد را تنظیم نکنید
تنظیم نشده IFS;
خروجی:
دستور زیر را اجرا کنید تا لیست فایل ها و پوشه ها نمایش داده شود mydir فهرست راهنما.
اسکریپت را اجرا کنید.
سه فایل متنی در دایرکتوری وجود دارد که در خروجی نشان داده شده است.
اجرای حلقه تا زمانی که فایل وجود داشته باشد
هر نام فایلی وجود داشته باشد یا نباشد در مثال زیر با استفاده از حلقه for بی نهایت بررسی می شود. در این اسکریپت، در هر تکرار حلقه، یک نام فایل به عنوان ورودی گرفته می شود و آزمایش می کند که نام فایل در مکان فعلی وجود دارد یا خیر. اگر نام فایل وجود داشته باشد، اسکریپت وجود خواهد داشت print “فایل وجود دارد” و حلقه را ادامه دهید در غیر این صورت با چاپ پیام حلقه را خاتمه می دهد.فایل موجود نیست‘.
# حلقه بی نهایت را تعریف کنید
برای(( ; ; ))
انجام دادن
# نام فایل را وارد کنید
echo “نام فایل را وارد کنید”
خواندن فایل
# بررسی کنید فایل وجود دارد یا نه
اگر [ ! -f $file ]
سپس
echo “نام فایل وجود ندارد”
خروج 0
دیگر
echo “فایل وجود دارد”
فی
انجام شده
خروجی:
اسکریپت را اجرا کنید.
یک نام فایل موجود به عنوان ورودی اول و یک نام فایل غیر موجود به عنوان خروجی دوم داده می شود که اسکریپت را خاتمه داده است.
استفاده از حلقه مبتنی بر روی خروجی فرمان لیست بسته
اطلاعات مربوط به بسته های نصب شده در سیستم را می توان با دستور ` بازیابی کردapt list – -installed`. ‘برای’ حلقه در مثال زیر برای خواندن اطلاعات بسته نصب شده از دستور بسته لیست و print اطلاعات هر بسته در هر خط IFS متغیر در اینجا استفاده می شود print ارزش خط $ با ‘خط جدید’ مانند مثال قبلی
IFS=$‘\n’;
# فایل را خط به خط بخوانید
برای خط که در $(apt list –نصب شده است)
انجام دادن
echo “خط $“
انجام شده
# جداکننده فیلد را تنظیم نکنید
تنظیم نشده IFS
خروجی:
اسکریپت را اجرا کنید.
خروجی لیست بسته های نصب شده را نشان می دهد.
استفاده از حلقه for برای خواندن خطوط یک فایل
راه های زیادی برای خواندن یک فایل در آن وجود دارد bash. ‘گربه’ از دستور در مثال زیر برای خواندن فایل استفاده شده است temp.txt. هر خط از فایل در متغیر ذخیره می شود، خط $ و print خط در هر تکرار از برای حلقه IFS متغیر در اینجا استفاده می شود print ارزش خط $ با ‘خط جدید’ مانند مثال قبلی
# جداکننده فیلد را تنظیم کنید
IFS=$‘\n’;
# فایل را خط به خط بخوانید
برای خط که در $(گربه temp.txt)
انجام دادن
echo “خط $“
انجام شده
# جداکننده فیلد را تنظیم نکنید
تنظیم نشده IFS
خروجی:
اسکریپت را اجرا کنید.
استفاده از حلقه for برای خواندن خطوط یک فایل با تطابق شرطی
اگر شما می خواهید print خطوط خاصی از یک فایل تنها پس از آن باید داخل حلقه ای که برای خواندن فایل استفاده می شود اضافه کنید. مثال زیر خروجی فرمت شده هر خط را چاپ می کند ‘weekday.txt’ مبتنی بر فایل روی یک شرط اگر هر خطی از فایل حاوی مقدار باشد، “یکشنبه” سپس آن را انجام خواهد داد print پیام “تعطیلات” در غیر این صورت خواهد بود print ‘روز کاری’ پیام
برای خط که در $(گربه weekday.txt)
انجام دادن
#مقدار را با داده های رشته ای مقایسه کنید
اگر [ $line == “Sunday” ]
سپس
echo “خط $ تعطیلات است”
دیگر
echo “خط $ یک روز کاری است”
فی
انجام شده
خروجی:
اسکریپت را اجرا کنید.
پس از اجرای اسکریپت خروجی زیر ظاهر می شود.
استفاده از حلقه while با شمارنده
شمارنده $ متغیر از هر حلقه ای برای کنترل تکرار حلقه استفاده می شود. مثال زیر استفاده از حلقه while با شمارنده را نشان می دهد. اینجا، شمارنده $ به 1 مقداردهی اولیه می شود و حلقه while تکرار می شود 5 بار و print ارزش شمارنده $ در هر تکرار $counter در هر مرحله 1 افزایش می یابد تا به شرط پایان حلقه برسد.
# مقداردهی اولیه کنید
پیشخوان=1
# حلقه را 5 بار تکرار کنید
در حالی که [ $counter -le 5 ]
انجام دادن
echo “مقدار متقابل = شمارنده $“
((شمارنده ++))
انجام شده
خروجی:
اسکریپت را اجرا کنید.
استفاده از حلقه while با ورودی کاربر و خروج هنگام انتخاب خروج از منو
‘در حالی که’ حلقه در مثال زیر برای نمایش منوی 5 گزینه ای استفاده شده است. چهار گزینه اول برای انجام چهار عملیات حسابی بر اساس استفاده می شود روی ورودی کاربر و آخرین گزینه برای خروج از اسکریپت استفاده می شود. منو پس از ارائه دو عدد به عنوان ورودی ظاهر می شود. اگر کاربر “1” را انتخاب کند، اعداد ورودی اضافه خواهند شد. اگر کاربر “2” را انتخاب کند، عدد ورودی دوم از عدد ورودی اول کم می شود. اگر کاربر «3» را انتخاب کند، اعداد ورودی ضرب میشوند و اگر کاربر «4» را انتخاب کند، اولین عدد ورودی بر عدد ورودی دوم تقسیم میشود.
# دو عدد بگیرید
echo “شماره ای را وارد کنید”
خواندن n1
echo “شماره ای را وارد کنید”
خواندن n2
# یک حلقه بی نهایت را اعلام کنید
در حالی که درست است، واقعی
انجام دادن
# نمایش منو
echo “1. اضافه”
echo “2. تفریق”
echo “3. ضرب”
echo “4. تقسیم”
echo “5. خروج”
echo -n “هر شماره ای را انتخاب کنید [1-5]:”
خواندن ورودی
# عملیات را بر اساس انجام دهید روی مقدار انتخاب شده
اگر [[ “$input“ -eq “1” ]]
سپس
((نتیجه=n1+n2))
elif [[ “$input“ -eq “2” ]]
سپس
((نتیجه=n1-n2))
elif [[ “$input“ -eq “3” ]]
سپس
((نتیجه=n1 دلار*n2 دلار))
elif [[ “$input“ -eq “4” ]]
سپس
((نتیجه=n1 دلار/n2 دلار))
elif [[ “$input“ -eq “5” ]]
سپس
خروج 0
دیگر
echo “ورودی نامعتبر”
فی
echo “نتیجه این است $نتیجه“
انجام شده
خروجی:
اسکریپت را اجرا کنید.
پس از انتخاب گزینه 2 و 5 خروجی زیر ظاهر می شود.
ترکیب حلقههای while با getopts
‘گرفتن یک تابع ساخته شده از bash که برای خواندن آرگومان ها و گزینه ها در bash اسکریپت مثال زیر استفاده از می گیرد تابعی که در حلقه while استفاده می شود. در اینجا، سه مقدار گزینه با استفاده می شود می گیرد. اینها هستند ‘آ’، ‘r’ و ‘ج‘. سه پیام مختلف برای این گزینه ها چاپ خواهد شد.
# گزینه را بخوانید و در یک متغیر ذخیره کنید
در حالی که می گیرد “قوس” گزینه؛ انجام دادن
# مقدار گزینه را بررسی کنید
مورد ${گزینه} که در
آ ) #گزینه الف
echo “فرآیند متوقف شد”
;;
r ) #گزینه r
echo “فرآیند دوباره شروع شد”
;;
ج ) #گزینه ج
echo “روند ادامه دارد”
;;
\؟ ) #گزینه نامعتبر
echo “استفاده کنید: [-a] یا [-r] یا [-c]”
;;
اساک
انجام شده
خروجی:
اسکریپت را با گزینه های معتبر اجرا کنید.
اسکریپت را با یک گزینه نامعتبر اجرا کنید.
با استفاده از تا حلقه با شمارنده
تا حلقه را می توان با یک شمارنده مانند حلقه while که قبلا نشان داده شده است استفاده کرد. مثال زیر استفاده از حلقه while را با شمارنده نشان می دهد. اینجا، شمارنده $ متغیر برای کنترل تکرار حلقه ای که به 1 مقداردهی اولیه شده است استفاده می شود. شمارنده $ به 5. بنابراین، حلقه 6 بار تکرار می شود و print ارزش شمارنده $ در هر مرحله $counter در هر مرحله 1 کاهش می یابد تا به شرایط پایان حلقه برسد.
# شمارنده را مقداردهی اولیه کنید
پیشخوان=10
# حلقه را 6 بار تکرار کنید
تا زمان [ $counter -lt 5 ]
انجام دادن
echo “مقدار فعلی شمارنده = شمارنده $“
((پیشخوان–))
انجام شده
خروجی:
اسکریپت را اجرا کنید.
تا زمانی که بر اساس حلقه باشد خاتمه دهید روی ورودی کاربر
هر حلقه ای بر اساس خاتمه می یابد روی یک شرایط خاص چگونه تا زمانی که حلقه را می توان بر اساس خاتمه داد روی ورودی کاربر، در مثال زیر نشان داده شده است. با توجه به شرط پایان، حلقه زمانی خاتمه می یابد که مقدار از $شماره بزرگتر است از 50. مقدار $number در داخل حلقه افزایش نمی یابد. بنابراین، حلقه به دریافت ورودی از کاربر تا تعداد بیش از بیشتر ادامه خواهد داد 50 به عنوان ورودی گرفته می شود.
# مقدار دهی اولیه
عدد=0
# الگوی داده های عددی را تنظیم کنید
الگو=‘^[0-9]+$’
# شرط خاتمه را تنظیم کنید
تا زمان [ $number -gt 50 ]
انجام دادن
echo -n “شماره ای را وارد کنید:”
خواندن عدد
# بررسی کنید مقدار ورودی عدد باشد یا خیر
اگر ! [[ $number =~ $pattern ]]
سپس
echo “خطا: عددی نیست”
عدد=0
دیگر
echo “شما وارد شده اید $شماره“
فی
انجام شده
خروجی:
اسکریپت را اجرا کنید.
اسکریپت دوباره حلقه را برای مقدار ورودی تکرار می کند 4، پیام خطای مقدار ورودی را نمایش می دهد، gg و حلقه را برای مقدار ورودی خاتمه دهید 54.
استفاده از حلقه های Nested while
هنگامی که یک حلقه در داخل یک حلقه دیگر اعلام می شود، به آن حلقه بی نهایت می گویند. مثال زیر استفاده از حلقه while تودرتو را نشان می دهد. در اینجا اولین حلقه while 2 بار و حلقه while دوم در داخل حلقه اول سه بار تکرار می شود. کل تکرار حلقه ها 2×3=6 بار است. متغیرهای $i و $j برای کنترل تکرار این حلقهها استفاده میشوند و مقادیر این متغیرها در هر مرحله به عنوان خروجی چاپ میشوند.
# i و j را مقداردهی کنید
من=1
j=1
# شرط خاتمه را برای i تنظیم کنید
در حالی که [ $i -le 2 ]
انجام دادن
# شرط پایان را برای j تنظیم کنید
در حالی که [ $j -le 3 ]
انجام دادن
# مقدار فعلی i و j را چاپ کنید
printf “i=%d، j=%d\n“ $i $j
((j++))
انجام شده
j=1
((i++))
انجام شده
خروجی:
اسکریپت را اجرا کنید.
استفاده از تا حلقه برای خواب/انتظار برای کار پسزمینه شروع شده در اسکریپت
هر process با استفاده از ‘ می توان در پس زمینه اجرا کرد&’ سمبل. چگونه یک process را می توان در پس زمینه با استفاده از حلقه اجرا کرد و بر اساس حلقه خاتمه داد روی زمان مشخص شده در دستور خواب در این مثال نشان داده شده است. در اینجا از متغیر $cnt برای پایان دادن به حلقه استفاده می شود. حلقه پس زمینه را شروع می کند process و خروجی را در یک فایل متنی به نام “output.txt” به مدت 1 ثانیه پس از آن، شرط پایان حلقه بررسی می شود و false برمی گردد. بعد، اسکریپت خواهد شد print یک پیام، “خوابیدن…” و بعد از 3 ثانیه از اسکریپت خارج شوید.
# مقداردهی اولیه کنید
cnt=1
# شرط خاتمه را تنظیم کنید
تا زمان [ $cnt -ge 1000 ]
انجام دادن
echo “زمینه process در حال اجراست”;
# 1 ثانیه صبر کنید
خواب 1;
((cnt++))
انجام شده > output.txt &
# 3 ثانیه صبر کنید
echo “خوابیدن…”
خواب 3
خروجی:
اسکریپت را اجرا کنید.
خروجی اسکریپت را بررسی کنید.
استفاده از حلقه while برای خواندن pid از خروجی ps که خاتمه نیافته است
‘ps’ دستور برای به دست آوردن اطلاعات در مورد تمام فرآیندهای در حال اجرا سیستم استفاده می شود. اطلاعات جزئی را ارائه می دهد روی هر دویدن process مانند شناسه کاربر، PID، استفاده از cpu، استفاده از حافظه و غیره. مثال زیر نشان می دهد که چگونه می توان از حلقه while برای خواندن در حال اجرا استفاده کرد. process اطلاعات مربوط به ‘apache’ در اینجا از متغیر IFS استفاده می شود print PID هر کدام process با خط جدید سپس منتظر می ماند تا کاربر هر کلیدی را برای خروج از اسکریپت فشار دهد.
# جداکننده فیلد را تنظیم کنید
IFS=“”
در حالی که [ true ]
انجام دادن
# همه در حال اجرا را بازیابی کنید process شناسه آپاچی
pid=`ps -ef | grep “آپاچی” | بیخیال ‘{print 2 دلار process در حال اجراست …” }’`
echo $pid
# 1 ثانیه صبر کنید
خواب 1
# هر کلیدی را فشار دهید تا حلقه خاتمه یابد
echo “هر کلیدی را برای خاتمه فشار دهید”
اگر خواندن -r -ن 1 ; سپس
زنگ تفریح
فی
انجام شده
# جداکننده فیلد را تنظیم نکنید
تنظیم نشده IFS
خروجی:
اسکریپت را اجرا کنید.
PID همه در حال اجرا process مستقر روی ‘آپاچی‘ در خروجی نشان داده شده است.
جستجوی هر رشته در یک فایل با استفاده از حلقه و خروج
یک فایل به نام ایجاد کنید month.txt با محتوای زیر برای تست bash اسکریپت ارائه شده در زیر
month.txt
فوریه
مارس
آوریل
ممکن است
ژوئن
جولای
اوت
سپتامبر
اکتبر
نوامبر
دسامبر
‘در حالی کهحلقه ‘ در مثال زیر برای خواندن استفاده می شود month.txt فایل خط به خط اگر هر خطی حاوی مقدار باشد، ‘ژوئنآنوقت خواهد شد print “از تعطیلات تابستانی لذت ببرید” و از اسکریپت خاتمه دهید در غیر این صورت خواهد شد print ارزش خط $.
# نام فایل را برای خواندن تنظیم کنید
نام فایل=“month.txt”
# فایل را خط به خط بخوانید
در حالی که IFS= خواندن -r خط
انجام دادن
# بررسی کنید که مقدار خط برابر با ژوئن باشد
# اگر شرط درست است برنامه را خاتمه دهید
اگر [[ “$line“ == “June” ]];
سپس
echo “از تعطیلات تابستانی لذت ببرید”
خروج 0
دیگر
echo خط $
فی
انجام شده < $filename
خروجی:
اسکریپت را اجرا کنید.
اینجا، ‘ژوئن‘ در فایل وجود دارد month.txt که حلقه را خاتمه می دهد. بنابراین، نام ماه های دیگر پس از ‘ژوئن‘ توسط حلقه خوانده نمی شود.
ترکیب کنید bash با curl برای ارزیابی داده ها از URL
داده ها را می توان به یا از هر سرور شبکه در داخل منتقل کرد bash با استفاده از ‘حلقه’ دستور با هر پروتکل پشتیبانی شده مانند HTTP، FTP، TELNET و غیره command-line ابزار چگونهحلقه’ دستور را می توان برای ارزیابی داده ها از URL با استفاده استفاده کرد برای حلقه در مثال زیر نشان داده شده است. اینجا، برای حلقه فهرستی از url را می خواند و هر مقدار URL را در curl and ارسال می کند print داده های دریافت شده از URL
# هر URL را از لیست بخوانید
برای آدرس اینترنتی که در “yahoo.com” “youtube.com”
انجام دادن
# کد پاسخ HTTP را برای هر URL چاپ کنید
echo $url; حلقه -v -m 5 -s 1 دلار “$url“ | grep HTTP/1.1;
انجام شده
خروجی:
اسکریپت را اجرا کنید.
خواندن اطلاعات از پورت ارسال شده توسط netcat با استفاده از حلقه while
‘نت کت دستور برای خواندن و نوشتن داده ها در شبکه با استفاده از استفاده می شود tcp یا udp پروتکل ‘ncدستور ‘ در استفاده می شود bash دویدننت کت‘ فرمان مثال زیر استفاده از ‘ را نشان می دهدncفرمان در حلقه while. در اینجا، اسکریپت سعی می کند با پورت ارتباط برقرار کند 1234 استفاده کردن nc دستور می دهد و خواهد شد print یک پیام در دیگری terminal اگر بتواند وصل شود باید دیگری را باز کنید terminal پنجره یا تب برای اجرای فرمان،nc localhost 1234‘ برای ایجاد ارتباط پس از برقراری ارتباط، هر پیامی را می توان از یکی منتقل کرد terminal به دیگری terminal.
echo “استماع روی پورت 1234 …”
# پیام ارسال شده توسط netcat را در پورت 1234 بخوانید
در حالی که خواندن متن
انجام دادن
# اگر پیام دریافتی “خروج” است حلقه را خاتمه دهید
اگر [ “$text“ == ‘quit’ ]; سپس
echo “خدا حافظ”
زنگ تفریح
دیگر
echo “$text“
فی
# هنگام اتصال پورت، پیام را چاپ کنید
انجام شده < <((printf “خوش آمدی.\r\nیک پیام تایپ کنید:”) | nc -ل 1234)
خروجی:
اسکریپت را در a اجرا کنید terminal برای شروع گوش دادن در پورت 1234.
بعد، دیگری را باز کنید terminal و دستور زیر را برای برقراری ارتباط اجرا کنید
اولین terminal.
در مرحله دوم پیام خوشامدگویی را نشان خواهد داد terminal. اگر کاربر چیزی را در دومی تایپ کند terminal سپس در قسمت اول نمایش داده خواهد شد terminal. زمانی که کاربر تایپ خواهد کرد “ترک” در دوم terminal سپس اسکریپت با نمایش یک پیام خاتمه می یابد،خدا حافظ’ در ابتدا terminal.
پینگ URL با استفاده از یک حلقه
شما می توانید با اجرای دستور ‘ping’ با URL سایت متوجه زنده بودن یا نبودن هر وب سایتی شوید. دستور ‘ping’ با ‘google.com’ در مثال زیر برای بررسی اینکه آیا اتصال اینترنت کار می کند یا نه استفاده می شود. حلقه while 5 بار در اسکریپت تکرار می شود و سعی می کند google.com را پینگ کند. اگر سرور پاسخ دهد، پاسخ می دهد print “اینترنت کار می کند” و حلقه را خاتمه دهید. اگر حلقه 5 بار تکرار شود و هیچ پاسخی از سرور دریافت نکند، انجام خواهد شد print “بدون اتصال به اینترنت“.
# شمارنده را تنظیم کنید
شمردن=5
در حالی که [[ $count -ne 0 ]]
انجام دادن
# سعی کنید google.com را پینگ کنید
پینگ -ج 1 google.com
ج=دلار؟
# کد وضعیت را بررسی کنید
اگر [[ $c -eq 0 ]]
سپس
echo “اینترنت کار می کند”
خروج 0
فی
# شمارنده را کاهش دهید
((شمردن–))
انجام شده
echo “بدون اتصال به اینترنت”
خروجی:
اسکریپت را اجرا کنید.
اگر اتصال اینترنت شما به درستی کار کند، خروجی مشابهی دریافت خواهید کرد.
اجرای بالا در حالت دسته ای با استفاده از یک حلقه و خروجی ضبط
‘بالافرمان یک ابزار مدیریتی لینوکس است که برای بررسی استفاده از منابع سیستم، مدیریت وظایف مختلف و نظارت بر فرآیندهای در حال اجرا استفاده می شود. چگونه می توانید بدویدبالادستور ‘ در حالت دسته ای با استفاده از حلقه for و ذخیره رکوردها در یک فایل متنی در مثال زیر نشان داده شده است. اینجا، -ب از گزینه برای شروع ‘ استفاده می شودبالافرمان در حالت دسته ای و -پ از گزینه برای تنظیم استفاده می شود process شناسه ای که می خواهید نظارت کنید خروجی از ‘بالافرمان در ذخیره می شود output.txt فایل.
حلقه # 5 بار تکرار می شود و دستور بالا را اجرا می کند
برای ((من=0; من<5; i++))
انجام دادن
بالا -ب -پ 2875 -n1 | دم -1 >> output.txt
انجام شده
خروجی:
ابتدا دستور زیر را اجرا کنید تا لیست فرآیندهای در حال اجرا را پیدا کنید.
حالا اسکریپت را اجرا کنید.
برای مشاهده خروجی اسکریپت دستور زیر را اجرا کنید.
نتیجه
حلقه ها را می توان در استفاده کرد bash به روش های مختلف برای انجام انواع مختلف وظایف ساده یا پیچیده. چگونه می توان از سه نوع حلقه استفاده کرد bash برای کارهای مختلف مانند واکشی لیست یا آرایه، خواندن فایل ها یا هر خروجی فرمان و غیره در این مقاله با استفاده از مثال های بسیار ساده نشان داده شده است. امیدوارم این مثال ها به خواننده کمک کند تا کاربردهای آن را درک کند bash حلقه واضح تر
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-31 14:51:04