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

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

Re: Script dando maior trabalho...


From: Mauricio
Subject: Re: Script dando maior trabalho...
Date: Mon, 22 May 2006 19:03:42 -0300
User-agent: Thunderbird 1.5 (X11/20051201)

Olá Pythondeveloper...

Você precisa dar uma olhada em algumas coisas, substituições de variáveis... e eu diria que repensar seu algoritmo seria uma boa... o mais simples pode fazer melhor e mais rápido além de ser mais inteligível :-)

Seguem comentários....

pythondeveloper wrote:
Salve salve galera...

Estou criando um script para adicionar um usuario no Linux e assim que
cadastrar o usuario ele ja esteja cadastrado no samba. Vejam.

#!/bin/bash
# Cadastra Usuarios
clear
Principal () {
echo "Deseja cadastrar um novo usuario para o sistema? [sn]"
read resposta
if [ $resposta != 's' -a $resposta != 'n' ]; then

Aqui a variável resposta precisa estar entre aspas, para o caso do usuário 
apertar somente um enter...
        if [ "$resposta" != 's' -a "$resposta" != 'n' ]; then

  echo "Voce precisa decidir por s ou n"
  exit
fi

if [ -z $resposta ]; then
  echo "Informe a opcao desejada"
  exit
fi
Essa parte nunca vai ser usada, pois na sua condição anterior vc diz pra imprimir 'Você precisa bla, bla...' em qualquer situação onde a variável resposta não seja 's' ou 'n', inclusive a mesma ser nula, compreende?



test $resposta = "n" && exit

Então tudo isso poderia ser resumido num 'case', por exemplo. Acho que dei um 
exemplo no mail-resposta da sua questão anterior.






echo "Digite o nome do usuario:"
read nome
if [ -z $nome ]; then

Aqui vc deve proteger a variável. Aliás proteger a variável é sempre bom quando 
se tem dúvidas... :-)
 if [ -z "$nome" ]; then



  echo "Informe o nome"
  exit
fi

echo "Digite o grupo que o usuario ira participar:"
read grupo
if [ -z $grupo ]; then


mesmo caso anterior, aspas nas variáveis!!!

if [ -z "$grupo" ]; then

  echo "Grupo vazio"
  exit
fi

cat /etc/group | grep $grupo


veja, aqui sem proteger a variável vc escapa dela ser nula porque já verificou no item anterior, mas se o usuário tiver digitado um nome com espaços???

cat /etc/group | grep "$grupo"

Outra coisa, quando for ler um arquivo com grep, faça direto, assim vc evita o 
pipe:

grep "$grupo" /etc/group

mais uma coisa: se você digita 'users' ou 'user' ou 'us' no item grupo o grep vai achar o grupo users em todos os casos. Vc precisa estudar expressões regulares pra melhorar isso....




if [ $? = 0 ]; then
  echo "O grupo ( $grupo ), e necessario um grupo valido para
continuar, devo adicionar o grupo $grupo ?[sn]"
  read AdicionaGrupo
fi

essa verificação se torna falha devido ao grep anterior... Estude ERs...





if [ $AdicionaGrupo != 's' -a $AdicionaGrupo != 'n' ]; then
   echo "Voce precisa decidir por s ou n"
   exit
fi

if [ $AdicionaGrupo = 's' ]; then
  groupadd $grupo
e se o grupo tem dois nomes??? Aspas, aspas, aspas!!


  echo "O grupo ( $grupo ), foi adicionado com sucesso"

aqui vc não garante que o grupo foi adicionado com sucesso, qualquer que seja o resultado do groupadd o echo com certeza será executado e exibira essa mensagem na tela... estude os códigos de retorno do comando groupadd... na distribuição que uso eu nem tenho esse comando... por isso não pude testar :-(

else
  echo "E preciso um grupo valido para continuar"
  exit
fi


Então, a partir daqui tem um monte de coisinhas que vc tem que mudar... dá uma lida no que escrevi e aplica no resto do script...e veja se vc consegue chegar mais adiante... se for o caso poste novamente...


Abraço,
maurício




echo "Digite o login do usuario:"
read login_
if [ -z $login_ ]; then
  echo "Informe o login"
  exit
fi

grep $login_ /etc/passwd ; echo "Procurando por $login_"
if [ $? = 0 ]; then
  echo "O usuario $login_, ja esta cadastrado no sistema"
  exit
else
  useradd -g $grupo -c "$nome" -m -d /home/"$login_" $login_
fi
echo "Senha para usuario $login:"
passwd $login_

echo "Deseja que $login_ esteja no Samba ?[sn]"
read Resposta_Samba
if [ -z $Resposta_Samba ]; then
  echo "Escolha s ou n"
  exit
fi

if [ $Resposta_Samba = 's' ]; then
  CadastraSamba
else
  echo "Usuario $login_, cadastrado no sistema com sucesso..."
  id $login_
  Principal
fi }

CadastraSamba(){
  echo "Digite a senha para o samba:"
  smbpasswd -a $login_
  killall smbd -HUP
  killall nmbd -HUP
Principal
}
Principal

#EOF

1) Onde eu Adiciono o "Nome" do usuário, se estiver com espacos da
erro...exemplo:
Nome do Usuario
Fernando Paiva

Da o seguinte erro => /usr/sbin/cadastrausuario: line 20: [: Fernando:
binary operator expected

2) No comando grep quero pegar o retorno se ele encontrou ou nao uma
ocorrencia do nome do grupo no arquivo "/etc/group"

3) Tem horas que ele adiciona o grupo, mas cria uma copia do arquivo
"group" em /etc ficando os dois arquivos assim

group-  group

Não estou entendendo o pq acontece esses erros, as sintaxes estao
erradas ?

desde ja, agradeço
[]'s
Fernando Paiva










---------------------------------------------------------------------
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
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil




reply via email to

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