بعد از یادگیری مفاهیمی مثل آرایهها در شل اسکریپت، قدم بعدی درک دستورات شرطی است. در برنامهنویسی، اجرای پشت سر هم تمام دستورات معمولاً منطقی نیست. ما نیاز داریم که بعضی کدها فقط در شرایط خاص اجرا شوند.
اینجاست که ساختار if-else وارد میشود. این ساختار به اسکریپت Bash اجازه میدهد بر اساس درست یا غلط بودن یک شرط، تصمیم بگیرد کدام دستورات اجرا شوند.
نکات مهم
-
دستورات if-else اجرای شرطی فرمانها را ممکن میکنند.
-
در Bash فاصلهگذاری داخل براکتها مهم است:
[ condition ] -
استفاده از ارزیابی عددی مدرن Bash با
(( ))خواناتر و ایمنتر است. -
کلمه کلیدی elif برای بررسی چند شرط پشت سر هم استفاده میشود.
-
تست فایلها مثل
-fو-rو تست رشته مثل-zبسیار رایج هستند. -
if-else تو در تو برای تصمیمگیریهای پیچیده کاربرد دارد.
-
اعتبارسنجی ورودی کاربر با ترکیب if-else و الگوهای regex انجام میشود.
-
ساختارهای
[[ ... ]]و(( ... ))مخصوص Bash هستند و در sh یا dash ممکن است کار نکنند.
تمام مثالهای این آموزش مخصوص Bash (/bin/bash) هستند.
ساختار کلی if-else در شل
if [ condition ]
then
statement1
else
statement2
fi
توضیح:
-
if→ شروع شرط -
condition→ شرطی که بررسی میشود -
then→ اگر شرط درست باشد -
else→ اگر شرط نادرست باشد -
fi→ پایان بلوک if
شل اسکریپت به بزرگی و کوچکی حروف حساس است.
مثالهای کاربردی
1️⃣ بررسی برابری دو عدد
#!/bin/bash
m=1
n=2
if [ "$n" -eq "$m" ]
then
echo "هر دو متغیر برابر هستند"
else
echo "متغیرها متفاوت هستند"
fi
2️⃣ مقایسه دو مقدار
#!/bin/bash
a=2
b=7
if [ "$a" -ge "$b" ]
then
echo "متغیر a بزرگتر است"
else
echo "متغیر b بزرگتر است"
fi
3️⃣ تشخیص زوج یا فرد بودن عدد
#!/bin/bash
n=10
if (( n % 2 == 0 ))
then
echo "عدد زوج است"
else
echo "عدد فرد است"
fi
داخل (( )) عملیات ریاضی به سبک زبان C انجام میشود و خواناتر است.
4️⃣ بررسی وجود فایل
if [ -f file.txt ]; then
echo "فایل وجود دارد"
else
echo "فایل وجود ندارد"
fi
5️⃣ بررسی خالی بودن متغیر
if [ -z "$var" ]; then
echo "متغیر خالی است"
else
echo "متغیر مقدار دارد"
fi
استفاده از elif برای چند شرط
#!/bin/bash
grade=85
if [ "$grade" -ge 90 ]; then
echo "نمره: A"
elif [ "$grade" -ge 80 ]; then
echo "نمره: B"
elif [ "$grade" -ge 70 ]; then
echo "نمره: C"
else
echo "نمره: F"
fi
if-else تو در تو
#!/bin/bash
num=10
if [ "$num" -ge 5 ]; then
if [ "$num" -le 15 ]; then
echo "عدد داخل بازه است"
else
echo "عدد بالاتر از بازه است"
fi
else
echo "عدد پایینتر از بازه است"
fi
بررسی وجود فایل و سطح دسترسی
#!/bin/bash
file_path="/path/to/file.txt"
if [ -f "$file_path" ]; then
if [ -r "$file_path" ]; then
echo "فایل وجود دارد و قابل خواندن است"
else
echo "فایل وجود دارد ولی مجوز خواندن ندارد"
fi
else
echo "فایل وجود ندارد"
fi
اعتبارسنجی ورودی کاربر
#!/bin/bash
echo "عدد اول را وارد کنید:"
read num1
echo "عدد دوم را وارد کنید:"
read num2
if [[ $num1 =~ ^[0-9]+$ ]] && [[ $num2 =~ ^[0-9]+$ ]]; then
echo "هر دو ورودی عدد معتبر هستند"
else
echo "حداقل یکی از ورودیها نامعتبر است"
fi
سوالات متداول
استفاده ساده از if
if [ -f file.txt ]; then
echo "فایل وجود دارد"
fi
if همراه با else
if [ "$var" -gt 10 ]; then
echo "بزرگتر از 10"
else
echo "کوچکتر یا مساوی 10"
fi
چند شرط
if [ condition1 ]; then
...
elif [ condition2 ]; then
...
else
...
fi
عملگر ==
برای مقایسه رشته در [[ ]] استفاده میشود:
if [[ "$var" == "value" ]]; then
echo "برابر است"
fi
جایگزین if-else: دستور case
case $var in
1) echo "عدد 1" ;;
2) echo "عدد 2" ;;
*) echo "مقدار دیگر" ;;
esac
جمعبندی
ساختار if-else یکی از مهمترین ابزارهای برنامهنویسی در شل اسکریپت است. این دستور به شما امکان میدهد اجرای کد را کنترل کنید، اسکریپتهای هوشمندتر بنویسید و از اجرای دستورات غیرضروری جلوگیری کنید. تسلط بر این ساختار پایهای، قدم بزرگی در حرفهای شدن در Bash است.

