فهرست مطالب
چکیده
پس از به پایان بردن این فصل، قادر خواهید بود که
از حلقههای for و while و until استفاده کنید و تصمیم بگیرید که کدام حلقه مناسب کدام موقعیت است.
فرمانهای داخلی break و continue از Bash را به کار ببرید.
با استفاده از دستور select اسکریپتهایی بنویسید.
اسکریپتهایی بنویسید که تعداد شناسههای متغیری دریافت کند.
حلقه for اولین حلقه از سه ساختار حلقهای پوسته است. این حلقه اجازه میدهد لیستی از کمیتها تعیین شود. لیستی از دستورات برای هر یک از کمیتهای این لیست اجرا میشوند.
دستور زبان این حلقه به این شکل است:
for
NAME
[in LIST ]; do COMMANDS; done
اگر [in LIST] در ترکیب حاضر نباشد، با جمله in $@
جایگزین میشود و for دستورات COMMANDS را هر بار برای یکی از پارامترهای موضعی برقرار شده، اجرا میکند( بخشی به نام«پارامترهای خاص» و بخشی به نام«بررسی شناسههای خطفرمان» را ملاحظه کنید).
کد برگشتی، کد خروج آخرین فرمان اجرا شده میباشد. اگر هیچ فرمانی اجرا نشده باشد، چونکه LIST
به هیچ موردی بسط نیافته است، کد برگشتی صفر است.
NAME
میتواند هر نام متغیری باشد، اگر چه خیلی اوقات از i
استفاده میشود. LIST
میتواند لیستی از کلمات، رشتهها یا اعداد باشد که که به صورت لفظی یا تولید شده در اثر اجرای یک فرمان باشند. COMMANDS برای اجرا میتواند هر دستور سیستم عامل، اسکریپت، برنامه یا دستورات پوسته باشد. در اولین اجرای حلقه، NAME
برابر اولین مورد در LIST
تنظیم میشود. دومین مرتبه، مقدار آن برابر دومین مورد از لیست قرار میگیرد، و به همین ترتیب. حلقه تا موقعی که NAME
هر یک از مقادیر LIST
را گرفته باشد و موردی در LIST
باقی نمانده باشد، تکرار میشود.
مورد اول مثال خطفرمانی است که نمایش دهنده کاربرد حلقه for برای تهیه یک کپی از هر فایل .xml
است. پس از صدور فرمان، شروع کار با فایلهای اصلی امن است :
[carol@octarine ~/articles]
ls*.xml
file1.xml file2.xml file3.xml[carol@octarine ~/articles]
ls*.xml
>list
[carol@octarine ~/articles]
fori
in`cat list`
; do cp"$i" "$i".bak
; done[carol@octarine ~/articles]
ls*.xml*
file1.xml file1.xml.bak file2.xml file2.xml.bak file3.xml file3.xml.bak
این یکی فایلهای دایرکتوری /sbin
که فقط از نوع متن ساده هستند و اسکریپتهای احتمالی را لیست میکند:
for i
in `ls /sbin`
; do file /sbin/$i
| grep ASCII
; done
مورد پایین اسکریپت کاربردی ویژهای برای تبدیل فایلهای HTML مطابق یک قالب معین به فایلهای PHP میباشد. The conversion is done by تبدیل با بیرون کشیدن ۲۵ سطر اول و ۲۱ سطر آخر، جایگزینی این سطرها با دو(tag) دستور PHP که سطرهای سرآیند و پایانی را فراهم میکنند:
[carol@octarine ~/html]
cathtml2php.sh
#!/bin/bash # specific conversion script for my html files to php LIST="$(ls *.html)" for i in "$LIST"; do NEWNAME=$(ls "$i" | sed -e 's/html/php/') cat beginfile > "$NEWNAME" cat "$i" | sed -e '1,25d' | tac | sed -e '1,21d'| tac >> "$NEWNAME" cat endfile >> "$NEWNAME" done
نظر به اینکه ما در اینجا شمارش سطر انجام نمیدهیم، راهی برای دانستن شماره سطری که از آنجا تارسیدن به انتها شروع به حذف کنیم، نیست. این مشکل با استفاده از tac، که سطرها را در فایل برعکس میکند، حل شده است.
فرمان basename | |
---|---|
به جای استفاده از sed جهت تعویض پسوند |
کاراکترهای عجیب | |
---|---|
اگر شمابسط لیستها به نام فایلهای دارای فاصله و سایر کاراکترهای غیرعادی را انجام دهید، با مشکلاتی مواجه خواهید شد. یک ساختار بیشتر مطلوب برای تهیه لیست، استفاده از ویژگی جانشینی( globbing ) پوسته است، مانند این: for i in $PATHNAME/*; do commands done |