você está aqui: Home → Colunistas → Cantinho do Shell
Por Júlio Cezar Neves
Data de Publicação: 17 de Outubro de 2006
#!/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