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

 

начало

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

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

семинари ...

документи

как да ...

 

 

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

Re: lug-bg: yes/no Скрипт


  • Subject: Re: lug-bg: yes/no Скрипт
  • From: George Danchev <danchev@xxxxxxxxx>
  • Date: Tue, 5 Oct 2004 20:10:56 +0300

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
> $TMPFILE 
dialog --menu "How R U Asker ? \n" 25 80 15 \
"ok"    "I am OK" \
"notok" "I am not OK" 2> $TMPFILE 
while [ 0 ] ; do \
 if   [ "`cat $TMPFILE`" = "" ] ; \
 then > $TMPFILE ; \
 exit 0
 elif [ "`cat $TMPFILE`" = "ok" ] ; \
 then > $TMPFILE ; \
  dialog --msgbox "Said OK" 8 15 ; \
  exit 0
 elif [ "`cat $TMPFILE`" = "notok" ] ; \
 then > $TMPFILE ; \
  dialog --msgbox "Said not OK" 8 15 ; \
  exit 0
 else
  exit 0
 fi
 > $TMPFILE ; \
done

Е, куцото тука е, че има малко bash-изъм и, че стойността на отговора се 
предава през файл, че не мога се сетя как ще стане през променлива ... но 
както и да е, де ... идеята е, че с диалог се дава шанс за избор само на 
предварително избрани от нас входни данни и приключваме с една врътка.

И разбира се с --yesno ще сме още по-кратки и ясни ;-).
(няма башизъм (zsh, dash, ash) и писане по файлове ... е на {t}csh им не е 
ясно това;-)

#!/bin/sh
dialog --yesno "Are you OK ?" 15 61
case $? in
  0) echo "He is OK.";;
  1) echo "He is not OK.";;
  255) echo "He dislikes me. ESC pressed.";;
esac

Та, така ;-) 

-- 
pub 4096R/0E4BD0AB  2003-03-18  <keyserver.bu.edu ; pgp.mit.edu>
fingerprint 1AE7 7C66 0A26 5BFF DF22 5D55 1C57 0C89 0E4B D0AB 
============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================



 

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

 

линукс за българи
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.