از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش تسلط بر منطق شرطی در Bash
سرفصلهای مطلب
- استفاده از بیانیه “اگر”.
- استفاده از بیانیه «اگر دیگر».
- استفاده از بیانیه “If-Elif-Else”.
- استفاده از عبارت “If” برای بررسی متغیر خالی
- استفاده از عبارت «اگر» با عملگر منطقی
- استفاده از عبارات “اگر” تودرتو
- استفاده از عبارت “If” برای بررسی وجود فایل
- استفاده از عبارت “If” برای بررسی وجود دایرکتوری
- استفاده از عبارت “If” با Regex
- استفاده از بیانیه “مورد”.
استفاده از بیانیه “اگر”.
این مثال استفاده ساده از عبارت “if” را در Bash نشان می دهد. برای مقایسه مقادیر عددی در Bash می توان از شش نوع عملگر مقایسه استفاده کرد. اینها عبارتند از «-eq» (برابر)، «-ne» (نه برابر)، «-le» (کمتر از مساوی)، «-ge» (بزرگتر از مساوی)، «-lt» (کمتر از)، و « -gt” (بیشتر از). موارد استفاده از “-lt” و “-eq” در اسکریپت زیر نشان داده شده است که آیا این عدد کمتر از 99 باشد یا با استفاده از عملگر “-lt” بررسی نشده باشد. عدد زوج یا فرد است و توسط عملگر “eq” بررسی می شود.
#یک مقدار عددی اختصاص دهید
((عدد=50))
#مقدار عددی را با استفاده از عبارت “if” بررسی کنید
اگر [ $number -lt 99 ]
سپس
اکو “شماره معتبر است.”
فی
#بررسی کنید که آیا عدد زوج است یا خیر
اگر [ $(( $number % 2 )) -eq 0 ]
سپس
اکو “عدد زوج است.”
فی
خروجی:
خروجی زیر پس از اجرای اسکریپت قبلی ظاهر می شود:
استفاده از بیانیه «اگر دیگر».
استفاده از عبارت “if-else” در اسکریپت زیر نشان داده شده است. یک مقدار رشته ای از کاربر گرفته می شود و بررسی می کند که آیا مقدار “BLUE” است یا نه با استفاده از عبارت “if-else”.
#از کاربر یک مقدار رشته بگیرید
خواندن -پ “رنگ مورد علاقه خود را وارد کنید:” رنگ
#مقدار رشته را با استفاده از عبارت «if-else» بررسی کنید
اگر [ ${color^^} == ‘BLUE’ ]
سپس
اکو “خوب، رنگ آبی موجود است.”
دیگر
اکو “$ رنگ در دسترس نیست.”
فی
خروجی:
خروجی زیر پس از اجرای اسکریپت قبلی ظاهر می شود اگر “قرمز” به عنوان ورودی گرفته شود:
خروجی زیر پس از اجرای اسکریپت قبلی ظاهر می شود اگر “آبی” به عنوان ورودی گرفته شود:
استفاده از بیانیه “If-Elif-Else”.
استفاده از عبارت “if-elif-else” در اسکریپت زیر نشان داده شده است. یک عدد از کاربر گرفته می شود و با مقادیر مختلف بررسی می شود تا زمانی که مطابقت پیدا شود. اگر مطابقت پیدا شد، پیام مربوطه چاپ می شود. اگر مطابقت پیدا نشد، پیام پیش فرض چاپ می شود.
#مقدار id را از کاربر بگیرید
خواندن -پ “شماره سریال خود را وارد کنید:” سریال
#مقدار ورودی را با استفاده از عبارت «if-elif-else» بررسی کنید
اگر [ $serial == ‘4523’ ]
سپس
اکو “شما در گروه الف انتخاب شده اید.”
elif [ $serial == ‘8723’ ]
سپس
اکو “شما در گروه B انتخاب شده اید.”
elif [ $serial == ‘3412’ ]
سپس
اکو “شما در گروه C انتخاب شده اید.”
دیگر
اکو “شما انتخاب نشده اید”.
فی
خروجی:
خروجی زیر پس از اجرای اسکریپت با مقدار 8723 ظاهر می شود:
خروجی زیر پس از اجرای اسکریپت با مقدار 9078 ظاهر می شود:
استفاده از عبارت “If” برای بررسی متغیر خالی
روش بررسی خالی بودن متغیر بدون استفاده از عبارت if در اسکریپت زیر نشان داده شده است. برای انجام این کار از گزینه “-z” در عبارت “if” استفاده می شود.
#مقدار id را از کاربر بگیرید
خواندن -پ “شماره سریال خود را وارد کنید:” سریال
# خالی بودن یا نبودن متغیر را بررسی کنید
اگر [ ! -z $serial ]
سپس
#مقدار ورودی را با استفاده از عبارت «if-elif-else» بررسی کنید
اگر [ $serial == ‘690’ ]
سپس
اکو “شما در تیم 1 انتخاب شده اید.”
elif [ $serial == ‘450’ ]
سپس
اکو “شما در تیم 2 انتخاب شده اید.”
دیگر
اکو “شما انتخاب نشده اید”.
فی
دیگر
اکو هیچ شماره سریالی داده نشده است.
فی
خروجی:
خروجی زیر پس از اجرای اسکریپت با مقدار 690 ظاهر می شود:
خروجی زیر پس از اجرای اسکریپت در صورت عدم دریافت مقدار ورودی ظاهر می شود:
استفاده از عبارت «اگر» با عملگرهای منطقی
سه نوع عملگر منطقی را می توان در دستور شرطی Bash استفاده کرد. اینها منطقی OR (||)، منطقی AND (&&) و منطقی NOT (!) هستند. یک مقدار کد از کاربر گرفته می شود. اگر مقدار ورودی خالی نباشد، مقدار با دو مقدار کد با استفاده از OR منطقی بررسی می شود. اگر مقدار با هر کدی مطابقت داشته باشد، پیام مربوطه چاپ می شود. اگر کد منطبقی پیدا نشد، پیام پیش فرض چاپ می شود.
#کد دوره را از کاربر بگیرید
خواندن -پ “کد دوره را وارد کنید:” کد
# خالی بودن یا نبودن متغیر را بررسی کنید
اگر [ ! -z $code ]
سپس
#مقدار ورودی را با استفاده از عبارت «if-elif-else» بررسی کنید
اگر [[ $code == ‘CSE-106’ || $code == ‘CSE-108’ ]]
سپس
اکو “دوره CSE.”
elif [[ $code == ‘BBA-203’ || $code == ‘BBA-202’ ]]
سپس
اکو “دوره BBA.”
دیگر
اکو “کد دوره نامعتبر است.”
فی
دیگر
اکو “هیچ کد رشته ای داده نشده است.”
فی
خروجی:
خروجی زیر پس از اجرای اسکریپت با مقدار ورودی “CSE-108” ظاهر می شود:
خروجی زیر پس از اجرای اسکریپت با مقدار ورودی “BBA-56” ظاهر می شود:
استفاده از عبارات “اگر” تودرتو
هنگامی که یک شرط “if” در یک شرط “if” دیگر استفاده می شود، به آن دستور “if” تودرتو می گویند. روش استفاده از “if” تودرتو در اسکریپت زیر نشان داده شده است. دو مقدار علامت از کاربر گرفته می شود. اگر مقادیر ورودی خالی نباشند، شرط «if» اول بررسی میکند که آیا مقدار «نظریه $» بزرگتر یا مساوی 60 است یا خیر. اگر شرط اول “if” “true” را برگرداند، شرط دوم “if” بررسی می کند که آیا مقدار “$lab” بزرگتر یا مساوی 50 است یا خیر. اگر شرط دوم “اگر” نیز “درست” را برگرداند، یک پیام موفقیت آمیز چاپ می شود. در غیر این صورت یک پیام خرابی چاپ می شود.
#نمره تئوری را بگیرید
خواندن -پ “علامت تئوری را وارد کنید:” تئوری
#نشان آزمایشگاه را بگیرید
خواندن -پ “علامت آزمایشگاهی را وارد کنید:” آزمایشگاه
# خالی بودن یا نبودن متغیرها را بررسی کنید
اگر [[ ! -z $theory && ! -z $lab ]]
سپس
#مقادیر ورودی را با استفاده از عبارت «if» تودرتو بررسی کنید
اگر [ $theory -ge 60 ]
سپس
اگر [ $lab -ge 50 ]
سپس
اکو “تو گذشتی.”
دیگر
اکو “شما شکست خوردید.”
فی
دیگر
اکو “شما شکست خوردید.”
فی
دیگر
اکو “علامت تئوری یا آزمایشگاه خالی است.”
فی
خروجی:
اگر هر دو یا یکی از مقادیر ورودی خالی باشد خروجی زیر ظاهر می شود:
اگر 78 به عنوان علامت تئوری و 45 به عنوان علامت آزمایشگاهی در نظر گرفته شود، خروجی زیر ظاهر می شود. در اینجا، شرط دوم “اگر” “false” را برمی گرداند:
اگر 67 به عنوان نمره تئوری و 56 به عنوان علامت آزمایشگاهی در نظر گرفته شود، خروجی زیر ظاهر می شود. در اینجا، هر دو شرط «if» به «true» برمیگردند:
اگر 50 به عنوان نمره تئوری و 80 به عنوان علامت آزمایشگاهی در نظر گرفته شود، خروجی زیر ظاهر می شود. در اینجا، اولین شرط “if” “false” را برمی گرداند:
استفاده از عبارت “If” برای بررسی وجود فایل
وجود فایل توسط اسکریپت bash به دو صورت قابل بررسی است. یکی از عملگر “-f” با “[]” پرانتز دیگری استفاده از دستور “test” و عملگر “-f” است. یک نام فایل گرفته می شود و وجود فایل را با استفاده از شرط “if” با عملگر “-f” بررسی می کند. سپس نام فایل دیگری گرفته می شود و با استفاده از عبارت if با دستور test و عملگر -f وجود فایل را بررسی می کنیم.
#نام فایل را بگیرید
خواندن -پ “نام فایل را وارد کنید:” fn1
#بدون استفاده از “test” بررسی کنید که آیا فایل وجود دارد یا خیر
اگر [ -f $fn1 ]
سپس
اکو “fn1 دلار فایل وجود دارد.”
دیگر
اکو “fn1 دلار فایل موجود نیست.”
فی
#افزودن خط جدید
اکو
#نام فایل دیگری بگیرید
خواندن -پ “نام فایل دیگری را وارد کنید:” fn2
#با استفاده از «test» بررسی کنید که آیا فایل وجود دارد یا خیر
اگر تست -ف fn2 دلار; سپس
اکو “fn2 دلار فایل وجود دارد.”
#بررسی کنید که آیا فایل از «تست» خالی است یا نه
اگر تست -z fn2 دلار; سپس
اکو “fn2 دلار فایل خالی است.”
دیگر
اکو “fn2 دلار فایل خالی نیست.”
فی
دیگر
اکو “fn2 دلار فایل موجود نیست.”
فی
خروجی:
خروجی زیر پس از اجرای اسکریپت با در نظر گرفتن “test.txt” و “testing.txt” به عنوان نام فایل ظاهر می شود. با توجه به خروجی، هر دو فایل در مکان فعلی وجود دارند و فایل “testing.txt” خالی است:
خروجی زیر پس از اجرای اسکریپت با در نظر گرفتن “f1.txt” و “test.txt” به عنوان نام فایل ظاهر می شود. با توجه به خروجی، فایل “f1.txt” در مکان فعلی وجود ندارد و فایل “test.txt” خالی نیست:
استفاده از عبارت “If” برای بررسی وجود دایرکتوری
وجود دایرکتوری را می توان با اسکریپت Bash به دو روش مانند فایل بررسی کرد. یکی از عملگر “-d” با “[]” پرانتز دیگری استفاده از دستور “test” و عملگر “-d” است. یک نام دایرکتوری گرفته می شود و وجود دایرکتوری را با استفاده از شرط “if” با عملگر “-d” بررسی می کند. سپس نام دایرکتوری دیگری گرفته می شود و وجود فایل را با استفاده از دستور “if” با دستور “test” و عملگر “-d” بررسی می کند.
#یک نام دایرکتوری بگیرید
خواندن -پ “نام دایرکتوری را وارد کنید:” dir1
#بدون استفاده از “test” بررسی کنید که آیا دایرکتوری وجود دارد یا خیر
اگر [ -d $dir1 ]
سپس
اکو “$dir1 دایرکتوری وجود دارد.”
دیگر
اکو “$dir1 دایرکتوری وجود ندارد.”
فی
#افزودن خط جدید
اکو
#نام دایرکتوری دیگری بگیرید
خواندن -پ “نام دایرکتوری دیگری را وارد کنید:” dir2
#با استفاده از «test» بررسی کنید که آیا فایل وجود دارد یا خیر
اگر تست -د $dir2
سپس
اکو “$dir2 دایرکتوری وجود دارد.”
دیگر
اکو “$dir2 دایرکتوری وجود ندارد.”
فی
خروجی:
خروجی زیر پس از اجرای اسکریپت با نام دایرکتوری “temp” و “files” ظاهر می شود. با توجه به خروجی، هر دو دایرکتوری در مکان فعلی وجود دارند. سپس دستور ls برای بررسی محتوای دایرکتوری ها اجرا می شود:
خروجی زیر پس از اجرای اسکریپت با نام دایرکتوری “تست” و “جدید” ظاهر می شود. با توجه به خروجی، هر دو دایرکتوری در مکان فعلی وجود ندارند. سپس، خروجی دستور “ls” نشان می دهد که هر دو دایرکتوری وجود ندارند:
استفاده از عبارت “If” با Regex
اسکریپت زیر روش اعتبارسنجی داده های ورودی را با استفاده از عبارت “if” با regex نشان می دهد. در اینجا، دو مقدار ورودی از کاربر گرفته شده و در متغیرهای “$bookname” و “$bookprice” ذخیره میشوند. شرط «if» در اسکریپت برای بررسی اینکه متغیر «$bookname» حاوی تمام نویسههای الفبایی و «$bookprice» شامل یک عدد باشد استفاده میشود.
#نام و قیمت کتاب را از کاربر بگیرید
اکو -n “نام کتاب را وارد کنید:”
خواندن نام کتاب
اکو -n “قیمت کتاب را وارد کنید:”
خواندن قیمت کتاب
#بررسی کنید نام کتاب فقط شامل الفبا باشد
اگر ! [[ “$bookname“ =~ [A-Za-z] ]]; سپس
اکو “نام کتاب نامعتبر است.”
دیگر
اکو “نام کتاب معتبر است.”
فی
#چک کنید قیمت کتاب فقط دارای رقم است
اگر ! [[ “$bookprice“ =~ [0–9] ]]; سپس
اکو “قیمت کتاب فقط می تواند دارای رقم باشد.”
دیگر
اکو “قیمت کتاب معتبر است.”
فی
خروجی:
خروجی زیر پس از اجرای اسکریپت با مقادیر ورودی “Bash Programming” به عنوان نام کتاب و 78 به عنوان قیمت کتاب ظاهر می شود:
خروجی زیر پس از اجرای اسکریپت با مقادیر ورودی 90 به عنوان نام کتاب و “Bash” به عنوان قیمت کتاب ظاهر می شود:
استفاده از بیانیه “مورد”.
عبارت “case” جایگزین عبارت “if-elif-else” است، اما تمام وظایف عبارت “if-elif-else” را نمی توان با استفاده از عبارت “case” انجام داد. استفاده ساده از عبارت “case” در اسکریپت زیر نشان داده شده است. یک مقدار عددی به عنوان مقدار ماه جاری از کاربر گرفته می شود. سپس، اگر مقدار منطبقی در عبارت “case” یافت شود، ماه مربوطه چاپ می شود. در غیر این صورت، پیام پیش فرض چاپ می شود.
#مقدار ماه جاری را به تعداد در نظر بگیرید
خواندن -پ “ماه امروز را به تعداد وارد کنید:” b_month
#متن را قبل از چاپ نام ماه چاپ کنید
اکو -n “نام ماه جاری “
#پیدا کردن و چاپ نام ماه منطبق بر اساس روی ورودی
مورد $b_month که در
1|01) اکو “ژانویه.” ;;
2|02) اکو “فوریه.” ;;
3|03) اکو “مارس.” ;;
4|04) اکو “آوریل.” ;;
5|05) اکو “ممکن است.” ;;
6|06) اکو “ژوئن.” ;;
7|07) اکو “جولای.” ;;
8|08) اکو “مرداد.” ;;
9|09) اکو “سپتامبر.” ;;
10) اکو “اکتبر.” ;;
11) اکو “نوامبر.” ;;
12) اکو “دسامبر.” ;;
*) اکو “پیدا نشد.” ;;
اساک
خروجی:
خروجی زیر پس از اجرای اسکریپت با مقدار 6 ظاهر می شود:
خروجی زیر پس از اجرای اسکریپت با مقدار 09 ظاهر می شود:
خروجی زیر پس از اجرای اسکریپت با مقدار 14 ظاهر می شود:
نتیجه
کاربردهای مختلف منطق شرطی با استفاده از دستورات «اگر» و «مورد» در 10 مثال این آموزش نشان داده شده است. مفهوم استفاده از منطق شرطی در Bash پس از مطالعه این آموزش برای کاربران جدید Bash پاک خواهد شد.
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-28 16:47:03