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

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

آموزش نصب
4 دقیقه مطالعه

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

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

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

    6 خط
    if [ condition ]
    then
       statement1
    else
       statement2
    fi
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    توضیح:

    • if → شروع شرط

    • condition → شرطی که بررسی می‌شود

    • then → اگر شرط درست باشد

    • else → اگر شرط نادرست باشد

    • fi → پایان بلوک if

    شل اسکریپت به بزرگی و کوچکی حروف حساس است.


    مثال‌های کاربردی

    عملگرمعنینوع
    -eqبرابر بودنعددی
    -neنابرابر بودنعددی
    -gtبزرگتر بودنعددی
    -ltکوچکتر بودنعددی
    -geبزرگتر یا مساویعددی
    -leکوچکتر یا مساویعددی
    =برابر بودنرشته‌ای
    !=نابرابر بودنرشته‌ای
    -zخالی بودن رشتهرشته‌ای
    -nخالی نبودن رشتهرشته‌ای

    1️⃣ بررسی برابری دو عدد

    10 خط
    #!/bin/bash
    m=1
    n=2
    
    if [ "$n" -eq "$m" ]
    then
      echo "هر دو متغیر برابر هستند"
    else
      echo "متغیرها متفاوت هستند"
    fi
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    2️⃣ مقایسه دو مقدار

    10 خط
    #!/bin/bash
    a=2
    b=7
    
    if [ "$a" -ge "$b" ]
    then
      echo "متغیر a بزرگ‌تر است"
    else
      echo "متغیر b بزرگ‌تر است"
    fi
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    3️⃣ تشخیص زوج یا فرد بودن عدد

    9 خط
    #!/bin/bash
    n=10
    
    if (( n % 2 == 0 ))
    then
      echo "عدد زوج است"
    else
      echo "عدد فرد است"
    fi
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    داخل (( )) عملیات ریاضی به سبک زبان C انجام می‌شود و خواناتر است.


    4️⃣ بررسی وجود فایل

    5 خط
    if [ -f file.txt ]; then
      echo "فایل وجود دارد"
    else
      echo "فایل وجود ندارد"
    fi
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    5️⃣ بررسی خالی بودن متغیر

    5 خط
    if [ -z "$var" ]; then
      echo "متغیر خالی است"
    else
      echo "متغیر مقدار دارد"
    fi
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    استفاده از elif برای چند شرط

    12 خط
    #!/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 تو در تو

    12 خط
    #!/bin/bash
    num=10
    
    if [ "$num" -ge 5 ]; then
      if [ "$num" -le 15 ]; then
        echo "عدد داخل بازه است"
      else
        echo "عدد بالاتر از بازه است"
      fi
    else
      echo "عدد پایین‌تر از بازه است"
    fi
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    بررسی وجود فایل و سطح دسترسی

    12 خط
    #!/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
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    اعتبارسنجی ورودی کاربر

    11 خط
    #!/bin/bash
    echo "عدد اول را وارد کنید:"
    read num1
    echo "عدد دوم را وارد کنید:"
    read num2
    
    if [[ $num1 =~ ^[0-9]+$ ]] && [[ $num2 =~ ^[0-9]+$ ]]; then
      echo "هر دو ورودی عدد معتبر هستند"
    else
      echo "حداقل یکی از ورودی‌ها نامعتبر است"
    fi
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    سوالات متداول

    استفاده ساده از if

    3 خط
    if [ -f file.txt ]; then
      echo "فایل وجود دارد"
    fi
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    if همراه با else

    5 خط
    if [ "$var" -gt 10 ]; then
      echo "بزرگ‌تر از 10"
    else
      echo "کوچک‌تر یا مساوی 10"
    fi
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    چند شرط

    7 خط
    if [ condition1 ]; then
      ...
    elif [ condition2 ]; then
      ...
    else
      ...
    fi
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    عملگر ==

    برای مقایسه رشته در [[ ]] استفاده می‌شود:

    3 خط
    if [[ "$var" == "value" ]]; then
      echo "برابر است"
    fi
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    جایگزین if-else: دستور case

    5 خط
    case $var in
      1) echo "عدد 1" ;;
      2) echo "عدد 2" ;;
      *) echo "مقدار دیگر" ;;
    esac
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    جمع‌بندی

    ساختار if-else یکی از مهم‌ترین ابزارهای برنامه‌نویسی در شل اسکریپت است. این دستور به شما امکان می‌دهد اجرای کد را کنترل کنید، اسکریپت‌های هوشمندتر بنویسید و از اجرای دستورات غیرضروری جلوگیری کنید. تسلط بر این ساختار پایه‌ای، قدم بزرگی در حرفه‌ای شدن در Bash است.

    زیرساخت ابری برای اجرای همین آموزش

    سرور ابری ساعتی را برای Docker، Ubuntu و DevOps راه‌اندازی کنید — پرداخت به میزان مصرف یا ماهانه.

    ادامه یادگیری:Docker·Ubuntu·VPS