Script verifica partição (ajuda)

Iniciado por lueneberg, 11 de Março de 2008, 14:43

tópico anterior - próximo tópico

lueneberg

como um amigo estava com problemas aqui no forum, com partições,, passei um script do resulinux que faz este conserto... mais como ele usou o live do ubuntu deu erro por causa do kdialog, tive a ideia de passar este otimo script nativo do resulinux para que possa ser usado no live do ubuntu,,, mais ao escolher a partição e depois o sistema de arquivo ele volta para a escolha da partição...ficando em um tipo de looping.... ainda não achei o que pode tar errado....

manualmente ele funciona....

codigo do script:

#!/bin/bash
#baseado no script limpeza "Willdoidao" Forum Ubuntu com inspiração script do 777 do resulinux...
# Aviso importante
USUARIO=`id | cut -f2 -d"(" | cut -f1 -d")"`

if test "$USUARIO" != "root"; then
   echo -e "Para executar esta rotina use o sudo."
   exit 9999
fi
while : ; do

## escolha da partição

nome=$( gdialog --inputbox 'escolha da partição (desmontada):' 0 0  2>&1 )

# Mostra o menu na tela, com as ações disponíveis
    resposta=$(
      gdialog --stdout               \
             --title 'Partições'  \
             --menu 'Escolha seu tipo de S. de Arquivos:' \
            0 0 0                   \
            1 'ext2' \
            2 'ext3'  \
            3 'reiserfs'     \
            4 'fat'        \
            0 'Sair'                )

    # Ela apertou CANCELAR ou ESC, então vamos sair...
    [ $? -ne 0 ] && break

    # De acordo com a opção escolhida, dispara programas
    case "$resposta" in
         1) sudo fsck.ext2 -p -f /dev/$nome ;;
         2) sudo fsck.ext3 -p -f /dev/$nome ;;
         3) sudo fsck.reiserfs --fix-fixable -y /dev/$nome ;;
         4) sudo fsck.vfat -a -w /dev/$nome ;;
         0) break ;;
    esac

done

#Mensagem de Saida
echo 'Will'

brunei

#1
No meu fedora, esse escript sai normalmente quando escolho a partição e o tipo, mas não sai quando eu peço para sair ::). Se você olhar a condição em:

[ $? -ne 0 ] && break

o script não vai sair quando o usuário selecionar a opção 0 (que é a opção para sair). Se o seu problema é ficar preso no laço quando escolhe o tipo e não quando escolhe sair, o problema pode ser uma interpretação diferente que o bash está fazendo (talvez em virtude da versão ou da distribuição) ou mesmo problema na saída do gdialog. Aliás, o programa fica preso no laço se eu pressionar ESC ou clicar no botão cancelar, por que os códigos corretos do gdialog não devem estar sendo tratados.
Bruno Ribeiro

clcampos

Gostaria de fazer algumas observações antes de deixar a rotina:


  • Não alterei  a rotina a não ser o necessário para ela rodar;
  • Optei pelo zenity para executar as interações com o usuário;
  • Não gostei da rotina, ela é muito fraca, devendo ser usada apenas por quem entende (enquanto deveria ser para ajudar quem não sabe o que fazer). Deixe colocar o porque considerei isto:

    • Não verifica se a partição digitada existe;
    • Não verifica se o usuário digitou /dev/NOME_PARTIÇÃO ou apenas NOME_PARTIÇÃO;
    • Não verifica se a partição esta montada ou não.

Espero ao menos que ajude o pessoal a desenvolver uma rotina melhor, com as devidas conferências, e como é shell script (e eu adoro) estou a disposição para ajudar.

Citar
#!/bin/bash
#baseado no script limpeza "Willdoidao" Forum Ubuntu com inspiração script do 777 do resulinux...
# Aviso importante
USUARIO=`id | cut -f2 -d"(" | cut -f1 -d")"`

if test "$USUARIO" != "root"; then
   echo -e "Para executar esta rotina use o sudo."
   exit 9999
fi
while : ; do

## escolha da partição

NOME=$( zenity --entry --title="Corrige Particao" --text="Escolha da Particao Desmontada (Tecle <CANCELA> para encerrar):" )

# Ela apertou CANCELAR ou ESC, então vamos sair...
[ $? -ne 0 ] && break

# Mostra o menu na tela, com as ações disponíveis
    RESP=$( zenity --list --title="Corrige Particao" --radiolist --text="Escolha seu tipo de S. de Arquivos:" --height=260\
                   --column="Item" --column="Tipo"\
                     FALSE "ext2"\
                     TRUE  "ext3"\
                     FALSE "reiserfs"\
                     FALSE "fat"\
                     FALSE "Sair" )

    # Ela apertou CANCELAR ou ESC, então vamos sair...
    [ $? -ne 0 ] && break

    # De acordo com a opção escolhida, dispara programas
    case $RESP in
             "ext2") sudo fsck.ext2 -p -f /dev/$NOME ;;
             "ext3") sudo fsck.ext3 -p -f /dev/$NOME ;;
         "reiserfs") sudo fsck.reiserfs --fix-fixable -y /dev/$NOME ;;
              "fat") sudo fsck.vfat -a -w /dev/$NOME ;;
             "Sair") break ;;
    esac

done

#Mensagem de Saida
zenity --info --title="Corrige Particao" --text="Rotina encerrada!"
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

lueneberg

.clcampos, ficou perfeito.... testei com o live do 7.10, perfeito..... não tinha feito em zenity pois achava que ele não vinha instalado, acho que nas vs anteriores não vinha.... mais ficou otimo....

no script original tem uma rotina que faz uma verificação mais profundo na partição reiserfs, avisa ao user que não pode ser cancelada .... ( caso a primeira não resolva o problema )

mais ficou otimo mesmo,,, mesmo sendo um script simples,, a função dele é corrigir defeitos usando o live CD, assim como uso ele com o Resulinux que ja vem com esta rotina no menu.... agora fica mais facil aos que tem o live do ubuntu...   obrigadão;;;;;;