Você está na página 1de 9

Roteiro de Atividades 7

Shell Script
 Estruturas de decisão
Tópicos e conceitos
 Expressões regulares

 Controlar de fluxo de execução sequencial num script com o


Competências técnicas uso de estruturas de decisão
desenvolvidas  Aprender a criar máscaras ou padrões de pesquisas na busca
por informações através de expressões regulares

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


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

Tempo previsto
 150-180 minutos
para as atividades

Atividade 1 – Verificando a existência de arquivos


Crie um script que recebe como parâmetro um nome de arquivo e verifica se este arquivo existe.

Resposta:

#!/bin/bash
if [ -e $1 ]
then
echo " O arquivo $1 existe"
else
echo "Arquivo inexistente"
fi

Atividade 2 – Verificando a entrada de parâmetros


Modifique o script da Atividade 1 de forma que ele teste se realmente recebeu um parâmetro.

Resposta:

#!/bin/bash
if [ $# -ne 1 ]
then

1 Introdução ao Linux – Shell


echo "Script que verifica se um arquivo existe"
echo "Uso: $0 arquivo"
exit
else
if [ -e $1 ]
then
echo " O arquivo $1 existe"
else
echo "Arquivo inexistente"
fi
fi

Atividade 3 – Executando sequências de comandos


Estenda o script da Atividade 2 para escrever o tamanho do arquivo, caso ele exista.

Dica: utilize o comando ls -lh, que traz a informação do arquivo, combinado com o comando cut, para
trazer somente o campo do tamanho do arquivo.

Resposta:

#!/bin/bash
if [ $# -ne 1 ]
then
echo "Script que verifica se um arquivo existe"
echo "Uso: $0 arquivo"
exit
else
if [ -e $1 ]
then
echo " Tamanho do arquivo $1: `ls -lh $1 | cut -d " " -f 5`"
else
echo "Arquivo inexistente"
fi
fi

Atividade 4 – Combinando parâmetros, leitura e execução de


comandos.
Crie um script que auxilia a criação de arquivos. Ele deve receber como parâmetro um nome e
criar o arquivo no diretório corrente, com a permissão de escrita. Em seguida deve perguntar ao
usuário se ele quer editar o arquivo ou não. Se sim, abrir um arquivo em um editor. Verifique se
o usuário passou o número correto de parâmetros (1) e se o arquivo que ele pediu para criar já
existe.

2 Introdução ao Linux – Shell


Resposta:

#! /bin/bash
if [ $# = 1 ]
then
if [ -f $1 ]
then
echo "este arquivo já existe!"
else
touch $1
chmod +rwx $1
echo " O arquivo $1 foi criado"
echo -n "Deseja edita-lo agora (s/n)? "
read opcao
if [ $opcao = "s" ]
then
vi $1
fi
fi
else
echo "Uso do script: $0 nome_arquivo"
fi

Atividade 5 – Utilizando comando grep/egrep


Crie um script que solicita a informação de um nome de usuário e verifica se o nome informado
é de um usuário válido no sistema (desconsiderando as diferenças entre maiúsculas e
minúsculas).

Resposta:

#!/bin/bash
if [ $# -ne 1 ]
then
echo "Script que verifica se um usuário é válido no sistema."
echo "Uso: $0 nome_usuário"
echo "Você deve passar o nome de um usuário"
exit
else
grep ^$1: /etc/passwd >/dev/null
if [ $? -eq 0 ]
then
echo "O usuário $1 é válido"
else
echo "O usuário $1 não é válido"
fi
fi

3 Introdução ao Linux – Shell


Atividade 6 – Ainda usando grep/egrep
Crie um arquivo chamado agenda contendo nomes e telefones, no formato: nome sobrenome
telefone. Crie um script que recebe como parâmetro um nome e imprima as linhas do arquivo
agenda que o contenham. Verifique se realmente foi passado um parâmetro.

Resposta:

#!/bin/bash
if [ $# -ne 1 ]
then
echo "recupera nome e telefone a partir do arquivo agenda"
echo "O nome deve ser passado por parâmetro"
echo "Uso: $0 nome"
exit 1
else
grep $1 agenda > /dev/null
if [ $? -eq 0 ]
then
echo "recuperando informações"
grep $1 agenda
fi
fi

Atividade 7 – Combinando comandos


Crie um script que armazena em uma variável a quantidade de arquivos do diretório corrente e
em seguida escreve o valor dessa variável.

Dica: utilize os comando pwd para ver diretório corrente, ls para lista-lo e wc para contar.

Resposta:

#!/bin/bash

dir=`pwd`

quant=`ls $dir | wc -l`

if [ $quant -gt 0 ]

then

echo "O diretório corrente ($dir) tem $quant arquivos"

else

echo "Não há arquivos no diretório corrente ($dir)"

fi

4 Introdução ao Linux – Shell


Atividade 8 – Aninhando condicionais
Crie um script que recebe três números como parâmetros e exiba o maior deles. Verifique se
realmente foram passados três parâmetros.

Resposta:
#!/bin/bash
if [ $# -ne 3 ]
then
echo "Script que verifica qual é o maior entre 3 números"
echo "Entre com os números nos parâmetros"
echo "Uso: $0 numero1 numero2 numero3"
exit 1
else
if [ $1 -ge $2 ] && [ $1 -ge $3 ]
then
maior=$1
elif [ $2 -ge $1 ] && [ $2 -ge $3 ]
then
maior=$2
else
maior=$3
fi
echo "O número $maior é o maior deles"
fi

Atividade 9 – Utilizando expressões regulares


Crie um script que recebe duas palavras como parâmetro e verifica se a primeira está contida na
segunda.

Resposta:

#!/bin/bash
if [ $# -ne 2 ]
then
echo "Script que verifica se o primeiro argumento é substring do segundo"
echo "Uso: $0 substring palavra"
exit
else
if [[ "$2" =~ "$1" ]]
then
echo "$1 é substring de $2"
else
echo "não há relação"
fi
fi

5 Introdução ao Linux – Shell


Atividade 10 – Ainda utilizando expressões regulares

Crie um script que recebe o nome de um arquivo texto como parâmetro, verifica se o usuário
possui permissão de leitura deste arquivo e, caso tenha, exiba as seguintes informações sobre o
arquivo: número de caracteres, número de palavras e número de linhas do arquivo (Dica: utilize
o comando wc)

Resposta:
#!/bin/bash
if [ $# -ne 1 ]
then
echo "Script conta informações de um arquivo texto"
echo "Uso: $0 arquivo"
exit
else
if [ -r $1 ]
then
if [[ `file $1` =~ "ASCII text"$ ]]
then
carac=`wc -c $1 | cut -d " " -f 1`
pal=`wc -w $1 | cut -d " " -f 1`
lin=`wc -l $1 | cut -d " " -f 1`
echo "O arquivo $1 possui $carac caracteres, $pal palavras e $lin linhas"
else
echo "O arquivo deve ser do tipo texto"
fi
else
echo "O arquivo não tem permissão de leitura ou não existe"
fi
fi

Atividade 11 – Utilizando case


Crie um script que retorna o dia da semana por extenso, a partir do comando date.

Ex: hoje é segunda-feira

Resposta:

#!/bin/bash
mes=`date +"%m"`
diasem=`date +"%w"`
case $diasem in
1) dia="segunda"
;;
2) dia="terça"
;;
3) dia="quarta"
;;
4) dia="quinta"

6 Introdução ao Linux – Shell


;;
5) dia="sexta"
;;
6) dia="sabado"
;;
7) dia="domingo"
;;
esac
echo "Hoje é $dia"

Atividade 12 – Utilizando case com menu de opções

Crie um script que apresenta ao usuário um menu com as seguintes opções:


1 - Exibir status da utilização das partições do sistema; (df -h)
2 - Exibir relação de usuário logados; (who)
3 - Exibir data/hora; (date)
4 - Sair.
E partir daí, receba a opção digitada pelo usuário e execute o comando respectivo. Informe ao
usuário caso ele esteja digitando opção fora daquelas esperadas.

Resposta:

#!/bin/bash
echo "1 - Exibir status da utilização das partições do sistema"
echo "2 - Exibir relação de usuário logados"
echo "3 - Exibir data/hora"
echo "4 - Sair"
echo "Informe sua opção: "
read opcao
case $opcao in
1) echo "As partições do sistema estão sendo usadas desta forma"
df -h
;;
2) echo "Usuários Logados"
who
;;
3) echo "Data e hora atuais"
date
;;
4) echo "Saindo do sistema"
;;
*) echo "Você deve digitar as opções de 1 a 4"
Esac

7 Introdução ao Linux – Shell


Atividade 13 – Combinando if com case
Crie um script que realiza as operações aritméticas básicas (soma, subtração, divisão e
multiplicação), recebendo a operação e os operandos como parâmetros. 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
if [ $# -ne 3 ]
then
echo "Calculadora simples"
echo "Uso: $0 operação (som,sub,mul,div) operando1 operando2"
exit
else
if [[ "$2" =~ ^[+-]?[0-9]*$ && "$3" =~ ^[+-]?[0-9]*$ ]]
then
case $1 in
som) ((op=$2+$3))
echo "A soma dos dois numéros é: $op"
;;
sub) ((op=$2-$3))
echo "A subtração dos dois numéros é: $op"
;;
mul) ((op=$2*$3))
echo "A multiplicação dos dois numéros é: $op"
;;
div) ((op=$2/$3))
echo "A divisão dos dois numéros é: $op"
;;
*) echo "Você deve digitar uma das operações matemáticas (som, sub, mul, div)"
esac
else
echo "numero inválido"
fi
fi

Atividade 14 – Combinando if, case e comandos

Crie um script que recebe o nome de um arquivo como parâmetro e que, caso este arquivo não
exista, escreva a lista de arquivos de /home neste arquivo. Se o arquivo existir, exibe uma

8 Introdução ao Linux – Shell


mensagem dizendo o arquivo já existe; em seguida dar a opção de apagar o arquivo anterior,
substituindo seu conteúdo, ou a opção de adicionar no final do arquivo a nova informação.

Resposta:

#!/bin/bash
if [ $# -ne 1 ]
then
echo "Script escreve o conteúdo de /home no arquivo"
echo "O arquivo deve ser passado por parâmetro"
echo "Uso: $0 arq"
exit 1
else
if [ -f $1 ]
then
if [ ! -w $1 ]
then
echo " O arquivo $1 já existe e não tem permissão de escrita"
else
echo " O arquivo $1 já existe. O que deseja fazer?"
echo "1 - substituir seu conteúdo por este"
echo "2 - adicionar no final do arquivo"
echo "3 - sair"
read opcao
case $opcao in
1) echo "substituindo conteúdo pelo /home"
ls /home > $1
;;
2) echo "adicionado no final do arquivo $1 conteúdo de /home"
ls /home >> $1
;;
3) echo "deixando o script"
exit
esac
fi
else
echo " criando o arquivo $1 com o conteúdo de /home"
ls /home > $1
fi
fi

9 Introdução ao Linux – Shell

Você também pode gostar