Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

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



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.