اسکریپت زیر را بازبینی کند. آن را اجرا نمایید، سپس آنچه را انجام میدهد توضیح دهید. اسکریپت را تفسیر کنید و آن را در یک حالت فشردهتر و برازندهتر بازنویسی نمایید.
#!/bin/bash MAX=10000 for((nr=1; nr<$MAX; nr++)) do let "t1 = nr % 5" if [ "$t1" -ne 3 ] then continue fi let "t2 = nr % 7" if [ "$t2" -ne 4 ] then continue fi let "t3 = nr % 9" if [ "$t3" -ne 5 ] then continue fi break #---وقتی شما این سطر را توضیح کنید چه اتفاقی رخ میدهد؟ چرا؟ done echo "Number = $nr" exit 0
#!/bin/bash DIRNAME=/usr/bin FILETYPE="shell script" LOGFILE=logfile file "$DIRNAME"/* | fgrep "$FILETYPE" | tee $LOGFILE | wc -l exit 0
---
اسکریپت زیر را بازبینی و تفسیر کنید. برای راهنماییها، میتوانید به find و stat مراجعه نمایید.
#!/bin/bash #---نویسنده: Nathan Coulter #این کد برای مالکیت همگانی منتشر گردیده است. #نویسند اجازه داد این قطعه کد در این راهنما استفاده شود. find -maxdepth 1 -type f -printf '%f\000' | { while read -d $'\000'; do mv "$REPLY" "$(date -d "$(stat -c '%y' "$REPLY") " '+%Y%m%d%H%M%S' )-$REPLY" done } #هشدار: این اسکریپت را در یک دایرکتوری غیر ضرور موقتی آزمایش کنید. #روی تمام فایلهای آنجا به طریقی تاثیر خواهد نمود.
while read LINE do echo $LINE done < `tail -f /var/log/messages`
او میخواست اسکریپتی برای پیگردی تغییرات در فایل ثبت رخداد سیستم، /var/log/messages بنویسد. متاسفانه، بلوک کد فوق هنگ میکند و کار مفیدی انجام نمیدهد. چرا؟ این کد را چنان اصلاح نمایید که عمل کند. (اشاره: به جای تغییر مسیر دادن stdin حلقه، یک لوله را امتحان کنید.)
---export SUM=0; for f in $(find src -name "*.java"); do export SUM=$(($SUM + $(wc -l $f | awk '{ print $1 }'))); done; echo $SUM
اشاره: ابتدا، کد را به بخشهای به اندازه کافی کوچک تجزیه کنید. آنوقت، به دقت استفاده آن از پرانتزهای دوگانه حسابی، فرمان export ، فرمان find، فرمان
مثال A-10 را تجزیه و تحلیل کنید، و آن را با یک شیوه ساده شده و منطقیتر دوباره سازماندهی کنید. ببینید چند متغیر میتواند حذف گردد، و برای بهینهسازی اسکریپت به منظور افزایش سرعت زمان اجرای آن تلاش کنید.
اسکریپت را طوری تغییر دهید که هر فایل متن اسکی عادی را به عنوان ورودی جهت تولید اولیهاش قبول کند. اسکریپت کاراکترهای اول $ROW*$COL را خواهد خواند، و موارد وجود حرف با صدا را به عنوان سلولهای «زنده» تنظیم میکند. اشاره: از برگردان فاصلهها در فایل ورودی به کاراکترهای خط زیر کسب اطمینان کنید.