ajuda script

13. Re: ajuda script

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/02/2013 - 10:42h

pmartelotta escreveu:

lcavalheiro escreveu:

Se você não quis pesquisar ou pensar, azar. Você veria que a linha
 usuarios_grupo=$(cat /etc/passwd| grep $grupo | cut -d':' -f4)  

no seu script geraria uma variável contendo todos os usuários do grupo $grupo separados por vírgulas. Após essa linha,
 total_usuarios_grupo=$($(echo "$usuarios_grupo" | sed "s/\,\b/\,\n/g" | grep "\,\b" | wc -l)+1) 

retornaria o número de usuários pertencentes ao grupo, e o comando
 for i in `seq 1 $total_usuarios_grupo` ; do pertence_grupo=$(echo "$usuarios_grupo | cut -d',' -f$i); if [ "$pertence_grupo" = "$usuario_procurado"]; then comandos caso usuário pertença ao grupo; else comandos caso o usuário não pertença ao grupo; fi; done 

faria com que caso o usuário a ser testado pertencesse ao grupo fosse localizado e os devidos comandos fossem executados.


Você disse pro cara ser mais inteligigente e estudar, chamou de "meu filho", além de dizer que o cara fez gambiarra, que no contexto tende a ser interpretado negativamente. Na "minha terra", isso seria no mínimo um tom de impaciência.

Ele usou da ironia e te chamou de "o mestre". E você se doeu, o que eu até achei engraçado, mas normal de alguém que está notadamente "impaciente".

E continuou, afirmando que o cara não quis pesquisar ou pensar.

Aí eu te pergunto, como se pode afirmar algo que você não está vendo? Se o cara é iniciante, MUITA coisa coisa ele deve estar fazendo nas escuras, não é à toa que está pedindo ajuda. Então cara, se é pra postar desse jeito que você postou, seria melhor não ter escrevido uma palavra aqui.

Apesar do cara falar que é iniciante, você quis tratá-lo como do seu nível. Deu isso, pra mim e pelo visto por mais gente, você está se queimando por besteira.

Um pouco de humildade seria bom.

Flws.


Pior que isso é que, por trás de todo esse ardor e tom de humilhação, o lcavalheiro repondeu ao que não foi perguntado e escreveu coisas que não fazem sentido. Veja:

1) No primeiro comando:

Que sentido faz procurar grupo ("grep $grupo") no arquivo de usuários (/etc/passwd)? Ou a variável grupo contém o GID primário do usuário (que é única informação relativa a grupo que existe no arquivo /etc/passwd)? Ele teria problemas se algum usuário tivesse UID igual ao GID que ele está procurando. Aliás, teria problemas se o GID que está procurando for uma substring de quaquer coisa que exsita no arquivo (por exemplo, se é procura pelo GID 501, um usuário com UID 25010 apareceria na saída do grep).

Ou então, ele quis dizer "/etc/group" em lugar de "/etc/passwd", mas "querer dizer", em computação, não conta: só vale o que se diz -- e o que se disse nessa expressão não faz muito sentido. E continuaria valendo o problema de match muito genérico no grep.


2) No segundo comando:

Não entendi a necessidade dessa contagem de usuários diferentes no grupo, pois não vi onde isso se encaixa no problema original. Pode ser falha minha, contudo -- se alguém entendeu e puder me explicar, por favor me explique.

Ao contrário do problema do comando anterior, aqui ele usou o marcador "\b" no sed e no grep para limitar fronteiras de palavras. Num comando e noutro, porém, não existe necessidade de escapar a vírgula, pois ela não é caráter especial em regexps.

No grep que há na composição do comando, usar "\,\b" depois de ter trocado, com o sed que o antecede, todas as ocorrências de vírgula por vírgula seguida de quebra de linha, dará sempre resultado vazio: ",\b" vai falhar porque tanto vírgula como a quebra de linha são caracteres non-word, logo o "\b" não vai satisfazer o padrão de busca. Não sei se ele quis dizer ",$" ou ",\B" como argumento do grep, ou talvez "\b,", que faria um pouco mais de sentido para evitar casos de duas vírgulas seguidas no arquivo de grupos (que, em todo caso, seria um erro que não deveria existir no arquivo). Em todo caso, esse grep possivelmente mais atrapalha do que ajuda: o caso de duas vírgulas coladas poderia ser tratado no sed que o antecede, e suprimir o grep ainda permitiria tirar a soma de 1 ao valor produzido pelo comando "wc -l".

A soma, aliás, também não funciona. O bloco mais externo de "$( ... )" deveria ter sido escrito como "$(( ... ))" para ser interpretado como operação aritmética. Do jeito como foi escrito, o shell vai tentar executar um comando do tipo "3+1" (se a saída do pipeline interno tiver sido "3"), o que certamente vai falhar (espero!!!).


3) No terceiro comando:

Usando o resultado do comando anterior, tem-se um loop que verifica se cada membro do grupo é igual ao usuário procurado, para decidir se o usuário é ou não membro do grupo. Ora, mas isso já era -- ou deveria ser sabido, se tivesse sido corretamente expresso -- no primeiro comando! O segundo e o terceiro comandos são, portanto, praticamente inúteis, redundantes -- fonte ou fruto de impaciência e furor.


  



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts