فرمان date به سادگی احضار شده، تاریخ و زمان را در stdout نمایش میدهد. جاییکه این فرمان جالب میشود در گزینههای تجزیه و قالببندی آن است.
#!/bin/bash #به کارگیری فرمان date echo "The number of days since the year's beginning is `date +%j`." #برای فراخوانی قالببندی به یک + پیشوند احتیاج دارد. #%j روز سال را ارایه میکند. echo "The number of seconds elapsed since 01/01/1970 is `date +%s`." #%s تعداد ثانیههای سپری شده از شروع «UNIX epoch» را #+ارایه میکند،اما این چگونه مورد استفاده واقع میشود؟ prefix=temp suffix=$(date +%s) #گزینه +%s با date مختص GNU است. filename=$prefix.$suffix echo "Temporary filename = $filename" #جهت ایجاد نامفایلهای موقتی «انحصاری و تصادفی» عالی است #+حتی بهتر از به کار بردن $$ است. #برای گزینههای بیشتر قالببندی، صفحه man فرمان date را بخوانید. exit 0
گزینه -u زمان هماهنگ شده جهانی UTC (Universal Coordinated Time) را ارایه میکند.
bash$ date Fri Mar 29 21:07:39 MST 2002 bash$ date -u Sat Mar 30 04:07:42 UTC 2002
این گزینه محاسبه زمان میان دو تاریخ مختلف را تسهیل میکند.
#!/bin/bash # #مولف: Nathan Coulter #با مجوز در راهنمای ABS استفاده شده (تشکر!). MPHR=60 # HPD=24 # diff () { printf '%s' $(( $(date -u -d"$TARGET" +%s) - $(date -u -d"$CURRENT" +%s))) # } CURRENT=$(date -u -d '2007-09-01 17:30:24' '+%F %T.%N %Z') TARGET=$(date -u -d '2007-12-25 12:30:00' '+%F %T.%N %Z') # printf '\nIn 2007, %s ' \ "$(date -d"$CURRENT + $(( $(diff) /$MPHR /$MPHR /$HPD / 2 )) days" '+%d %B')" # printf 'was halfway between %s ' "$(date -d"$CURRENT" '+%d %B')" printf 'and %s\n' "$(date -d"$TARGET" '+%d %B')" printf '\nOn %s at %s, there were\n' \ $(date -u -d"$CURRENT" +%F) $(date -u -d"$CURRENT" +%T) DAYS=$(( $(diff) / $MPHR / $MPHR / $HPD )) CURRENT=$(date -u -d"$CURRENT +$DAYS days" '+%F %T.%N %Z') HOURS=$(( $(diff) / $MPHR / $MPHR )) CURRENT=$(date -u -d"$CURRENT +$HOURS hours" '+%F %T.%N %Z') MINUTES=$(( $(diff) / $MPHR )) CURRENT=$(date -u -d"$CURRENT +$MINUTES minutes" '+%F %T.%N %Z') printf '%s days, %s hours, ' "$DAYS" "$HOURS" printf '%s minutes, and %s seconds ' "$MINUTES" "$(diff)" printf 'until Christmas Dinner!\n\n' # # #تابع diff () را طوری بازنویسی کنید که به جای استفاده #از متغیرهای عمومی، پارامترهای صادر شده را بپذیرد.
فرمان date دارای گزینههای خروجی بسیاری است. برای مثال %N بخش نانوثانیههای زمان فعلی را ارایه میکند. یک مورد استفاده جالب این گزینه، در تولید اعداد صحیح تصادفی است.
date +%N | sed -e 's/000$//' -e 's/^0//' # # # #+ # # #
گزینههای بسیار بیشتری وجود دارد (man date را امتحان کنید).
date +%j # date +%k%M # #پارامتر TZ ارجحیت بر منطقه ساعتی پیشفرض (time zone) را میسر میکند. date # TZ=EST date # #با تشکر از Frank Kannemann و Pete Sjoberg برای این نکته. SixDaysAgo=$(date --date='6 days ago') OneMonthAgo=$(date --date='1 month ago') OneYearAgo=$(date --date='1 year ago')
همچنین مثال 3-4 و مثال A-43 را مشاهده نمایید.
Time zone dump: زمان را در یک منطقه ساعتی مشخص شده بازتاب میدهد.
bash$ zdump EST EST Tue Sep 18 22:09:22 2001 EST
آمار زمانسنجی تفصیلی برای اجرای یک فرمان را بیرون میدهد.
time ls -l / چیزی مشابه این را ارایه میدهد:
real 0m0.067s user 0m0.004s sys 0m0.005s
همچنین فرمان بسیار مشابه times در بخش قبلی را ملاحظه کنید.
از زمان نگارش 2.0 در Bash، که time یک کلمه رزرو شده پوسته گردیده، رفتار آن در یک لوله اندکی تغییر یافته است. |
برنامه سودمندی برای به روزرسانی زمان ویرایش-دستیابی یک فایل به زمان جاری سیستم یا یک زمان تعیین شده، اما همچنین برای ایجاد یک فایل جدید نیز مفید است. فرمان touch zzz، بر فرض آن که zzz از قبل موجود نباشد، فایل جدیدی به طول صفر، به نام zzz ایجاد میکند. نشانهگذاری زمان فایلهای خالی به این روش، برای ذخیره کردن اطلاعات تاریخ مفید است، برای مثال در پیگردی زمانهای تغییر و تبدیل روی یک پروژه.
فرمان touch معادل با : >> newfile یا >> newfile (برای فایلهای معمولی) است. |
قبل از انجام یک cp -u (کپی/به روزرسانی)، از touch برای به روزرسانی نشانه زمان فایلهایی که نمیخواهید رونویسی گردند استفاده کنید. به عنوان یک نمونه، اگر دایرکتوری با نام /home/bozo/tax_audit شامل فایلهایی با نامهای spreadsheet-051606.data، spreadsheet-051706.data، و spreadsheet-051806.data باشد، آنوقت انجام یک touch spreadsheet*.data این فایلها را از رونویسی شده به وسیله فایلهایی با همین نامها در جریان اجرای فرمان زیر محافظت میکند. cp -u /home/bozo/financial_info/spreadsheet*data /home/bozo/tax_audit |
at یک فرمان کنترل job است که مجموعه تعیین شدهای از فرمانها را در یک زمان مشخص شده اجرا میکند. به طور ظاهری، به cron شباهت دارد، اما at بویژه برای اجرای یک مجموعه فرمان در یک نوبت مفید است.
at 2pm January 15 برای دریافت مجموعه فرمانهایی که در آن زمان باید اجرا شوند اعلام آمادگی میکند. این فرمانها باید سازگار با اسکریپت پوسته باشند، چون در اصل، کاربر در هر نوبت یک سطر از یک اسکریپت اجرا شونده را تایپ میکند. ورودی با یک Ctl-D خاتمه مییابد.
با استفاده از گزینه -f یا تغییر مسیر ورودی (<)، فرمان at لیستی از فرمانها را از یک فایل میخواند. این فایل یک اسکریپت پوسته قابل اجرا است، البته، به هر حال، باید غیر محاورهای باشد. بویژه ضمیمه کردن یک فرمان run-parts در فایل برای اجرای مجموعه گوناگونی از اسکریپتها، زبردستانه است.
bash$ at 2:30 am Friday < at-jobs.list job 2 at 2000-10-27 02:30
batch یک فرمان کنترل job مشابه با at است، اما یک لیست فرمان را موقعی اجرا میکند که بارگذاری سیستم به پایین .8 افت میکند. مانند at، این نیز با گزینه -f میتواند فرمانها را از یک فایل بخواند.
یک تقویم ماهانه را به طور مرتب و آراسته در stdout چاپ میکند. اگر بخواهید، تقویم سال جاری یا محدوده بزرگی از سالهای گذشته و آینده را چاپ میکند.
این معادل پوسته برای یک wait loop است. برای یک تعداد ثانیه تعیین شده توقف میکند، هیچ کاری انجام نمیدهد. میتواند برای زمانسنجی یا در پردازشهای درحال اجرای پسزمینه، کنترل گهگاهی یک رویداد (نمونهبرداری)، همچون در مثال 32-6، مفید باشد.
sleep 3 # سه ثانیه متوقف میشود
پیشفرض فرمان sleep ثانیه است، اما دقیقه، ساعت، و روز نیز میتواند تعیین گردد.
sleep 3 h # |
برای اجرای فرمانها در فواصل زمانی، ممکن است فرمان watch نسبت به sleep انتخاب بهتری باشد. |
Microsleep (حرف u میتواند به صورت یونانی mu، یا پیشوند micro- خوانده شود). این درست مانند sleep در بالا است، اما در وقفههای میکروثانیهای توقف میکند. میتواند در زمانسنجی ریزبینانه، یا برای نمونهبرداری از پیشرفت یک پردازش در فاصلههای بسیار نزدیک بهم به کار برود.
usleep 30 #
این فرمان قسمتی از بسته initscripts / rc-scripts در Red Hat است.
فرمان usleep بویژه زمانبندی دقیقی فراهم نمیکند، و از اینرو برای حلقههای زمانبندی حساس مناسب نیست. |
فرمان hwclock ساعت سختافزاری سیستم را دستیابی یا میزان میکند. استفاده از برخی گزینههای آن نیازمند مزایای root است. هنگام بالا آمدن سیستم، فایل راهاندازی سیستم /etc/rc.d/rc.sysinit برای تنظیم وقت سیستم از روی ساعت سختافزاری، فرمان hwclock را به کار میبرد.
فرمان clock مترادفی برای hwclock است.