Re: lug-bg: yes/no Скрипт
- Subject: Re: lug-bg: yes/no Скрипт
- From: Peter Pentchev <roam@xxxxxxxxxxx>
- Date: Wed, 6 Oct 2004 12:37:13 +0300
On Tue, Oct 05, 2004 at 08:10:56PM +0300, George Danchev wrote:
> On Tuesday 05 October 2004 15:56, Aleksander Valchev wrote:
>
> Здрасти,
>
> > Искам да ви питам дали този скрипт е горе-долу добре написан.
> > Макар, че се вижда yesno е функция която задава въпрос на който може да се
> > отговори само с y,Y,n,N. При въвеждане на друг символ въпросът се повтаря.
> >
> > Ако може да ми кажете дали е правилно и извикването на функцията,
> > получаването на резултата от изпълнението й и обработката на резултата т.е.
> > последните редове.
> >
> > Извинявам се за въпроса но script-ове не обичам да пиша (предпочитам C/C++
> > и т.н.), но сега ми се налага, а нещо което не ти е толкова приятно
> > по-трудно се справящ с него.
> >
> > Благодаря предварително за отговорите.
> >
> > А ето и част от скрипта.
> >
> > # Ask question (passed as parameter $1) and
> > # returns 1 if user enter "y" or "Y" and 0 if user enter "n" or "N"
> > # Do not allow to enter other characters (repeats question until y,Y,n,N)
> > yesno()
> > {
> > Message=$1 # Question to ask
> > while [ true ]; do
> > echo -n "$Message "
> > read answer
> > if [ "$answer" ]; then
> > case "$answer" in
> > "y"|"Y") # User enter YES, return 1
> > return 1
> > ;;
> > "n"|"N") # User enter NO, return 0
> > return 0
> > ;;
> > *) # User do not know what he/she is enter, continue repeating
> > echo "Please enter [y,Y] or [n,N] "
> > ;;
> > esac
> > fi # user enter y, n ot something else
> > done # while true
> > }
> >
> >
> > yesno "Are you ok? [y/n]"
> > result="$?"
> > if [ $result -eq 1 ]; then
> > echo "OK"
> > fi
>
> Това е добре ;-) ... но аз си имам едно такова верую: ако може вместо да чакам
> юзъра да се будалка с отговора и да се върти с цикъл, по-добре аз да му
> предложа възможните отговори и да приключим сагата на първата итерация за да
> продължим с обработването на задачите. Е това не винаги е подходящо де....
> Например, може да използваш боксовете от dialog(1) и подобни:
>
> #!/bin/bash
> TMPFILE=reply
По-добре ползвай mktemp(1) на операционни системи, които го имат (почти
всички напоследък) :) Също, хубаво е и да изтриваш временния файл, след
като си свършиш работата с него; нещо като..
REPLYFILE=`mktemp -t reply.XXXXXX`
trap "rm -f $REPLYFILE" HUP INT TERM EXIT
Така си спокоен :)
Ако искаш да си още по-спокоен, че никой външен процес, да не говорим за
друг потребител, няма да ти ровичка по файловете, можеш да отидеш и още
по-далеч:
REPLYDIR=`mktemp -d -t reply.XXXXXX`
trap "rm -rf $REPLYDIR" HUP INT TERM EXIT
REPLYFILE=`mktemp -t $REPLYDIR/reply.XXXXXX`
Поздрави,
Петър
--
Peter Pentchev roam@xxxxxxxxxxx roam@xxxxxxxx roam@xxxxxxxxxxx
PGP key: http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553
This sentence was in the past tense.
Attachment:
pgpkia1qnescx.pgp
Description: PGP signature
|