پرش به محتویات

درسنامه ۳-۸: ساخت منوی ساده با case و حلقه

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

دستور case برای چند حالت مختلف

ساختار کلی:

case مقدار in
  الگو۱)
    دستورات
    ;;
  الگو۲)
    دستورات
    ;;
  *)
    دستورات پیش‌فرض
    ;;
esac

مثال ساده:

#!/bin/bash

read -p "Enter a letter (a/b): " LETTER

case "$LETTER" in
  a)
    echo "You chose option A."
    ;;
  b)
    echo "You chose option B."
    ;;
  *)
    echo "Unknown option."
    ;;
esac

ساخت منوی متنی ساده

حالا case را با یک حلقهٔ while ترکیب می‌کنیم تا منویی بسازیم که چند بار نمایش داده می‌شود تا وقتی کاربر انتخاب کند خارج شود.

#!/bin/bash

while true
do
  echo "==== Simple Menu ===="
  echo "1) Show current date"
  echo "2) Show current directory"
  echo "3) List files"
  echo "4) Exit"

  read -p "Choose an option [1-4]: " CHOICE

  case "$CHOICE" in
    1)
      date
      ;;
    2)
      pwd
      ;;
    3)
      ls
      ;;
    4)
      echo "Exiting... Bye!"
      break
      ;;
    *)
      echo "Invalid option, please try again."
      ;;
  esac

  echo ""  # یک خط خالی برای خوانایی
done

در این مثال: - منو داخل یک حلقهٔ while true نمایش داده می‌شود. - با case بر اساس گزینهٔ انتخابی، دستور مناسب اجرا می‌شود. - هنگام انتخاب گزینهٔ ۴، پیام خداحافظی چاپ شده و با break از حلقه خارج می‌شویم.

نکات کاربردی

  • می‌توانید برای هر گزینه، یک تابع جداگانه بنویسید (در درس بعد توابع را می‌بینیم).
  • برای جلوگیری از شلوغ شدن خروجی، می‌توانید بعد از اجرای هر گزینه با read -p "Press Enter to continue..." مکث کوتاه ایجاد کنید.

تمرین کوتاه

  • منویی بسازید که گزینه‌هایی مثل «نمایش زمان»، «نمایش فضای آزاد دیسک (با دستور df -h)» و «نمایش ۵ خط آخر یک فایل لاگ» داشته باشد.
  • گزینه‌ای اضافه کنید که نام کاربر را بگیرد و پیام "Hello NAME!" نمایش دهد.

در درس بعد، با توابع در Bash آشنا می‌شویم تا بتوانیم همین منو را تمیزتر و خواناتر بنویسیم.