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

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

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

حلقه while »
« تغییر جهت ورودی - خروجی و حلقه‌ها

حلقه until

چیست؟

حلقه until خیلی مشابه حلقه while است، به غیر از آنکه اجرای حلقه تا موقعی که TEST-COMMAND در اجرا موفق بشود، ادامه می‌یابد. مادامی‌که این دستور ناموفق است، حلقه ادامه می‌دهد. ترکیب دستوری همان است که برای حلقه while بود:

until TEST-COMMAND; do CONSEQUENT-COMMANDS; done

کد برگشتی، کد خروج آخرین دستور اجرا شده در لیست CONSEQUENT-COMMANDS است، و یا صفر است در صورتیکه فرمانی اجرا نشده باشد. TEST-COMMAND دوباره، می‌تواند هر دستوری با توانایی خروج با یک وضعیت موفق یا ناموفق باشد، و CONSEQUENT-COMMANDS می‌تواند هر دستور UNIX، اسکریپت یا ساختار شل باشد.

به طوری که پیش از این شرح داده‌ایم، کاراکتر « ; » هر جایی که ظاهر شود می‌تواند با یک یا چند کاراکتر سطر جدید جایگزین شود.

مثال‌ها

یک اسکریپت بهبود یافته picturesort.sh ( به بخشی به نام«حلقه‌های while تو در تو»)، که فضای دیسک در دسترس را بررسی می‌کند، نگاه کنید. اگر فضای دیسک کافی نیست، تصویرهای ماه گذشته را حذف می‌کند:

#!/bin/bash

# This script copies files from my homedirectory into the webserver directory.
# A new directory is created every hour.
# If the pics are taking up too much space, the oldest are removed.

while true; do 
	DISKFUL=$(df -h $WEBDIR | grep -v File | awk '{print $5 }' | cut -d "%" -f1 -)

	until [ $DISKFUL -ge "90" ]; do 

        	DATE=`date +%Y%m%d`
        	HOUR=`date +%H`
        	mkdir $WEBDIR/"$DATE"
                                                                                
        	while [ $HOUR -ne "00" ]; do
                	DESTDIR=$WEBDIR/"$DATE"/"$HOUR"
                	mkdir "$DESTDIR"
                	mv $PICDIR/*.jpg "$DESTDIR"/
                	sleep 3600
                	HOUR=`date +%H`
        	done

	DISKFULL=$(df -h $WEBDIR | grep -v File | awk '{ print $5 }' | cut -d "%" -f1 -)
	done

	TOREMOVE=$(find $WEBDIR -type d -a -mtime +30)
	for i in $TOREMOVE; do
		rm -rf "$i";
	done

done

به مقداردهی متغیرهای HOUR و DISKFULL و استفاده از گزینه‌های فرمان ls و date به منظور تهیه لیست صحیح برای TOREMOVE توجه نمایید.

حلقه while »
« تغییر جهت ورودی - خروجی و حلقه‌ها
ترجمه محمود پهلوانی