Algoritmos em Shell Script

Abordando de forma conceitual e prática, a construção de algoritmos através de Shell Script.

[ Hits: 48.777 ]

Por: Wagner Souza em 20/06/2014 | Blog: https://medium.com/@souzaw


Estrutura de repetição



Até agora, criamos algoritmos que têm sua execução apenas uma vez. Para uma nova execução, é preciso acionar o script. Mas, e se fosse preciso calcular uma média para 50 alunos? Algo bastante trabalhoso, não acham?!

Pensando nisso, o Shell, como em outras linguagens de programação, dispõe das estruturas while (enquanto) e for (para).

O while faz um teste no início do algoritmo para dar continuidade, ou não, à execução do código. Já no caso do for, é informado um valor pré-definido de quantas vezes haverá a repetição do código.

Tanto na estrutura while quanto no for, teremos o elemento incrementador ou contador. A função deste, é fazer um incremento a cada iteração do código.

Este número é inteiro e pode ter iterações de 2 em 2, entre outras mediante a função do algoritmo. Este incremento assemelha-se a um ponteiro de relógio, onde a cada segundo é incrementado 1, até completar os 60 segundos complementando um minuto, dando a vez ao próximo ponteiro.

Abaixo, alguns algoritmos com essas duas estruturas:

Algoritmo 011:

#!/bin/bash
#Autor: k666
#Data: 15/01/2014
#Algoritmo que calcula a média anual de uma turma com 5 alunos

#Iniciando a variável contador (con - pode ser o nome que achar melhor)
#e a variável utilizada para acumular (acm) as médias para que no final
#seja calculado a média da turma.


con=1
acm=0

#A média anual será armazenada na variável ma

#Caso for digitar um média com casas decimais,
#utilizar o ponto ao invés da vírgula. Ex: 2.4


while [ $con -lt 6 ]
do

    echo -n "Digite a média anual do $conº aluno: "
    read ma

#No cálculo da variável acm estou utilizando a crase (``) para
#atribuir o valor do cálculo a esta. Uma outra forma de atribuição


    acm=`echo "scale=2;$acm+$ma" | bc`
    con=$(($con + 1))

done

#Calculo da média anual da turma (mat). Estou utilizando o comando
#scale junto com a calculadora bc para obter resultados de valor
#decimal especificando duas casas decimais ou quantas você desejar


mat=$(echo "scale=2;$acm/5" | bc -l)

echo "Média anual da turma $mat"

Algoritmo 012:

#!/bin/bash
#Autor: k666
#Data: 15/01/2014
#Algoritmo que executa testes de ping para um range de IPs e ao
#final mostra a quantidade total de hosts.


echo "---------------------------------------"
echo "   ALGORITMO TESTAR IP     "
echo "---------------------------------------"
echo


#Iniciando a variável contador (con)
con=0

#Aqui deve ser informado a rede. Ex.: 192.168.1 ou 192.168.2 e assim por diante
echo -n "Informe a rede: "
read net

#Informe o IP inicial do teste
echo -n "Informe o IP inicial: "
read ipini

#Informe o IP final do teste
echo -n "Informe o IP final: "
read ipfim

#Cálculo de quantos IPs receberam o teste de ping
#também será usado para fazer uma comparação com o contador
#na estrutura de repetição

calc=$(($ipfim-ipini))


#O primeiro teste da estrutura while vai ser com o primeiro
#IP informado pelo usuário. Assim que o laço começar a ser
#executado, este IP inicial será somando com o contador
#até atingir o total de hosts que deve ser "pingado"

test="$ipini"

while [ $con -le $calc ]
do

#Aqui o comando ping executará um teste em cada host com a
#opção -c1 e será unida a viável $net e $test onde esta última
#contêm o IP dentro do range a ser testado

    echo `ping -c1 $net.$test`

    con=$(($con + 1))
    test=$(($ipini+$con))

done

sleep 2
clear
echo "--------------------------------"
echo "    FIM DOS TESTES          "
echo "--------------------------------"
echo
echo "-> Total de IPs testados: $con"

Algoritmo 013:

#!/bin/bash
#Autor: k666
#Data: 17/01/2014
#Algoritmo que imprime a tabuada de cinco

#Aqui é atribuir o nome a variável contador de i e não
#de con como fiz em outro exemplos. Você pode atribuir
#o nome que desejar contanto que saiba a finalidade deste

i=0

#Para este exemplo estou utilizando a tabuada de 5, porém, caso
#necessite usar um outro valor, basta substituir o 5


while [ $i -le 10 ]
do

#Aqui vai o cálculo da multiplicação. Quando i for 0, então será
#multiplicado por 5 e assim sucessivamente até que o contador (i)
#seja 10 e finalize a execução do laço.

calc=$(($i*5))

    echo "$i X 5 = $calc"
    i=$((i + 1))

done

Algoritmo 014:

#!/bin/bash
#Autor: k666
#Data: 17/01/2014
#Algoritmo que calcula o fatorial de um
#número fornecido pelo usuário
#O fatorial é calculado da seguinte forma:
#fatorial de 3: 3x2x1 = 6
#fatorial de 4: 4x3x2x1 = 24


echo "Digite o número que queria saber o fatorial: "
read num

#Iniciando a variável fatorial(fat)
fat=1

#O contador i inicia com o número 1 e o loop será
#executado mediante seu valor ser menor igual ao valor
#da variável $num


for ((i=1; i <= $num ; i++))
do

#Aqui é utilizada a variável $fat que será multiplicado
#pela variável $i(contador) até o fim do loop


    fat=$(($fat*$i))

done

echo "O fatorial de $num é: $fat "

Algoritmo 015:

#!/bin/bash
#Autor: k666
#Data: 17/01/2014
#Algoritmo que simule uma contagem regressiva de 10 minutos, ou seja,
#mostre 10:00, e então 9:59, 9:58, ..., 9:00, 8:59 até 0:00

#Serve apenas para exibir a contagem será iniciada em 10:00

echo "10:00"

#Variável min (minutos) e seg (segundos)
#O primeiro for será utilizado para contar os minutos (min)


for ((min=9; min>=0; min--))
do

#O primeiro for será utilizado para contar os segundos (seg)
#Este for significa que o minuto só mudará quando o loop do segundo
#chegar ao seu fim. Tanto na variável min quanto seg vai decrementar
#(min-- e seg--), ou seja, diminuirá de 1 em 1


    for ((seg=59; seg>=0; seg--))
    do

#Perceba que entre a variável $min e $seg tem : (dois pontos) para
#fazer a separação de minutos e segundos


        echo "$min:$seg"
    done
done

Página anterior     Próxima página

Páginas do artigo
   1. Introdução / O Shell Script
   2. Variáveis / Operadores
   3. Primeiros algoritmos
   4. Estrutura de seleção
   5. Estrutura de repetição
   6. Funções
   7. Vetor (array)
Outros artigos deste autor

Exploração de Falhas em Servidores FTP

Teste de Intrusão com Metasploit

Atualização das provas LPIC-1, 304 e Essentials

Elastic SIEM - Instalação e Configuração do LAB (Parte I)

Montando Servidor de Internet com Ubuntu Server

Leitura recomendada

Colorindo o Shell

Cansou do Konsole e GNOME-Terminal? Existem outros terminais, escolha o seu!

Recursos avançados do bash que você não aprende na escola

Enviar e-mail pelo terminal com mutt

Introdução ao Shell Script

  
Comentários
[1] Comentário enviado por di4s em 20/06/2014 - 00:36h

muito bom, parabéns

[2] Comentário enviado por jwolff em 20/06/2014 - 09:22h

obrigado por compartilhar seu conhecimento

[3] Comentário enviado por wagnerfs em 20/06/2014 - 09:38h

Obrigado pessoal pelo incentivo. Acompanhem também os exercícios práticos para LPI que semanalmente posto aqui no VOL. Em breve estarei disponibilizando novos artigos.

[4] Comentário enviado por removido em 20/06/2014 - 12:01h

Ótimo artigo!

Estou estudando Lógica de Programação e ajudou a estudar as variáveis/operadores de forma mais ampla.
VLW!

[5] Comentário enviado por danniel-lara em 20/06/2014 - 14:28h

Meus Parabéns
Muito bom o seu Artigo

[6] Comentário enviado por andregyn em 21/06/2014 - 10:26h

Muito bom!!
Parabéns pelo artigo.

[7] Comentário enviado por xerxeslins em 21/06/2014 - 10:55h

Curti. já botei nos favoritos.

[8] Comentário enviado por removido em 21/06/2014 - 15:19h

Muito bom,espalhando conhecimento!Quando eu pegar mais as manhas do linux e unix também pretendo postar umas dicas aqui.Estou estudando C e shellScript também,foi de grande ajuda.

[9] Comentário enviado por xjc em 22/06/2014 - 00:43h

Show de bola, inovou e jogou duro, parabéns

[10] Comentário enviado por removido em 24/06/2014 - 10:43h

Muito bom seu artigo! Estou iniciando em shellscript e foi de grande proveito este artigo. Escreve muito bem e a bibliografia que utilizou também é muito boa.
Poderia me dizer onde se encontra estes exercícios para a LPI?
Um grande abraço!

[11] Comentário enviado por wagnerfs em 24/06/2014 - 10:50h

Obrigado malkoonqnu. Segue o link do primeiro exercício http://www.vivaolinux.com.br/dica/Exercicio-Pratico-LPIC-01. Abaixo deste, tem o link do segundo. Toda semana estou postando novos exercícios.

[12] Comentário enviado por andregyn em 09/07/2014 - 20:26h

A variável para conversão de Celsius para Fahrenheit ficaria assim: fah=$((9*$cel/5+32))
Belo artigo.

[13] Comentário enviado por raphaellima em 24/09/2014 - 12:03h

Muito bom velho.

[14] Comentário enviado por cleciosc em 30/09/2014 - 20:48h

Excelente artigo.

Ps.: Após apresentada a formula ( F=(9*C+160) / 5 ), o calculo efetuado no script está incorreto, fah=$((9*$cel+160)). Faltou a divisão por 5, ou seja, estaria apresentando um cálculo errado no meu script.

Só foi uma observação principalmente para aqueles que estão acostumados com as teclas CTRL+C e CTRL+V.







Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts