رفتن به محتوای اصلی
دیدگاه کلود | ارائه‌کننده سرورهای ابری و اختصاصی
آموزش کامل if-else در اسکریپت شل (Shell Script) همراه با مثال

آموزش کامل if-else در اسکریپت شل (Shell Script) همراه با مثال

بعد از یادگیری مفاهیمی مثل آرایه‌ها در شل اسکریپت، قدم بعدی درک دستورات شرطی است. در برنامه‌نویسی، اجرای پشت سر هم تمام دستورات معمولاً منطقی نیست. ما نیاز داریم که بعضی کدها فقط در شرایط خاص اجرا شوند.

بعد از یادگیری مفاهیمی مثل آرایه‌ها در شل اسکریپت، قدم بعدی درک دستورات شرطی است. در برنامه‌نویسی، اجرای پشت سر هم تمام دستورات معمولاً منطقی نیست. ما نیاز داریم که بعضی کدها فقط در شرایط خاص اجرا شوند.

اینجاست که ساختار 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 است.