Formulário em Shell Script usando Dialog

Iniciado por clcampos, 01 de Setembro de 2011, 18:25

tópico anterior - próximo tópico

clcampos

Prezados(as), há muito tempo não trago um problema aqui, normalmente chegando a solução deles via pesquisa, porém dessa vez não foi possível.

Tenho, aqui no trabalho, alguns scripts para simplificar a vida de todos (inclusão/exclusão de usuários/grupos no server, alteração de grupo do usuário, backup, etc, etc, etc) e resolvi fazer uma grande reformulação neles, o que levou a necessidade de criar formulários nos shell scripts para tal feito.

Após alguns estudos (via google) vi que o próprio dialog poderia me ajudar com esse formulário, o que facilitaria em muito minha vida, inclusive funcionando perfeitamente, desde que todos os campos sejam preenchidos.

Porém quando os campos não são todos preenchidos estou tendo problemas, sendo que o conteúdo dos campos não ficam nos lugares corretos. Para que possam entender coloco abaixo um script que estou usando apenas para testes. Basta colocar o conteúdo em um arquivo, dar permissão de execução e testar (primeiro preencher todos os campos, depois deixar alguns sem informação).

Agradeço se alguém puder ajudar.

#-----------------------------_Script_-----------------------------#
#!/bin/bash
# Teste formulárion com dialog
#
shell="/bin/bash"
home="/home"
groups="grupo"
#email=""
#sala=""
#nmCompleto=""
user=""

# open file descriptor (fd)
exec 3>&1

# Store data to $VALUES variable
VALUES=$(dialog --ok-label "Submit" \
  --backtitle "Linux User Managment" \
  --title "Useradd" \
  --form "Create a new user" \
15 50 0 \
        "Username     :" 1 1 "$user"         1 10 10 0 \
        "Nome Completo:" 2 1    "$nmCompleto"   2 10 40 0 \
        "Sala         :" 3 1    "$sala"         3 10 15 0 \
        "Email        :" 4 1    "$email"        4 10 20 0 \
        "Group        :" 5 1    "$groups"       5 10 8 0 \
        "HOME         :" 6 1    "$home"         6 10 40 0 \
        "Shell        :" 7 1    "$shell"        7 10 15 0 \
2>&1 1>&3)

# close fd
exec 3>&-

      i=1
      IFSold=$IFS
      export IFS="
"
      for valores in $VALUES;do
          case $i in
               1)NmUser="$valores";;
               2)NmCompleto="$valores";;
               3)NmSala="$valores";;
               4)Email="$valores";;
               5)Telefone="$valores";;
               6)Groups="$valores";;
               7)Home="$valores";;
               8)Shell="$valores";;
               9)CotaUser="$valores";;
          esac
          i=`expr $i + 1`
      done
      export IFS="$IFSold"

      dialog --title "Oi" --msgbox "NmUser: $NmUser\nNmCompleto: $NmCompleto\nNmSala: $NmSala\nEmail: $Email\nTelefone: $Telefone\nGroups: $Groups\nHome: $Home\nShell: $Shell\nCotaUser: $CotaUser" 0 0
#-------------------------_FIM_Script_--------------------------#


[]'s

Cristiano
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

clcampos

Ontém a noite, quando esqueci do problema a solução veio na cabeça, coisa normal na vida de quem trabalha com informática.

Segue o script funcionando. A sim, se alguém tiver uma solução mais elegante eu agradeceria, o que fiz foi meio que uma gambiarra.

#-----------------------------_Script_-----------------------------#
#!/bin/bash
# Teste formulárion com dialog
#
shell="/bin/bash"
home="/home"
groups="grupo"
#email=""
#sala=""
#nmCompleto=""
user=""

# open file descriptor (fd)
exec 3>&1

# Store data to $VALUES variable
VALUES=$(dialog --ok-label "Submit" \
  --backtitle "Linux User Managment" \
  --title "Useradd" \
  --form "Create a new user" \
15 50 0 \
        "Username     :" 1 1 "$user"         1 10 10 0 \
        "Nome Completo:" 2 1    "$nmCompleto"   2 10 40 0 \
        "Sala         :" 3 1    "$sala"         3 10 15 0 \
        "Email        :" 4 1    "$email"        4 10 20 0 \
        "Group        :" 5 1    "$groups"       5 10 8 0 \
        "HOME         :" 6 1    "$home"         6 10 40 0 \
        "Shell        :" 7 1    "$shell"        7 10 15 0 \
2>&1 1>&3)

# close fd
exec 3>&-

      i=1
      j=9
      while true;do
          valores=`echo "$VALUES" | tail -n $j | head -n 1`
          case $i in
               1)NmUser="$valores";;
               2)NmCompleto="$valores";;
               3)NmSala="$valores";;
               4)Email="$valores";;
               5)Telefone="$valores";;
               6)Groups="$valores";;
               7)Home="$valores";;
               8)Shell="$valores";;
               9)CotaUser="$valores";;
          esac
          i=`expr $i + 1`
          j=`expr $j - 1`

          test $i -eq 10 && break
      done

      dialog --title "Oi" --msgbox "NmUser: $NmUser\nNmCompleto: $NmCompleto\nNmSala: $NmSala\nEmail: $Email\nTelefone: $Telefone\nGroups: $Groups\nHome: $Home\nShell: $Shell\nCotaUser: $CotaUser" 0 0
#-------------------------_FIM_Script_--------------------------#
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!