Considerando o shell script apresentado na figura acima, jul...
Esse programa, escrito para Bourne Again Shell, se executado corretamente até o seu final, calcula a média dos números apresentados como argumentos na linha de comando.
Comentários
Veja os comentários dos nossos alunos
Linha 04) $# : recebe quantos argumentos foram passados no script;
Linha 05) se for menos do que 2 argumentos, emite algumas mensagens dando exemplo de como deveria ser a linha de comando e depois finaliza o script;
Linha 12) Executa um loop jogando os argumentos passados pelo script ($*), ou seja, os números que vc passou na linha de comando;
Linha 14) Soma cada parametro que foi passado pela linha de comando
Linha 17) a variável AVG recebe a divisão da soma dos argumentos pela quantidade deles, ou seja, recebe a média dos valores.
Linha 18) Imprime na tela a média.
É isso pessoal, abraços!
Configuração Inicial e Variáveis
#!/bin/bash
Conhecido como Shebang. Avisa ao sistema operacional que este arquivo deve ser interpretado e executado pelo shell bash localizado em /bin/bash.
avg=0
Inicializa a variável avg (que guardará a média final) com o valor 0.
temp_total=0
Inicializa a variável temp_total (que acumulará a soma dos números) com o valor 0.
number_of_args=$#
A variável especial $# armazena o número total de argumentos passados na execução (ex: se você rodar ./script.sh 10 20 30, $# será 3). Esse valor é guardado em number_of_args.
Validação da Entrada (Bloco if)
if [ $# -lt 2 ] ; then
Testa se o número de argumentos ($#) é menor que 2 (-lt significa less than). O script exige no mínimo 2 números para calcular uma média.
echo -e ...
Exibe mensagens de erro e instrução de uso ("Sintaxe: ... Exemplo: ..."). O parâmetro -e permite interpretar caracteres especiais de formatação como \n (quebra de linha) e \t (tabulação).
exit 1
Encerra imediatamente a execução do programa com código de erro 1, caso o usuário tenha passado menos de 2 argumentos.
fi
Fecha o bloco condicional if (é a palavra if ao contrário).
Laço de Repetição e Soma (Bloco for)
for i in $*
A variável especial $* representa todos os argumentos passados pelo usuário em uma única lista. O laço for vai percorrer elemento por elemento, atribuindo o número da vez à variável i.
do
Marca o início do bloco de código do for.
temp_total=`expr $temp_total + $i`
Soma o número atual (`$i`) ao total acumulado (`$temp_total`). As crases ... `` indicam que o comando expr (usado no Shell tradicional para realizar operações matemáticas inteiras) deve ser executado para atualizar a variável.
done
Marca o fim do laço for.
Cálculo Final e Exibição do Resultado
avg=`expr $temp_total / $number_of_args`
Calcula a média dividindo o total acumulado ($temp_total) pela quantidade de argumentos ($number_of_args), atribuindo o resultado a avg.
echo "Media e: $avg"
Exibe na tela o resultado final para o usuário.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo