Você está na página 1de 8

Roteiro de Atividades 8

Shell Script
 Estruturas de Repetição

Tópicos e conceitos  Funções

 Arrays

 Controlar o fluxo de execução dos scripts com o uso de


repetições
Competências técnicas
desenvolvidas  Programar de forma modular

 Utilizar variáveis compostas do tipo lista

Outras competências  Utilização das potencialidades do sistema operacional Linux


desenvolvidas para a solução de problemas práticos.

Tempo previsto
 130-150 Minutos
para as atividades

Atividade 1 – Verificando permissão dos arquivos


Crie um script que exibe para o diretório atual a lista de arquivos que tem permissão de
execução.

Resposta:

#!/bin/bash
for arq in `ls`
do
if [ -x "$arq" ]
then
echo "Arquivo $arq tem permissão de execução"
fi
done

1 Introdução ao Linux – Shell


Atividade 2 – Verificando usuários e informações deles
Crie um script que apresenta na tela todos os usuários cadastrados no sistema e seus
respectivos diretórios home.

Resposta:

#!/bin/bash

while read linha

do

user=`echo $linha | cut -d ":" -f 1`

home=`echo $linha | cut -d ":" -f 6`

echo " Usuário: $user -- Dir Home: $home "

done < /etc/passwd

Atividade 3 – Percorrendo um diretório com o comando for e


utilizando contadores
Crie um script que recebe como parâmetro o caminho de um diretório e lista seus arquivos e
diretórios um a um. Se for diretório, deve escrever “dir” ao lado do diretório. Numere cada uma
das linhas. Lembre-se de testar se realmente foi passado um parâmetro.

Resposta:

#!/bin/bash
if [ $# -ne 1 ]
then
echo "Script que lista arquivos de um diretório."
echo "Uso: $0 diretório"
exit
else
contador=0
for arq in $1/*
do
contador=$((contador+1))
if [ -d "$arq" ]
then
echo "$contador -- $arq - DIR - "
else
echo "$contador -- $arq"
fi
done
fi

2 Introdução ao Linux – Shell


Atividade 4 – Ainda manipulando listas com o comando for e
contadores
Crie um script que conta o número de palavras no conteúdo do diretório passado por
parâmetro. Use repetição para fazer a contagem. Lembre-se de testar se realmente foi passado
um parâmetro.

Resposta:

#!/bin/bash
if [ $# -ne 1 ]
then
echo "Script que conta palavras de um diretório."
echo "Uso: $0 diretório"
exit
else
conta=0
for arq in `ls $1`
do
conta=$((conta+1))
done
echo "O diretório contém $conta palavras"
fi

Atividade 5 – Manipulando sequências com o comando for


Crie um script que recebe um número como parâmetro e exibe todos os números de 1 até o
número recebido. Lembre-se de testar se realmente foi passado um parâmetro.

Resposta:

#!/bin/bash
if [ $# -ne 1 ]
then
echo "Script que lista sequência de 1 até parâmetro passado."
echo "Uso: $0 Numero_inteiro"
exit
else
for num in `seq 1 $1`
do
echo "$num"
done
fi

3 Introdução ao Linux – Shell


Atividade 6 – Testando os diversos comandos de repetição
Crie um script que recebe um número como parâmetro e exibe todos os números pares de 1 até
o número recebido. Lembre-se de testar se realmente foi passado um parâmetro. Faça usando a
repetição for e em seguida usando while ou until

Resposta:

#!/bin/bash
if [ $# -ne 1 ]
then
echo "Script que lista números pares na sequência de 1 até parâmetro passado."
echo "Uso: $0 Numero_inteiro"
exit
else
for num in `seq 1 $1`
do
par_impar=$((num%2))
if [ $par_impar -eq 0 ]
then
echo "$num"
fi
done
fi

#!/bin/bash
if [ $# -ne 1 ]
then
echo "Script que lista números pares na sequência de 1 até parâmetro passado."
echo "Uso: $0 Numero_inteiro"
exit
else
for num in `seq 1 $1`
do
if [ `expr $num % 2` -eq 0 ]
then
echo "$num"
fi
done
fi

4 Introdução ao Linux – Shell


#!/bin/bash
if [ $# -ne 1 ]
then
echo "Script que lista números pares na sequência de 1 até parâmetro passado."
echo "Uso: $0 Numero_inteiro"
exit
else
num=1
while (( num <= $1 ))
do
par_impar=$((num%2))
if [ $par_impar -eq 0 ]
then
echo "$num"
fi
num=$((num+1)) # ou let num++
done
fi

Atividade 7 – Utilizando o comando for como contador


Crie um script que recebe dois números passados por parâmetro e escreve o primeiro número a
quantidade de vezes especificada no segundo parâmetro. Lembre-se de testar se realmente
foram passados dois parâmetros.

Resposta:

#!/bin/bash
if [ $# -ne 2 ]
then
echo "Script que lista o número do primeiro parâmetro tantas vezes quantas estiverem
especificadas no segundo parâmetro."
echo "Uso: $0 Numero_inteiro Numero_inteiro"
exit
else
for (( i=1; i<=$2; i++ ))
do
echo $1
done
fi

5 Introdução ao Linux – Shell


Atividade 8 – Utilizando repetição condicionada
Crie um script que lê valores do teclado enquanto o valor digitado for diferente de 0.

Resposta:

#!/bin/bash
read -p "Digite um valor. 0 para sair: " valor
while (( valor != 0 ))
do
read -p "Digite um valor. 0 para sair: " valor
done

Atividade 9 – Criando uma agenda simples


Crie um script que constrói uma agenda telefônica. Você deve apresentar um menu ao usuário
contendo essas opções: 1- inserir; 2 – listar; 3 – sair. O script deve aceitar opções até que seja
digitada a opção de sair. Na opção 1, deve ler um nome e um telefone e armazenar nas próximas
duas posições vazias de um array chamado agenda. Assim, se agenda estiver vazio, o nome será
armazenado na posição 0 e o telefone na posição 1. Na opção 2, o script deve listar todos os
nomes com seus respectivos telefones registrados na agenda.

Resposta:

#!/bin/bash
declare -a agenda
read -p "1 - Inserir; 2 - Listar; 3 - Sair " opcao
while (( opcao != 3 ))
do
tamanho_agenda=${#agenda[*]}
case $opcao in
1) read -p "Digite nome e telefone: " agenda[$tamanho_agenda] agenda[$((tamanho_agenda+1))]
;;
2) i=0
while (( i < $tamanho_agenda ))
do
echo "Nome: ${agenda[i]} --- Telefone: ${agenda[$((i+1))]}"
i=$((i+2))
done
;;
esac
read -p "1 - Inserir; 2 - Listar; 3 - Sair " opcao
done

6 Introdução ao Linux – Shell


Atividade 10 – Criando uma calculadora simples utilizando funções
Crie um script que realiza as operações aritméticas básicas. Ele deve apresentar o menu (1-
soma, 2-subtração, 3-divisão, 4-multiplicação; 5-sair) e fazer as operações enquanto não for
digitada a opção 5. Use funções para cada uma das operações. Verifique se os operandos são
numéricos, com sinal ou sem sinal.

Dica: use o padrão de comparação das expressões regulares para verificar se o parâmetro
contém somente números: [ "$2" =~ ^[+-]?[0-9]*$ ]

Resposta:

#!/bin/bash
function soma ( )
{
local op=$(($1+$2))
echo "soma: $op"
}
function sub ( )
{
local op=$(($1-$2))
echo "sub: $op"
}
function mult ( )
{
local op=$(($1*$2))
echo "mult: $op"
}
function div ( )
{
local op=$(($1/$2))
echo "div: $op"
}

read -p "Calculadora - 1-soma;2-sub;3-divi;4-mult;5-sair " opcao


while (( opcao < 5 ))
do
read -p "Entre numero 1 " n1
read -p "Entre numero 2 " n2
if [[ "$n1" =~ ^[+-]?[0-9]*$ && "$n2" =~ ^[+-]?[0-9]*$ ]]
then
case $opcao in
1) soma $n1 $n2
;;
2) sub $n1 $n2
;;
3) div $n1 $n2
;;

7 Introdução ao Linux – Shell


4) mult $n1 $n2
;;
esac
else
echo "os números devem estar no formato correto"
exit 1
fi
read -p "Calculadora - 1-soma;2-sub;3-divi;4-mult;5-sair " opcao
done

8 Introdução ao Linux – Shell

Você também pode gostar