تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

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


۴ مرداد ۱۴۰۴

زمانی‌که با شل‌اسکریپت کار می‌کنیم، یکی از مسائلی که خیلی اهمیت دارد، این ‌است که دستورات را فقط زمانی اجرا کنیم که لازم هستند. شاید پیش آمده باشد که بخواهید یک سری کارها را فقط در شرایط خاصی انجام دهید، برای این‌کار از if-else استفاده می‌کنیم. با دستور if-else می‌توانیم از اجرای مواردی که لازم نیستند، جلوگیری کنیم و تنها کارهایی که به درد موقعیت فعلی می‌خورد را اجرا کنیم. اگر فکر می‌کنید، دستور if-else برای پروژه‌هایتان کاربردی است، این مقاله از سری مقالات لینوکس را دنبال کنید تا بیشتر با جزئیات آن آشنا شوید:)

همچنین بخوانید:

  • شرایط در شل‌اسکریپت‌ها
  • if-else در شل‌اسکریپت‌ها چطور کار می‌کند؟
  • نحوه استفاده از if-else در شل‌اسکریپت
  • چطور از elif برای بررسی چندین شرط در bash استفاده کنیم؟
  • نحوه استفاده از if-else برای تصمیمات دودویی در bash
  • ساختن دستورات if-else تو در تو برای شرایط پیچیده
  • اسکریپت شل برای چک کردن وجود فایل‌ها
  • چطور ورودی‌ کاربر را در شل اسکریپت اعتبارسنجی کنیم؟
  • جمع‌بندی
  • سوالات متداول
آموزش کامل if else در شل اسکریپت (Shell Script)

شرایط در شل‌اسکریپت‌ها

یکی از ویژگی‌های جذاب برنامه‌نویسی در لینوکس، استفاده از دستورات شرطی مثل if-else است. این دستورات به شما این امکان را می‌دهند که در شل‌اسکریپت‌، تصمیم بگیرید که کدها تحت چه شرایطی اجرا شوند و چه زمانی اجرا نشدن آن‌ها بهتر است.

در شل‌اسکریپت‌ها، زمانی که بخواهید یک شرط را بررسی کنید و بر اساس نتیجه‌اش، یکی از دستورات مختلف را اجرا کنید، دستور if-else به کمک می‌آید. یعنی به راحتی می‌توانید شرایط مختلف را ارزیابی کنید و برای هرکدام واکنش خاص داشته باشید.

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

برای آشنایی با اسکریپت‌نویسی شل، کلید خودکارسازی کارها در لینوکس، مقاله زیر را مطالعه کنید.
آموزش اسکریپت‌نویسی شل

if-else در شل‌اسکریپت‌ها چطور کار می‌کند؟

حال که متوجه شدیم if-else چیست و چرا برای هر برنامه‌نویسی، صرف نظر از حوزه کاری، اهمیت زیادی دارد، وقت آن است که این دستور را در شل اسکریپت بررسی کنیم. برای درک بهتر if-else در شل‌اسکریپت‌ها، باید عملکرد این تابع شرطی را شکسته و جزبه‌جز کنیم.

اجازه دهید نگاهی بیاندازیم به ساختار نحوی بلوک شرطی if-else:

if [condition]
then
   statement1
else
   statement2
fi

در اینجا چهار کلمه کلیدی داریم: if، then، else و fi.

اگر شرط به TRUE (درست) ارزیابی شود، پردازنده دستورات پس از کلمه کلیدی then را اجرا می‌کند. این دستورات در ساختار به عنوان statement1 شناخته می‌شوند.

اگر شرط به FALSE (غلط) ارزیابی شود، پردازنده دستورات پس از کلمه کلیدی else را اجرا خواهد کرد. این بخش از کد به عنوان statement2 در دستور زبان معرفی می‌شود.

نکته‌ای که باید به آن توجه کنید این است که مانند زبان برنامه‌نویسی C، شل‌اسکریپت‌ها حساس به حروف بزرگ و کوچک هستند. بنابراین، هنگام استفاده از کلمات کلیدی در کد خود باید دقت کافی داشته باشید تا حروف به درستی وارد شوند.

دستورات پرکاربرد و برتر لینوکس Linux را در مقاله زیر می‌توانید مطالعه کنید.
۵۰ دستور برتر لینوکس Linux

نحوه استفاده از if-else در شل‌اسکریپت

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

در این بخش، برخی مثال‌های کاربردی از if-else در شل‌اسکریپت‌ها آورده‌ایم که دید بهتری از نحوه استفاده از این ابزار قدرتمند به شما می‌دهد.

توضیحکد Shell Script
بررسی برابر بودن دو متغیرif [ $a -eq $b ]; then echo "Both variables are the same"; else echo "Both variables are different"; fi
مقایسه دو عدد برای تشخیص مقدار بزرگ‌ترif [ $a -ge $b ]; then echo "The variable 'a' is greater than the variable 'b'."; else echo "The variable 'b' is greater than the variable 'a'."; fi
بررسی زوج یا فرد بودن یک عددif [ $((a % 2)) -eq 0 ]; then echo "The number is even"; else echo "The number is odd"; fi
بررسی وجود فایل خاصif [ -f file.txt ]; then echo "File exists"; else echo "File does not exist"; fi
بررسی خالی بودن مقدار یک متغیرif [ -z "$var" ]; then echo "Variable is empty"; else echo "Variable is not empty"; fi

بررسی برابر بودن دو عدد در bash با if-else:

برای درک بهتر نحوه عملکرد ساختار if-else در شل‌ اسکریپت، بهتر است از مثال‌های ساده شروع کنیم. ابتدا دو متغیر به نام‌های a و b مقداردهی اولیه می‌شوند و سپس با استفاده از دستور if-else بررسی می‌کنیم که آیا این دو متغیر مقدار یکسانی دارند یا نه. اسکریپت Bash برای انجام این کار به صورت زیر خواهد بود:

#!/bin/bash
m=1
n=2

if [ $n -eq $m ]
then
        echo "Both variables are the same"
else
        echo "Both variables are different"
fi

خروجی:

Both variables are different

استفاده از if-else برای مقایسه دو مقدار

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

برای مثال، در اینجا دو متغیر را مقداردهی می‌کنیم و از دستور if-esle استفاده می‌کنیم تا مشخص کنیم کدام یک بزرگ‌تر است:

#!/bin/bash
a=2
b=7
if [ $a -ge $b ]
then
  echo "The variable 'a' is greater than the variable 'b'."
else
  echo "The variable 'b' is greater than the variable 'a'."
fi

خروجی:

The variable 'b' is greater than the variable 'a'.

استفاده از if-else برای بررسی زوج بودن عدد

گاهی اوقات با شرایطی روبه‌رو می‌شویم که نیاز داریم تا بین اعداد زوج و فرد تمایز قائل شویم. این‌کار را می‌توانیم با دستور if-else و کمک گرفتن از عملگر باقی‌مانده انجام دهیم.

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

#!/bin/bash
n=10
if [ $((n%2))==0 ]
then
  echo "The number is even."
else
  echo "The number is odd."
fi

خروجی:

The number is even

همان‌طور که در کد بالا می‌بینید، بخشی از شرط را داخل دو براکت قرار داده‌ایم. به دلیل که می‌خواهیم عملگر باقی‌مانده قبل از بررسی شرط انجام شود. علاوه بر این، قرار دادن شرط داخل دو براکت باعث می‌شود که دستورات به سبک زبان C اجرا شوند.

اسکریپت ساده رمز عبور با if-else

تابع if-else به‌علت انعطاف‌پذیری بالا و کاربردهای متنوعش در برنامه‌نویسی مطرح است. در این مثال، می‌خواهیم با استفاده از if-else در شل‌اسکریپت، یک پرامپت ساده برای دریافت رمزعبور بنویسیم.

در این اسکریپت‌، از شما خواسته می‌شود، رمزی وارد کنید و سپس مقدار وارد شده در متغیری به نام pass ذخیره می‌شود. پس از آن با استفاده از شرط if بررسی می‌شود که آیا رمز وارد شده با رمز از پیش‌تعیین شده مطابقت دارد یا خیر.

اگر رمز وارد شده صحیح باشد، پیام The password is correc، را نمایش خواهد داد. در غیر این صورت، پیامی مبنی بر نادرست بودن رمز به شما نشان می‌دهد که باید دوباره تلاش کنید.

#!/bin/bash
echo "Enter password"
read pass
if [ $pass="password" ]
then
  echo "The password is correct."
else
  echo "The password is incorrect, try again."
fi
bash-password
برای آشنایی و استفاده از Grep و عبارات منظم برای جستجوی الگوهای متن در لینوکس، مقاله زیر را بخوانید.
استفاده از Grep و عبارات منظم در لینوکس

چطور از elif برای بررسی چندین شرط در bash استفاده کنیم؟

زمانی که نیاز دارید چندین شرط را به‌صورت پشت‌سرهم بررسی کنید، استفاده از if-else تو در تو (nested) می‌تواند کد را پیچیده و ناخوانا کند. اینجاست که دستور elif (مخفف else if) وارد عمل می‌شود.

با elif می‌توانید چندین شرط را به شکلی ساخت‌یافته‌تر و خواناتر بررسی کنید، بدون اینکه مجبور شوید از چندین بلاک if-else تو در تو استفاده کنید.

در شل اسکریپت‌ها، سینتکس استفاده از elif به شکل زیر است:

#!/bin/bash
grade=85
if [ $grade -ge 90 ]; then
  echo "Grade: A"
elif [ $grade -ge 80 ]; then
  echo "Grade: B"
elif [ $grade -ge 70 ]; then
  echo "Grade: C"
else
  echo "Grade: F"
fi

در این مثال، اسکریپت مقدار نمره را بررسی می‌کند و بر اساس آن، حرف نمره (Grade Letter) مناسب را چاپ می‌کند:

  • اگر نمره ۹۰ یا بیشتر باشد، خروجی خواهد بود: Grade: A
  • اگر نمره ۸۰ یا بیشتر باشد (ولی کمتر از ۹۰)، خروجی خواهد بود: Grade: B
  • اگر نمره ۷۰ یا بیشتر باشد (ولی کمتر از ۸۰)، خروجی خواهد بود: Grade: C
  • و در نهایت، اگر هیچ‌یک از شرایط بالا برقرار نباشد، یعنی نمره کمتر از ۷۰ باشد، خروجی خواهد بود: Grade: F

این ساختار نمونه‌ای مناسب از کاربرد elif در شل‌اسکریپت‌ها برای تصمیم‌گیری مرحله‌ای است.

نحوه استفاده از if-else برای تصمیمات دودویی در bash

در دنیای برنامه‌نویسی همه چیز با تصمیم‌گیری شروع می‌شود؛ دستورات if-else رایج‌ترین روش برای پیاده‌سازی این نوع تصمیم‌گیری‌ها در شل‌اسکریپت‌ها هستند. تصمیم‌گیری دودویی، انتخاب میان دو گزینه است، مثل درست یا غلط، بله یا خیر، یا ۰ و ۱. با دستور if-else می‌توانیم بر اساس نتیجه یک شرط، بلوک‌های متفاوتی از کد را اجرا کنیم.

برای مثال، فرض کنید می‌خواهید بررسی کنید که آیا یک فایل خاص وجود دارد یا نه، و بر اساس آن یک پیام نمایش دهید. در چنین حالتی می‌توانید از اسکریپت زیر استفاده کنید:

#!/bin/bash
file_path="/path/to/your/file.txt"
if [ -f "$file_path" ]; then
  echo "The file exists."
else
  echo "The file does not exist."
fi

در این مثال، سکریپت با استفاده از گزینه -f بررسی می‌کند که آیا فایل موردنظر وجود دارد یا نه. اگر وجود داشته باشد، پیام The file exist، نمایش داده می‌‎شود. در غیر این صورت خروجی اسکریپت این خواهد بود: The file does not exist

روش بالا یکی از ساده‌ و پرکاربردترین تکنیک‌ها برای بررسی وجود فایل در اسکریپت‌های شل می‌باشد.

آموزش کاربردی دستور sed در لینوکس + (راهنمای کامل) را در مقاله زیر مطالعه کنید.
دستور sed در لینوکس

ساختن دستورات if-else تو در تو برای شرایط پیچیده

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

در ادامه، مثالی از یک اسکریپت bash را می‌بینید که بررسی می‌کند آیا یک عدد داخل یک بازه مشخص قرار دارد یا نه:

#!/bin/bash
num=10
if [ $num -ge 5 ]; then
  if [ $num -le 15 ]; then
    echo "The number is within the range."
  else
    echo "The number is above the range."
  fi
else
  echo "The number is below the range."
fi

در مثال بالا، اسکریپت ابتدا بررسی می‌کند که آیا دد بزرگ‌تر یا مساوی ۵ است یا نه. اگر این شرط برقرار باشد، سپس بررسی می‌کند که آیا عدد کمتر یا مساوی ۱۵ است. اگر هر دو شرط درست باشند، پیامی با عنوان The number is within the range درخروجی چاپ می‌شود.

برای آشنایی با خط فرمان لینوکس و تمام جزئیات آن، مقاله زیر را می‌توانید مطالعه کنید.
خط فرمان لینوکس

اسکریپت شل برای چک کردن وجود فایل‌ها

بررسی وجود فایل و دسترسی‌های آن یکی از کارهای رایج در شل‌اسکریپت‌ها است. با استفاده از دستورات if-else می‌توانید این شرایط را ارزیابی کرده و اقدامات مناسب را انجام دهید.

در اینجا مثالی از اسکریپتی آورده‌ایم که بررسی می‌کند آیا یک فایل وجود دارد و دارای دسترسی خواندن است:

#!/bin/bash
file_path="/path/to/your/file.txt"
if [ -f "$file_path" ]; then
  if [ -r "$file_path" ]; then
    echo "The file exists and is readable."
  else
    echo "The file exists but is not readable."
  fi
else
  echo "The file does not exist."
fi

در این مثال، اسکریپت ابتدا با استفاده از آزمایش -f بررسی می‌کند که آیا فایل وجود دارد یا خیر. اگر فایل موجود باشد، سپس با استفاده از آزمایش -r بررسی می‌کند که آیا فایل دسترسی خواندن دارد. در صورتی که هر دو شرط برقرار باشد، پیامی با متن “The file exists and is readable” نمایش داده می‌شود. اگر فایل موجود باشد ولی دسترسی خواندن نداشته باشد، پیامی با متن “The file exists but is not readable” چاپ می‌شود. اگر فایل اصلاً وجود نداشته باشد، پیامی با متن “The file does not exist” نمایش داده خواهد شد.

آموزش کامل دستور passwd در لینوکس برای تغییر پسورد سرور را در مقاله زیر مطالعه کنید.
آموزش دستور passwd

چطور ورودی‌ کاربر را در شل اسکریپت اعتبارسنجی کنیم؟

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

یک مثال کاربردی و ساده را در اسکریپت زیر مشاهده کنید که ورودی‌های کاربر را برای ماشین حساب ساده بررسی و چک می‌کند:

#!/bin/bash
echo "Enter the first number:"
read num1
echo "Enter the second number:"
read num2

if [[ $num1 =~ ^[0-9]+$ ]] && [[ $num2 =~ ^[0-9]+$ ]]; then
  echo "Both numbers are valid."
  # Perform calculations here
else
  echo "One or both numbers are invalid. Please enter valid numbers."
fi

در مثال بالا، اسکریپت از کاربر می‌خواهد دو عدد وارد کند. سپس با استفاده از عبارات منظم (regular expressions) بررسی می‌کند که آیا هر دو ورودی عدد معتبر هستند یا نه. اگر هر دو ورودی معتبر باشند، پیام Both numbers are valid.چاپ می‌شود و می‌توان عملیات محاسباتی رو ادامه داد. اما اگر یکی از ورودی‌ها نامعتبر باشه، پیام One or both numbers are invalid. Please enter valid numbers. را در خروجی خواهید دید.

در مقاله زیر، دستور‌ات لینوکس برای مشاهده و مرتب‌سازی فایل‌ها را از دست ندهید.
دستور‌های مهم لینوکس

جمع‌بندی

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

امیدواریم این آموزش از لیارا توانسته باشد به شما کمک کند تا نحوه استفاده از دستور if-else را به‌طور کامل درک کنید:)

با سرور مجازی ابری لیارا، سرور خود را با بالاترین عملکرد و امنیت، به‌راحتی مدیریت کنید!
✅ مقیاس‌پذیری بالا ✅ منابع اختصاصی و قابل تنظیم ✅ پشتیبانی 24/7✅ هزینه به‌صرفه ✅ استقرار سریع
خرید سرور مجازی ابری لیارا

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

چگونه از شرط if در شل‌اسکریپت استفاده کنیم؟

برای استفاده از شرط if در یک شل‌اسکریپت، می‌توانید از سینتکس پایه‌ای دستور if استفاده کنید. در اینجا یک مثال آورده شده است:

if [ condition ]; then
  # code to execute if condition is true
fi

برای مثال، برای بررسی اینکه آیا یک فایل وجود دارد:

if [ -f file.txt ]; then
  echo "File exists."
fi

چطور یک دستور if در شل اسکریپت بنویسم؟

برای نوشتن یک دستور if در شل‌اسکریپت، از ساختار پایه‌ای دستور if به شکل زیر استفاده کنید:

if [ condition ]; then
  # code to execute if condition is true
else
  # code to execute if condition is false
fi

برای مثال، برای بررسی اینکه متغیر بزرگتر از 10 باشد:

if [ $var -gt 10 ]; then
  echo "Variable is greater than 10."
else
  echo "Variable is not greater than 10."
fi

چگونه چند شرط if را در شل اسکریپت بنویسیم؟

برای نوشتن چند شرط در شل‌اسکریپت، از عبارت‌های elif به شکل زیر استفاده کنید:

if [ condition1 ]; then
  # code to execute if condition1 is true
elif [ condition2 ]; then
  # code to execute if condition1 is false and condition2 is true
else
  # code to execute if all conditions are false
fi

برای مثال، برای بررسی اینکه آیا یک متغیر در یک بازه‌ی مشخص قرار دارد یا نه، از ساختار if-elif-else استفاده کنید:

if [ $var -ge 5 ] && [ $var -le 15 ]; then
  echo "Variable is within the range."
elif [ $var -lt 5 ]; then
  echo "Variable is less than 5."
else
  echo "Variable is greater than 15."
fi

چگونه شرط‌های پیچیده را در اسکریپت‌های شل مدیریت کنم؟

مدیریت شرط‌های پیچیده در اسکریپت‌های شل را می‌توانید با استفاده از دستورهای if تو در تو (nested if)، دستور case یا عملگرهای منطقی انجام دهی. در ادامه مثالی از استفاده از عملگرهای منطقی آورده‌ایم:

if [ $var -ge 5 ] && [ $var -le 15 ]; then
  echo "Variable is within the range."
elif [ $var -lt 5 ] || [ $var -gt 15 ]; then
  echo "Variable is outside the range."
fi

عملگر == در اسکریپت شل چیست؟

در اسکریپت‌های شل، عملگر == برای مقایسه‌ی رشته‌ای (string comparison) استفاده می‌شود. این عملگر بررسی می‌کند که آیا رشته‌های دو طرف آن با هم برابر هستند یا نه. مثال:

if [ "$var" == "value" ]; then
  echo "Variable is equal to 'value'."
fi

توجه داشته باشید که در اسکریپت‌های شل، عملگر == برای مقایسه‌های عددی استفاده نمی‌شود. برای مقایسه‌های عددی، باید از عملگرهای -eq, -ne, -gt, -lt, -ge و -le استفاده کنید.

  • -eq : برابر با
  • -ne : نابرابر با
  • -gt : بزرگ‌تر از
  • -lt : کوچک‌تر از
  • -ge : بزرگ‌تر یا برابر با
  • -le : کوچک‌تر یا برابر با

جایگزین دستورات if-else در اسکریپت‌های شل چیست؟

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

case $var in
  1)
    echo "Variable is 1."
    ;;
  2)
    echo "Variable is 2."
    ;;
  *)
    echo "Variable is neither 1 nor 2."
    ;;
esac

این مثال مقدار متغیر $var را بررسی کرده و بر اساس مقدار آن، بلوک‌های مختلف کد را اجرا می‌کند.

به اشتراک بگذارید

برچسب‌ها: