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: Tue, 23 May 2006 12:55:52 -0300
User-agent: Thunderbird 1.5 (X11/20051201)

Olá Fernando,

Eu entendi o que vc está fazendo com grep, o meu comentário evidencia a você que a maneira que vc encontrou está incompleta, ou seja, dá margem vários resultados. Mas grep e egrep aceitam expressões regulares, que podem definir melhor o que vc está procurando. Eu não tenho o executável groupadd em minha distro. Então, dentro do seu algoritmo, não posso ajudá-lo. Normalmente vc executa um comando e armazena a saída padrão dele numa variável desse jeito:

CONTEUDO=`ls` (acento grave)

ou

CONTEUDO=$(ls)


Mas... Fernando. Veja um resumo disso em

http://aurelio.net/shell/canivete.html

Você vai encontrar esses casos e muitos outros...

E pegue algum material em

http://aurelio.net/shell/#livros


Bom estudo!

pythondeveloper wrote:
Maurício

Mas como eu faço pra pegar o retorno desse groupadd ? Pelo que vi sua
distro naum tem esse comando.
Com o "grep /etc/group" eu quero verificar se ja existe o grupo
cadastrado, se naum tiver tenho que adiciona-lo.
[]'s
Fernando Paiva


--- Em address@hidden, Mauricio <ricio_rs_osw@y...>
escreveu
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








---------------------------------------------------------------------
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]