جایگزین ساده Expect
این یک جایگزین ساده برای expect است. تعدادی از افراد از من پرسیدهاند، این چطور تکمیل شده است، و ازنمونهای که در نکتهها و اشارهها نشان دادم که ازنرمافزار مرورگر سان میکرو سیستم استفاده شده است، ملهم گردیده ، در اینجا expect یک نمونه بسیار ساده ازآن وجود دارد.ترکیب دستوری expect.txt خیلی ساده است:
دستور Sبنا براین یک دستور با "S" ( برای ارسال ) نشانهگذاری میشود، و نتیجه مورد انتظار با "E" علامتگذاری میگردد. نظر به اینکه، برخی دستورات برای تکمیل،میتوانند زمان بگیرند، امکان تعیین یک زمان تأخیر قبل از برآورد نتیجه مورد انتظار، وجود دارد : "E10 $" قبل از expect نمودن علامت دلار،به مدت ۱۰ ثانیه تأخیر میکند.
E[delay] expected_text
اگر متن مورد انتظار پیدا نشود، اسکریپت یک ثانیه صبر میکند و دوباره امتحان میکند، و بعد دو ثانیه صبر میکند، بعد ۳ ثانیه، تا اینکه یا متن مورد انتظار پیدا شود، یا به یک حداکثر - که با متغیر MAX_WAITS تعیین میشود - برسد. تأخیر اختیاری است، بنابراین "E $" فوراً یک اعلان نمایش میدهد.
توجه نمایید، اگر MAX_WAITS=5
، حد اکثر تأخیر پنج ثانیه نخواهد بود، بلکه 1+2+3+4+5=15 ثانیه میشود.
#!/bin/sh # expect.sh | telnet > file1 host=127.0.0.1 port=23 file=file1 MAX_WAITS=5 echo open ${host} ${port} while read l do c=`echo ${l}|cut -c1` if [ "${c}" == "E" ]; then expected=`echo ${l}|cut -d" " -f2-` delay=`echo ${l}|cut -d" " -f1|cut -c2-` if [ -z "${delay}" ]; then sleep ${delay} fi res=1 i=0 while [ "${res}" -ne "0" ] do tail -1 "${file}" 2>/dev/null | grep "${expected}" > /dev/null res=$? sleep $i i=`expr $i + 1` if [ "${i}" -gt "${MAX_WAITS}" ]; then echo "ERROR : Waiting for ${expected}" >> ${file} exit 1 fi done else echo ${l} |cut -d" " -f2- fi done < expect.txtاین اسکریپت به این شکل اجرا میشود:
$ expect.sh | telnet > file1این یک فایل ایجاد میکند، file1 را، که شامل یک رونوشت از جلسه کاری است. در این حالت، که پردازش لاگین خواهد بود یک ls از /tmp، و خروجی cal. به عنوان مثال:
telnet> Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. declan login: steve Password: Last login: Thu May 30 23:52:50 +0100 2002 on pts/3 from localhost. No mail. steve:~$ ls /tmp API.txt cgihtml-1.69.tar.gz orbit-root cal a.txt cmd.txt orbit-steve apache_1.3.23.tar.gz defaults.cgi parser.c b.txt diary.c patchdiag.xref background.jpg drops.jpg sh-thd-1013541438 blocks.jpg fortune-mod-9708.tar.gz stone-dark.jpg blue3.jpg grey2.jpg water.jpg c.txt jpsock.131.1249 steve:~$ cal May 2002 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 steve:~$ exit logout
Steve Parker نوشته Bourne و Bash راهنمای آموزشی اسکریپت نویسی
ترجمه محمود پهلوانی
لطفاً برای بهتر دیدن صفحه از فایرفاکس استفاده کنید