shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Menu em script


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Menu em script
Date: Thu, 6 Oct 2005 15:44:03 -0300

Opa

Fiz uma subfunção a muuuuito tempo atras chamada super_menu

Como funciona ? Simples:

super_menu -m "mensagem opcoes" \
-p "prompt" \
-n "mensagem opcao invalida" \
-o option1 "comands" \
-o option2 "comands" \
-o option3 "comands" \
-o option4 "comands" \
-o option5 "comands"

para o prompt e a mensagem de opção invalida existem mensagens default.
eu não estou validando se foram colocados os argumentos corretos
(estou assumido que quem usa a função toma cuidado com isto). E se vcs
repetirem uma opção isto só sera adicionado, não sobreescrito.

Se alguem quiser turbinar esta classe, fique a vontade.

por exemplo:

opcao_0(){
echo "sair"
sair=true
}
opcao_1(){
echo "editar"
}
opcao_2(){
echo "deletar"
}
opcao_3(){
echo "consultar"
}

clear
local sair
sair=false
while [ "$sair" != "true" ]
do super_menu -m "0) Sair \n1) Editar \n2) Deletar \n3) Consultar\n" \
-o 0 opcao_0 \
-o 1 opcao_1 \
-o 2 opcao_2 \
-o 3 opcao_3
done

ps: se vc trabalhar com submenus vai entender que o 'local sair' é
muito importante.

Eis o código:

super_menu(){
  local i
  local opt
  local cmd
  local option
  local max
  local found

  local MSG
  local NOKMSG
  local PROMPT

  i=0

  PROMPT="option> "
  NOKMSG="Opcao errada"
  while [ $1 ]
  do
  case $1 in
  -m) shift; MSG="$1"; shift ;;
  -p) shift; PROMPT="$1" ;shift ;;
  -n) shift; NOKMSG="$1" ;shift ;;
  -o) shift; opt[$i]="$1"; shift; cmd[$i]="$1"; i=$((i+1)); shift;;
  esac
  done
  echo -e $MSG
  read -p $PROMPT option
  max=$i
  i=0
  found=false
  while [ $i -lt $max ]
    do [ "${opt[$i]}" = "$option" ] && { found=true; eval "${cmd[$i]}";}
    i=$((i+1))
  done
  [ "$found" != "true" ] && echo $NOKMSG
}


Em 05/10/05, Fabiano Caixeta Duarte<address@hidden> escreveu:
>  Marcos Notari Junior escreveu:
>  > E se alguém tiver uma solução melhor q esta, agradeceria.
>
>  Sugiro que vc use o dialog
> (http://aurelio.net/shell/dialog/) para
>  montar o menu. Funciona via terminal ssh.
>
>  Dá uma olhadinha em trap (help trap) também. Vai ajudar.
>
>  Qq coisa, se depois de reimplementado com isto ainda precisar de uma
>  ajuda, é só falar :)
>
>  Fabiano Caixeta Duarte
>  Consultor em soluções para Redes de Computadores
>  Ribeirão Preto - SP
>
>
>
> ---------------------------------------------------------------------
>  Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
> aviso.
> ---------------------------------------------------------------------
>  Sair da lista: address@hidden
> ---------------------------------------------------------------------
>  Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
>
>
>
>
>  Yahoo! Grupos, um serviço oferecido por:
>
> PlayStation 2 a partir de R$ 659! Parcele!Celular Motorola com câmera a
> partir de R$ 449!
> Siemens SL65 com câmera a partir de R$ 730! Câmeras Digitais a partir de
> apenas R$ 399! Parcele!
> CD Players Pioneer a partir de R$ 369!MP3 Player iPod a partir de R$ 799!
> Parcele!
>  ________________________________
>  Links do Yahoo! Grupos
>
>
> Para visitar o site do seu grupo na web, acesse:
> http://br.groups.yahoo.com/group/shell-script/
>
> Para sair deste grupo, envie um e-mail para:
> address@hidden
>
> O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do
> Yahoo!.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]