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

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

Re: [shell-script-pt] $((i)) ou $((i++)) no Dicas-L de 15/ago/2019 (Sub


From: Julio C. Neves
Subject: Re: [shell-script-pt] $((i)) ou $((i++)) no Dicas-L de 15/ago/2019 (Substituição de Processos)
Date: Sun, 14 Jun 2020 15:20:43 -0300

Boooooa Itamar, com awk tb é uma forma muito legal para mostrar que o pipe deve ser usado com cuidado (apesar de achar que com while fica mais didático, talvez até pq eu tenha mais intimidade com ele). Poderia tb fazer seq + ls + paste, ...

Essa é a beleza do Shell e uma das teclas que mais bato. Frequentemente me perguntam de determinada coisa dá para fazer em shell. Nunca perguntam de quantas formas diferentes é possível fazer essa coisa em Shell.

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Em 27/01/2020 abriremos uma semana de inscrições
» para uma nova turma. Veja mais detalhes em:

Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.







Em dom., 14 de jun. de 2020 às 12:45, Itamar Santos de Souza por (shell-script-pt) <shell-script-pt@nongnu.org> escreveu:
O grando mestre Júlio de novo nos premia com seus conhecimentos, mas me permita ousar dar uma alternativa baseada em awk:

ls arq* | awk '{print NR, $0}END{print "Eu tenho :" NR ": arquivos"}'

 ou:

awk '{print NR, $0}END{print "Eu tenho :" NR ": arquivos"}' < <(ls arq*)

[]'s
Itamar

Em domingo, 14 de junho de 2020 12:34:57 BRT, romano@rcamoto.com.br <romano@rcamoto.com.br> escreveu:


Correto!

Eu havia me atentado apenas à incrementação. kkkk  
Não tinha me preocupado com o início (em zero) ou a linha final (valor perdido pois está num subshell).

Didática zero a minha!   kkkkk

Obrigado Júlio!

Renato
------------------------------------------------------------------------------------------------



On 14/06/2020 08:55, Julio C. Neves wrote:
Caro Renato,
vou te responder no corpo da sua msg, para não deixar de abordar nenhum ponto, mas antes de mais nada, te agradeço de coração o elogio que fizeste

Em dom., 14 de jun. de 2020 às 00:39, romano@rcamoto.com.br <romano@rcamoto.com.br> escreveu:

Olá Júlio !

No Dicas-L de 15/ago/2019 (Substituição de Processos - http://www.dicas-l.com.br/arquivo/substituicao_de_processos.php) vi um exemplo que não entendi:

ls arq* | while read Arq
do
    echo $((i)) $Arq
done; echo Eu tenho :$i: arquivos

Com a saída esperada (supondo que os arquivos existam no diretório):
1 arq
2 arq.err
3 arq.err1
4 arq.limpo
Eu tenho :: arquivos


Mas quando tento da forma acima a variável i não é incrementada.
Não estaria faltando o '++' no ((i)) ?

Sem dúvida alguma está faltando. Como tudo que escrevo, testo antes, posso garantir que foi um erro de transcrição para o html do site. 

ls arq* | while read Arq
do
    echo $((i++)) $Arq              #<-------
done; echo Eu tenho :$i: arquivos

(assim funciona)

Não funciona não!!!!!!!!
Ainda tem duas coisas erradas aí:
1.
Se vc fizer $((i++)), com os mesmos arquivos do exemplo sua saída seria:
0 arq
1 arq.err
2 arq.err1
3 arq.limpo
Ou seja, a origem seria zero e não 1 pq vc usou uma pós incrementação e o correto seria uma pré incrementação com um echo $((++1))
2.
A última linha deveria ser:
Eu tenho :4: arquivos
E continua sendo:
Eu tenho :: arquivos
Isso ocorrerá por causa do pipe após o ls, que gerará um subshell para executar o while. Todo o valor de $i que foi alterado dentro desse subshell será perdido ao seu término e é aí que entra a substituição de processos para que isso não ocorra. Para tudo funcionar 100%, o script deveria ser:
while read Arq
do
    echo $((++i)) $Arq
done < <(ls arq*); echo Eu tenho :$i: arquivos

Durante esta semana que começa amanhã, as matrículas para o meu curso de programação em Shell estarão abertas. A ementa é 100% abrangente e pode ser vista em https://www.dicas-l.com.br/download/EmentaShell.pdf e em https://www.dicas-l.com.br/download/EmentaERs.pdf já que que faz o curso de programação em Shell, ganha um curso de Expressões Regulares.
  1. Vc pode ver todos os detalhes do curso em  https://educacao.dicas-l.com.br/shell-linux, mas assim mesmo vou mostrar uns diferenciais:
  2. Se o solicitar até a metade do curso, seu investimento será inteiramente restituído sem nenhuma pergunta;
  3. O material (dezenas de vídeos, o material de estudo, que é um livro de 350 páginas no formato A4 e convertido para HTML) passará a ser seu material de consulta, pois tudo ficará acessível por tempo indeterminado;
  4. Se vc tiver um problema que te impeça de fazer o curso direito, faça quantas vezes quiser gratuitamente. A nossa filosofia é que vc pagou para aprender Shell, então faça o curso (que tem muito conteúdo) até achar que aprendeu;
  5. Devido a essa maldita pandemia estamos dando 20% de abatimento aos 20 primeiros inscritos. Abriremos as matrículas no dia 15/06 (amanhã) e fecharemos no dia 19/05 ou qdo tivermos 40 inscritos, o que ocorrer primeiro;
  6. Dependendo do aproveitamento durante o curso de Shell damos aos nossos melhores alunos bolsas de estudos em treinamentos complementares, como YAD, Zenity, Dialog, Linux dicas e truques, ...
 Se vc quer aprender tudo de Shell rapidamente e sem risco do seu investimento inscreva-se, mas seja rápido para ganhar o desconto,



Não conhecia nem essa construção (com dois parênteses e o ++, que exibe e incrementa ao mesmo tempo - muito prática!).
De qualquer maneira já aprendi algo novo e deve ser útil a muitos!   :-)


Abraços de um fã.  ;-)
Renato Romano, São B. Campo

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Em 15/06/2020 abriremos uma semana de inscrições
» para uma nova turma. Veja mais detalhes em:

Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.





_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: shell-script-pt@nongnu.org
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.
_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: shell-script-pt@nongnu.org
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.
_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: shell-script-pt@nongnu.org
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.

reply via email to

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