De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Júlio Cezar Neves
Data de Publicação: 20 de outubro de 2017
#!/bin/bash # Programa para calculo de fatorial. # chame o programa pasando o numero # cujo fatorial sera calculado. [ $# -ne 1 ] && exit 1 echo $(($(seq -s \* $1)))
A primeira linha encerra o programa caso não tenha sido passado o número para calcular o fatorial, a segunda é o pulo do gato. Vamos analisá-la em partes:
seq -s \* $1
esse comando produz uma seqüência numérica de 1 até o parâmetro passado ($1
),
usando como caractere separador entre os números um asterisco. Supondo que o
número passado como parâmetro foi 5, após a execução deste comando teríamos:
1*2*3*4*5
Como temos um comando (seq
) dentro de outro (echo
) usamos $(seq -s \* $1)
,
onde a construção $(...)
foi usada para dar prioridade de execução ao
comando no seu interior.
Parece mas não ésse :)! A construção $((...))
parece com a anterior, mas é
totalmente diferente. Ela chama o interpretador aritmético do shell, que
identifica o seu interior como uma operação aritmética inteira e executa
esta operação.
OBS: também funcionaria se a segunda linha fosse assim:
seq -s \* $1 | bc
É por isso que eu sempre digo: "Nunca pergunte se dá para fazer em Shell. A pergunta correta é: qual é a melhor maneira de se fazer em shell"
Abração, Julio
:wq
O 4º UNIX do mundo nasceu na Cidade Maravilhosa, mais precisamente na Cobra Computadores, onde à época trabalhava o Julio. Foi paixão à 1ª vista! Desde então, (1980) atua nessa área como especialista em Sistemas Operacionais e linguagens de programação. E foi por essa afinidade que quando surgiu o Linux foi um dos primeiros a estudá-lo com profundidade e adotá-lo como Sistema Operacional e filosofia de vida. É autor dos livros Programação Shell Linux, 11ª edição e Bombando o Shell.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários