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: [EMAIL PROTECTED]
> ---------------------------------------------------------------------
> 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
>
>
---------------------------------------------------------------------
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: [EMAIL PROTECTED]
---------------------------------------------------------------------
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
| Yahoo! Grupos, um serviço oferecido por: | |
|
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:
[EMAIL PROTECTED]
- O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
