راهنمای آموزشی اسکریپت نویسی - مقدماتی

لطفا برای بهتر دیدن صفحه از firefox استفاده کنید
Bash Guide for Beginners Machtelt Garrels

راهنمای Bash برای نوآموزان

کاربرد پیشرفته تر if »
« خلاصه

کاربرد جملات case

شرط‌های ساده شده

دستورات if تو در تو ممکن است زیبا باشند، اما به محض اینکه با گروهی از عملیات محتمل برای اجرا مواجه گردید، آنها متمایل به اغتشاش می‌شوند. برای شرایط پیچیده‌تر، از ترکیب case استفاده کنید:

case EXPRESSION in CASE1) COMMAND-LIST;; CASE2) COMMAND-LIST;; ... CASEN) COMMAND-LIST;; esac

هر case یک عبارت منطبق بر یک الگو می‌باشد. دستورات در COMMAND-LIST برای اولین مورد انطباق اجرا می‌شوند. علامت “|” برای جدا نمودن الگوهای چندگانه به کار می‌رود، و عملگر ‎ “)”‎ یک لیست الگو را خاتمه می‌دهد. هر case به‌اضافه دستورات مربوطه‌اش یک قضیهنامیده می‌شود. هر قضیه باید با “;;” خاتمه یابد. هر فرمانcase با جمله esac به پایان می‌رسد.

در مثال، استفاده از caseها را برایارسال پیغام‌های هشدار انتخابی‌تر در اسکریپت disktest.sh به کار برده‌ایم:

anny ~/testdir> cat disktest.sh
#!/bin/bash

# This script does a very simple test for checking disk space.

space=`df -h | awk '{print $5}' | grep % | grep -v Use | sort -n | tail -1 | cut -d "%" -f1 -`

case $space in
[1-6]*)
  Message="All is quiet."
  ;;
[7-8]*)
  Message="Start thinking about cleaning out some stuff.  There's a partition that is $space % full."
  ;;
9[1-8])
  Message="Better hurry with that new disk...  One partition is $space % full."
  ;;
99)
  Message="I'm drowning here!  There's a partition at $space %!"
  ;;
*)
  Message="I seem to be running with an nonexistent amount of disk space..."
  ;;
esac

echo $Message | mail -s "disk report `date`" anny

anny ~/testdir>
You have new mail.

anny ~/testdir> tail -16 /var/spool/mail/anny
From anny@octarine Tue Jan 14 22:10:47 2003
Return-Path: <anny@octarine>
Received: from octarine (localhost [127.0.0.1])
        by octarine (8.12.5/8.12.5) with ESMTP id h0ELAlBG020414
        for <anny@octarine>; Tue, 14 Jan 2003 22:10:47 +0100
Received: (from anny@localhost)
        by octarine (8.12.5/8.12.5/Submit) id h0ELAltn020413
        for anny; Tue, 14 Jan 2003 22:10:47 +0100
Date: Tue, 14 Jan 2003 22:10:47 +0100
From: Anny <anny@octarine>
Message-Id: <200301142110.h0ELAltn020413@octarine>
To: anny@octarine
Subject: disk report Tue Jan 14 22:10:47 CET 2003

Start thinking about cleaning out some stuff.  There's a partition that is 87 % full.

anny ~/testdir>

البته می‌توانستید برنامه mail خودتان را برای کنترل نتایج باز کنید، این فقط برای نمایش دادن آن است که اسکریپت یک پیغام آراسته با سطرهای سرآیند ‎“To:”, “Subject:” , “From:” ارسال می‌کند.

مثال‌های بسیار دیگری از کاربرد دستورات case می‌توانید در دایرکتوری اسکریپت‌های init سیستم خود می‌توانید پیدا کنید. اسکریپت‌های شروع آغازین از case‌های start و stop برای اجرا یا توقف پردازش‌ها استفاده می‌کنند. یک مثال نظری را در بخش بعد می‌توان یافت.

مثال Initscript

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

case "$1" in
        start)
            start
            ;;
         
        stop)
            stop
            ;;
         
        status)
            status anacron
            ;;
        restart)
            stop
            start
            ;;
        condrestart)
            if test "x`pidof anacron`" != x; then
                stop
                start
            fi
            ;;
         
        *)
            echo $"Usage: $0 {start|stop|restart|condrestart|status}"
            exit 1
 
esac

وظایف اجرایی در هر case، از قبیل توقف و شروع برنامه کمکی، به طور جزء به جزء در توابعی تعریف شده‌اند، که منبع آنها این فایل می‌باشد.

/etc/rc.d/init.d/functions

برای اطلاعات بیشتر فصل 11، توابع را ملاحظه کنید.

کاربرد پیشرفته تر if »
« خلاصه
ترجمه محمود پهلوانی