Introdução ao Shell Script - Baseado no livro de Ken O. Burtch

Esse artigo foi elaborado tendo como base, o livro "Scripts de Shell Linux com Bash" de Ken O. Burtch. Abordando os tópicos essenciais para começar a criar scripts. Ensinando os conceitos básicos para criação de laço de repetição, estruturas condicionais, funções, operações aritméticas, scripts bem comportados, entre outras.

[ Hits: 27.024 ]

Por: Calebe Bastos Oliveira em 13/12/2013


Exercícios



Exercício 01

Faça um programa que receba a idade de duas pessoas e verifique qual das duas é maior e imprima na tela a idade da pessoa mais velha.

Resposta:

#!/bin/bash
declare -i IDADE1
declare -i IDADE2

printf "\n Digite a idade da primeira pessoa"
read IDADE1
printf "\n Digite a idade da segunda pessoa"
read IDADE2
printf "$IDADE1 $IDADE2"
if [ "$IDADE1" -gt "$IDADE2" ] ; then
    printf "\n A maior idade e %d" "$IDADE1"
else
    printf "\n A maior idade e %d" "$IDADE2"
fi
exit

Exercício 02

Escreva um algoritmo para ler um valor inteiro e escrever se ele está entre os números 1 e 10, ou não está.

Resposta:

#!/bin/bash
declare -i NUMERO
printf "\n Digite um número para verificar se ele está entre 1 e 10"
read NUMERO
if [ $NUMERO -ge 1 ] && [ $NUMERO -le 10 ] ;  then
    printf "\n O número está entre 1 e 10"
else
    printf "\n O número não está entre 1 e 10"
fi

exit

Exercício 03

Faça um algoritmo para ler: a descrição do produto (nome), a quantidade adquirida e o preço unitário. Calcular e escrever o total (total = quantidade adquirida * preço unitário), e o total a pagar (total a pagar = total - desconto), sabendo-se que:
  • Se quantidade <= 5 o desconto será de R$ 2.
  • Se quantidade > 5 e quantidade <=10 o desconto será de R$ 3.
  • Se quantidade > 10 o desconto será de R$ 5.

Resposta:

#!/bin/bash
declare -i QTDAD
declare -i PRECOUNI
declare -i TOTAL
declare -i DESCONTO
printf "\n Digite a descrição do produto \t"
read NOME
printf "\n Digite a quantidade adquirida \t"
read QTDAD
printf "\n Digite o preço unitário do produto \t"
read PRECOUNI
TOTAL="$QTDAD * $PRECOUNI"
if [ "$QTDAD" -le 5 ] ; then
    DESCONTO="$TOTAL - 2 "
elif [ "$QTDAD" -gt 5 ] && [ "$QTDAD" -le 10 ] ; then
   DESCONTO="$TOTAL - 3"
else
    DESCONTO="$TOTAL - 5"
fi
printf "\n Para o produto %s \t" "$NOME"
printf "\n O valor total do produto adquirido é \t %d" "$TOTAL"
printf "\n O valor com desconto é %d \t" "$DESCONTO"
exit

Exercício 04

Elabore um programa que solicite ao usuário o sexo e a altura de 10 pessoas. Calcular e escrever o peso ideal de acordo com a fórmula a seguir:
  • Homens: (72 * h ) - 58
  • Mulheres: (62 * h ) - 44

Resposta:

#!/bin/bash
declare -i ALTURA
declare -i CALCULO
for (( CONT=0 ; CONT<10 ; CONT++ )) ; do
    printf "\n Digite M para masculino e F para feminino \t"
    read SEXO
    printf "\n Digite a sua altura \t"
    read ALTURA
    if [ "$SEXO" == F ] ; then
        CALCULO="62 * $ALTURA - 44"
    elif [ "$SEXO" == M ] ; then
        CALCULO="72 * $ALTURA - 58"
    else
        printf "Opção inválida"
    fi
printf "\n Para o sexo %s o peso ideal é %d \t" "$SEXO $CALCULO"
done

Exercício 05

Faça um programa que leia um número inteiro (limite), um incremento (incr, inteiro) e imprima os números inteiros de 0 até limite, com incremento de incr. Suponha que limite e incr são maiores que zero.

Exemplo:
  • Valores lidos: 10 (limite) 3 (incr)
  • Saída do programa: 0 3 6 9

Resposta:

#!/bin/bash
declare -i LIMITE
declare -i INCR
printf "\n Digite o limite \t"
read LIMITE
printf "\n Digite o incremento \t"
read INCR
for (( CONT=0; CONT<$LIMITE; CONT=$CONT+$INCR)) ; do
    printf "\t %d \t" "$CONT"
done
exit

Exercício 06

Crie um script que realize a leitura dos dados, de uma String S e um valor inteiro N, e crie uma função que exiba na tela o valor da variável S por N vezes seguidas.

Resposta:

#!/bin/bash

declare -i N
function ExibeNaTela(){
    for(( CONT=0 ; CONT<$1 ; CONT++ )) ; do
        printf "\n %s" "$2"
    done
}
printf "\n Digite um valor para ser exibido \t"
read S
printf "\n Digite a quantidade de vezes que a mensagem deverá ser exibida \t"
read N
ExibeNaTela "$N" "$S"

Exercício 07

Crie uma função que receba dois números inteiros positivos X e Y, e retorne a soma dos N números existentes entre eles (inclusive X e Y). Exiba a soma.

Resposta:

#!/bin/bash

declare -i X Y
function SomaPositivo(){
    declare -g SOMA
    REC="$1"
    REC2="$2"
    SOMA="0"
    for(( CONT=$REC ; CONT<$REC2 ; CONT++ )) ; do
        let "SOMA=$SOMA+$CONT"
    done
}
printf "\n Digite um número \t"
read X
printf "\n Digite um número \t"
read Y
SomaPositivo "$X" "$Y"
printf "\n O valor de x é %d o valor de y é %d" "$X" "$Y"
printf "\n A soma dos valores é %s" "$SOMA"
exit


Referência: Scripts de Shell Linux com Bash (Ken O. Burtch)

Página anterior    

Páginas do artigo
   1. Introdução
   2. Comando printf / Variáveis
   3. Como ler do teclado / Expressões aritméticas
   4. Comando if e test / Laço for
   5. Funções de shell
   6. Exercícios
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Personalize seu shell na entrada de seu logon

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

Como trabalhar com funções em bash

Variáveis, if, else e unless em Ruby

Reconhecimento de Voz no Linux

  
Comentários
[1] Comentário enviado por removido em 13/12/2013 - 14:06h

Cara,

Excelente trabalho!

[2] Comentário enviado por calebebastos em 13/12/2013 - 14:13h

Fico Feliz que tenha gostado.

Abraço


[3] Comentário enviado por kirito em 13/12/2013 - 18:32h

Seu artigo está ótimo, mas só uma pequena dúvida..
Se você colocar a primeira linha como #!/bin/interpretador, não a necessidade de chamar o interpretador(bash), é só dar a permissão de execução e rodar o programa, ou estou errado ?
Sou iniciante em Shell, então talvez eu esteja falando besteira kk

[4] Comentário enviado por calebebastos em 13/12/2013 - 19:36h

Bem na distribuição que eu uso, eu sempre utilizo o comando bash, costuma não funcionar sem por causa de permissões de execução ai acho mais prático utilizar ele. Se vc der premissão ao arquivo basta clicar nele. Agora essa primeira linha com o caminho do interpretador em um bom script sempre tem que ter, dê uma olhada na parte de Script bem comportado, faz parte do cabeçalho. Faça o teste ai e nos conte. Espero ter ajudado. Obrigado pelo comentário. Abraço

[5] Comentário enviado por kirito em 14/12/2013 - 12:04h

Obrigado pela esclarecimento e atenção. Tive essa dúvida porque em meus scripts eu dou o comando para dar permissão de execução e rodo o programa. Estou pensando em publicar um artigo para executar programas em C e em Assembly mais rápido.. Obrigado novamente, e meus parabéns pelo o ótimo artigo!

[6] Comentário enviado por calebebastos em 15/12/2013 - 13:39h

Bacana, faça o artigo é um tema bem interessante e qualquer dúvida tamo ai. VL

[7] Comentário enviado por ragen em 16/12/2013 - 11:50h

Favoritado! A didática do artigo é excelente.

Abs

Ragen

[8] Comentário enviado por calebebastos em 16/12/2013 - 13:54h

Obrigado ragen, fico feliz que tenha gostado. Abraço

[9] Comentário enviado por azk em 18/12/2013 - 09:09h

Belo artigo!
Obrigado pela contribuição, Calebe....

favoritado
;-))

[10] Comentário enviado por ricardoolonca em 18/12/2013 - 10:00h

Parabéns pelo artigo. Está muito bom.

Alguns comentários:
1- O script não precisa ser salvo com a exstensão .sh. Neste caso, a extensão serve apenas para nós sabermos que o arquivo é um script bash. Mas ele pode ter qualquer extensão, ou nem ter extensão nenhuma.

2- Para executar, você pode usar:
bash arquivo.sh

ou dar permissão de execusão com o comando
chmod +x arquivi.sh

e executá-lo com uma das seguintes formas:
./arquivo.sh
/caminho/completo/do/arquivo.sh

3- Para efetuar cálculos, você pode usar a seguinte forma:

soma
x=$[2+3]

multiplicação
x=$[2*3]

Sempre uso os sites abaixo como referência. O primeiro é sobre o bash, e o segundo é sobre o dialog, que é uma forma de colocar menus em seus script

http://aurelio.net/shell/canivete.html
http://aurelio.net/shell/dialog/#menu

Outros artigos de exemplo:
http://ricardoolonca.blogspot.com.br/2012/08/como-gerar-numeros-aleatorios-em-script.html
http://ricardoolonca.blogspot.com.br/2013/09/script-bash-com-cores.html
http://ricardoolonca.blogspot.com.br/2012/07/incremente-seus-scripts-bash-com-dialog.html

[11] Comentário enviado por calebebastos em 21/12/2013 - 13:09h

Obrigado pelo comentário e azk4n e ricardoolonca. Abraço

[12] Comentário enviado por davidsiqueira em 24/12/2013 - 02:07h

muito bom seu trabalho

[13] Comentário enviado por calebebastos em 24/12/2013 - 17:26h

Obrigado pelo comentário davidsiqueira. Abraço

[14] Comentário enviado por alanvictorjp em 08/01/2014 - 06:14h

Muito bom!

ricardoolonca $[], essa pra mim é nova, vlw!

[15] Comentário enviado por renato473 em 25/02/2014 - 23:20h

otimo

[16] Comentário enviado por manoelmarins em 10/05/2018 - 21:59h

Muito bom.
Devia ter acreditado mais no linux.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts