Algoritmos em Shell Script

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

[ Hits: 48.894 ]

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

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

Montando Servidor de Internet com Ubuntu Server

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

Resetando senha de usuário root em sistemas Debian e Red Hat

Exploração de Falhas em Servidores FTP

Leitura recomendada

Introduzindo um pouco mais a fundo o shell script

expr - Definição e uso do comando

Como matar um processo - kill, killall, pkill e xkill

Dialog em GTK

Shell Script para WEB

  
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