Buscar

EXERCICIOS SHELL SCRIPT

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

OPERAÇÃO COM ARQUIVOS:
-e arq verifca se o arquivo existe
-s arq verifca se o arquivo existe e tem tamanho maior que zero
-f arq verifca se ele é um arquivo
-d dir verifcar se ele é um diretório
-z arq verifca se o arquivo existe e tem tamanho zero
-r arq quero saber se o usuário que esta executando o shell script pode ler o
arquivo
-w arq quero saber se pode alterar o arquivo
-x arq quero saber se ele consegue executar o arquivo
OPERAÇÃO COM STRING
-n string se é maior que zero
-z string se igual a zero
OPERAÇÃO COM INTEIROS
n1 -eq n2 – igual
n1 -gt n2 – maior
n1 -lt n2 – menor
... Ver $man test
 GREP 
-i ignora maiúscula e minúscula
-c contar quantas coincidências
-l não mostra a linha encontrada
-v Mostra as linhas não coincidentes
-n Mostra a linha dentro do arquivo
Metacaracteres
. - Um caracter qualquer
[.…]- Lista de caracteres permitidos
[^...] - Lista de caracteres não permitidos
? - Zero ou um caracter
* - Zero, um ou mais caracteres
+ - Um ou mais
{n,m} – De n até m
^ - Início da linha
$ - Fim da linha
 Classe POSIX Significado
[:upper:] Letras maiúsculas [A-Z]
[:lower:] Letras minúsculas [a-z]
[:alpha:] Letras maiúsculas/minúsculas [A-Za-z]
[:alnum:] Letras Letras e Números [A-Za-z0-9]
[:digit:] Números [0-9]
[:blank:] Espaço e TAB [ \t]
		if TESTE
then
comandos
elif TESTE
comandos
else
comandos
fI
# Lista o conteúdo de um array
array=(1 2 3 4 5 6 7 8 9 10)
for i in ${array[*]}
do
i=$[i-1]
echo ${array[$i]}
done
Exercício proposto em sala
1) Mostre os dados de rede: MAC Address, End IP, Máscara, End Rede e Gateway
#!/bin/bash
# Por. Marco Aurelio Rocha - 07/07/2019
# Obtenção de dados de Rede
clear ; echo "Pesquisando..." ; sleep 2
clear
echo
echo
IP=$(ip a | grep -w inet | grep -v 127.0 | awk '{printf $2}' | cut -d"/" -f1)
MAC=$(ip a | grep ether | awk '{print $2}')
NETWORK=$(ip ro | awk '{print $1}' | grep ^[0-2])
GATEWAY=$(route -n | grep UG | awk '{print $2}')
MASK=$(ip a | grep -w inet | grep -v 127.0 | awk '{print $2}' | cut -d"/" -f2)
echo "ENDERECO IPv4 = $IP"
echo "MASCARA DE REDE = $MASK"
echo "NETWORK = $NETWORK"
echo "GATEWAY = $GATEWAY"
echo "MAC ADDRESS = $MAC"
echo
CursoLinux-Aula9_ShellScript-1
Exercícios de Fixação
1) Liste as linhas do arquivo /etc/group em que o usuário aluno esteja presente.
#!/bin/bash
# Liste as linhas do arquivo /etc/group em que o usuário aluno esteja presente.
# Por.: Marco Aurélio Rocha 07/07/19
echo
grep aluno /etc/group
2) Liste todos os usuários do sistema, apresentando na saída do comando apenas o nome do usuário e seu respectivo UID.
#!/bin/bash
# Liste todos os usuários do sistema, apresentando na saída do
# comando apenas o nome do usuário e seu respectivo UID.
# Por.: Marco Aurélio Rocha 07/07/19
clear
echo "Usuários e seus respectivos UIDs"
echo
cat /etc/passwd | sed 's/:/ /g' | awk '{print $1,$3}'
3) Liste apenas as linhas do /etc/passwd com usuários que iniciem com “a”.
#!/bin/bash
# Liste apenas as linhas do /etc/passwd com usuários que iniciem com .a..
# Por.: Marco Aurélio Rocha 07/07/19
clear
echo
grep ^a /etc/passwd
echo
4) Liste apenas as 5 últimas linhas do arquivo /etc/passwd que terminem com a expressão “/bin/sh”.
#!/bin/bash
# Liste apenas as 5 últimas linhas do arquivo /etc/passwd que terminem
# com a expressão ./bin/sh..
# Por.: Marco Aurélio Rocha 07/07/19
clear
echo
cat /etc/passwd | grep /bin/bash$ | tail -n 5
echo
5) Altere a saída do comando lspci para apresentar a seguinte saída para placas de vídeo, som e rede:
# lspci | <xxx | xxx | xxx>
00:14.2 Placa de som: ATI Technologies Inc SBx00 Azalia (Intel HDA)
01:05.0 Placa de Vídeo: ATI Technologies Inc RS690 [Radeon X1200 Series]
02:00.0 Placa de rede: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E
#!/bin/bash
# Altere a saída do comando lspci para apresentar a seguinte saída para placas de vídeo, som e rede:
# lspci | <xxx | xxx | xxx>
# 00:14.2 Placa de som: ATI Technologies Inc SBx00 Azalia (Intel HDA)
# 01:05.0 Placa de Vídeo: ATI Technologies Inc RS690 [Radeon X1200 Series]
# 02:00.0 Placa de rede: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E
# Por.: Marco Aurélio Rocha 07/07/19
clear
echo
lspci | grep -E 'Multimedia|VGA|Ethernet' | sed 's/VGA compatible controller/Placa de Video/' | sed 's/Ethernet controller/Placa de Rede/' | sed 's/Multimedia audio controller/Placa de som/'
echo
Exercícios de Fixação
Crie um shell script com a seguinte saída:
------- Descrição do sistema -------------
Sistema operacional: $OS
Processador: $CPU
Clock da CPU: $CLOCK
Memória da Máquina: $MEM
Placa de vídeo: $VGA
Placa de Rede: $NET
Placa de Som: $SOUND
Esta máquina já está no ar: $UPTIME
#!/bin/bash
# EVEREST DE POBRE
# Por.: Marco Aurélio Rocha 07/07/19
clear
OS=$(uname)
CPU=$(cat /proc/cpuinfo | grep 'model name' | cut -d":" -f2 | sed 's/ //')
CLOCK=$(cat /proc/cpuinfo | grep 'model name' | cut -d":" -f2 | awk '{print $6}')
MEM=$(cat /proc/meminfo | grep -i MemTotal | awk '{print $2}')
VGA=$(lspci | grep VGA | cut -d":" -f3 | sed 's/ //')
NET=$(lspci | grep -i ethernet | cut -d: -f3 | sed 's/ //')
SOUND=$(lspci | grep -i multimedia | cut -d: -f3 | sed 's/ //')
UPTIME=$(uptime -p | awk '{print $2" " $3}')
echo "--------------- Descrição do sistema ---------------"
echo "Sistema operacional: $OS"
echo "Processador: $CPU"
echo "Clock da CPU: $CLOCK"
echo "Memória da Máquina: $MEM bytes"
echo "Placa de vídeo: $VGA"
echo "Placa de Rede: $NET"
echo "Placa de Som: $SOUND"
echo "Esta máquina já está no ar: $UPTIME"
CursoLinux-Aula10_ShellScript-2
Estrutura de decisão
Exercícios utilizando a estrutura de decisão (if):
1) Crie um shell script que receba dois números inteiros (entre 0 e 100) e informe se o primeiro é maior, menor ou igual ao segundo;
#!/bin/bash
# Crie um shell script que receba dois números inteiros (entre 0 e 100)
# e informe se o primeiro é maior, menor ou igual ao segundo;
# Por.: Marco Aurélio Rocha 07/07/19
read -p "Entre com o primeiro número: (de 0 à 100)" NUM1
read -p "Entre com o segundo número: (de 0 à 100)" NUM2
if [[ "$NUM1" -eq "$NUM2" ]]
then
 echo "Os números são iguais!"
elif [[ "$NUM1" -gt "$NUM2" ]]
then
 echo "O primeiro número é maior"
else
 echo "O primeiro número é menor"
fi
exit 0
2) Escreva um script que receba um arquivo por parâmetro, com caminho absoluto, e informe se o arquivo existe, se tem tamanho maior que zero e se for um diretório liste seu conteúdo;	
#!/bin/bash
# Escreva um script que receba um arquivo por parâmetro, com
# caminho absoluto, e informe se o arquivo existe, se tem
# tamanho maior que zero e se for um diretório liste seu conteúdo.
# Por.: Marco Aurélio Rocha 07/07/19
FILE="$1"
clear
if [ -s "$FILE" ]
 then
 echo "Arquivo $FILE existe e tem tamanho maior que zero!"
else
 echo "Arquivo não existe"
fi
if [ -d "$FILE" ]
 then
 echo "$FILE é um diretório. Segue seu conteúdo:"
 sleep 2
 ls -m $FILE | more
 exit 1
else
 echo "$FILE é um arquivo!"
fi
exit 0
3) Crie um programa que recebe um comando simples, por parâmetro, verifique se ele realmente existe no sistema (informando sua ausência) e informe o caminho absoluto do seu binário. No final pergunte ao usuário se ele deseja ver o manual on-line do comando recebido. (considere um comando válido os comandos encontrados pelo utilitário which)
#!/bin/bash
# Crie um programa que recebe um comando simples, por parâmetro, verifique se
# ele realmente existe no sistema (informando sua ausência) e informe o
# caminho absoluto do seu binário. No final pergunte ao usuário se ele deseja
# ver o manual on-line do comando recebido. (considere um comando válido os
# comandos encontrados pelo utilitário which)
# Por.: Marco Aurélio Rocha 07/07/19
COMANDO=$1
clear
if which$COMANDO &>/dev/null
 then
 echo "$COMANDO é um comando válido"
 echo "Caminho absoluto de $COMANDO: ";which $COMANDO
else
 echo "Não é um comando válido"
 exit 1
fi
exit 0
Estrutura de decisão
Exercícios utilizando a estrutura de decisão (case):
1) Crie um shell script que limpe a tela, forme um menu solicitando a idade do usuário, e exiba as seguintes informações de acordo com a idade informada:
	1-13 Você é uma Criança, vá brincar.
	14-17 Adolecente, vá estudar.
	18-60 Adulto, vá trabalhar.
	61-99 Apto para o clube da melhor idade!
	Qualquer outro valor: “Idade inválida!”
#!/bin/bash
# Crie um shell script que limpe a tela, forme um menu solicitando
# a idade do usuário, e exiba as seguintes informações de acordo
# com a idade informada:
# 1-13 Você é uma Criança, vá brincar.
# 14-17 Adolescente, vá estudar.
# 18-60 Adulto, vá trabalhar.
# 61-99 Apto para o clube da melhor idade!
# Qualquer outro valor: “Idade inválida!”
# Por.: Marco Aurélio Rocha 07/07/19
clear
read -p "Informe sua idade: " IDADE
echo;echo
case $IDADE in
 1 | 1[1-3])echo "Você é uma Criança, vá brincar.";;
 1[4-7])echo "Adolecente, vá estudar.";;
 1[8-9] | [2-5][0-9] | 60)echo "Adulto, vá trabalhar.";;
 6[1-9] | [7-9][0-9])echo "Apto para o clube da melhor idade!";;
 *) echo "Idade inválida!"
esac
echo
Laços
Exercícios de Fixação utilizando a estrutura de repetição (for):
1) Verifique no sistema quantos usuários existem, quantos são usuários de sistema (UID abaixo de 1000) e quantos são usuários criados para uso (UID igual ou acima de 1000). Informe quantos usuários utilizam o bash como shell, quantos utilizam sh e quantos estão bloqueados para uso com shell (/bin/false).
#!/bin/bash
# Verifique no sistema quantos usuários existem, quantos
# são usuários de sistema (UID abaixo de 1000) e quantos
# são usuários criados para uso (UID igual ou acima de 1000).
# Informe quantos usuários utilizam o bash como shell, quantos
# utilizam sh e quantos estão bloqueados para uso com shell (/bin/false).
# Por.: Marco Aurélio Rocha 07/07/19
TOT_USUARIOS=0
UID_ABAIXO=0
UID_ACIMA=0
UTILIZAM_BASH=0
UTILIZAM_SH=0
BLOQUEADOS=0
clear
for LINHA in $(cat /etc/passwd | sed 's/ /:/g')
do
 let TOT_USUARIOS++
done
for LINHA in $(cat /etc/passwd | sed 's/ /:/g' | awk -F: '$3<1000 {print $0}')
do
 let UID_ABAIXO++
done
for LINHA in $(cat /etc/passwd | sed 's/ /:/g' | awk -F: '$3>=1000 {print $0}')
do
 let UID_ACIMA++
done
for LINHA in $(cat /etc/passwd | sed 's/ /:/g' | grep /bin/bash$)
do
 let UTILIZAM_BASH++
done
for LINHA in $(cat /etc/passwd | sed 's/ /:/g' | grep /bin/sh$)
do
 let UTILIZAM_SH++
done
for LINHA in $(cat /etc/passwd | sed 's/ /:/g' | grep /bin/false$)
do
 let BLOQUEADOS++
done
echo "1) Total de usuários: $TOT_USUARIOS"
echo "2) Usuários de sistema: $UID_ABAIXO"
echo "3) Usuários para uso: $UID_ACIMA"
echo "4) Usuários que utilizam o bash: $UTILIZAM_BASH"
echo "5) Usuários que utilizam o sh: $UTILIZAM_SH"
echo "6) Usuários bloqueados para uso com shell (/bin/false): $BLOQUEADOS"
exit 0
2) A partir de um diretório, passado por parâmetro, escrever um script que renomeia todos os arquivos de uma determinada extensão (parâmetro) para outra extensão.
Exemplo: Todos os arquivos .doc do diretório /tmp alterados para .txt
$ ./renomeia.sh /tmp doc txt
#!/bin/bash
# A partir de um diretório, passado por parâmetro,
# escrever um script que renomeia todos os arquivos
# de uma determinada extensão (parâmetro) para outra extensão.
# Exemplo: Todos os arquivos .doc do diretório /tmp alterados para .txt
# $ ./renomeia.sh /tmp doc txt
# Por. Marco Aurelio Rocha - 07/07/19
clear
DIR=$1
EXT_1=$2
EXT_2=$3
cd $1
for arquivo in *.$EXT_1
do
 mv $arquivo `echo $arquivo | cut -d. -f1`.$EXT_2
done
exit 0
Laços
Exercícios utilizando a estrutura de repetição (while/until):
1) Crie um shell script que monitore o tamanho de um diretório, e passar dos 10 MB o script irá enviar um aviso de LOG para o sistema para que o administrador receba o alerta da hora/minuto que isso ocorreu.
#!/bin/bash
# Crie um shell script que monitore o tamanho de um
# diretório, se passar dos 10 MB o script irá enviar um aviso
# de LOG para o sistema para que o administrador receba o
# alerta da hora/minuto que isso ocorreu.
# Por. Marco Aurelio Rocha - 07/07/19
DIR=$1
if [ -z "$DIR" ]
then
 echo "ERRO 1 - Informe um diretório válido..."
 echo "USE: $0 <diretório>"
 exit 1
fi
TAMANHO=$(du -b $DIR | awk '{printf $1}')
echo $TAMANHO
while [ $TAMANHO -le 10485760 ]
do
 echo -n "."
 sleep 0.5
 TAMANHO=$(du -b $DIR | awk '{printf $1}' )
done
echo
logger O diretorio $DIR excedeu 10MB
	
2) Escreva um script que monitore o tamanho de um arquivo, se o arquivo tiver um tamanho superior a 50 linhas o script irá enviar um aviso de LOG para o sistema para que o administrador receba o alerta da hora/minuto que isso ocorreu.
#!/bin/bash
# Escreva um script que monitore o tamanho de um arquivo,
# se o arquivo tiver um tamanho superior a 50 linhas o script
# irá enviar um aviso de LOG para o sistema para que o administrador
# receba o alerta da hora/minuto que isso ocorreu.
# Por. Marco Aurelio Rocha - 07/07/19
clear
FILE=$1
if [ -z "$FILE" ]
then
 echo "Informe um arquivo valido"
 echo "USE: $0 <arquivo>"
 exit 1
fi
NLINHAS=$(wc -l $FILE | cut -d" " -f1)
while [ "$NLINHAS" -le 50 ]
do
 echo -n "*" ; sleep 0.4
 NLINHAS=$(wc -l $FILE | cut -d" " -f1)
done
echo
logger "O arquivo $FILE excedeu os 50MB"
exit 0
SHELL SCRIPT
Exercícios de Fixação
Exercício 1
Elaborar um script que receba um número como parâmetro e imprima todos os números pares de 0
até o número informado como parâmetro.
Exemplo:
./exercicio4.sh 10
0 2 4 6 8 10
#!/bin/bash
# Elaborar um script que receba um número como parâmetro e
# imprima todos os números pares de 0 até o número informado
# como parâmetro. Exemplo:
# ./exercicio4.sh 10
# 0 2 4 6 8 10
# Por. Marco Aurelio Rocha - 07/07/19
read -p "Informe um número par qualquer: " NUM
if [[ $NUM != ?(+|-)+([0-9]) ]] 
then
 echo "Não é um valor numerico"
 exit 1
fi
seq -s" " 0 1 "$NUM"
exit 0
_______________________________
Exercício 2
Elaborar um script que receba dois números como parâmetros e como resultado da sua execução
exiba as seguintes informações:
- O maior dos números recebidos;
- O somatório dos números recebidos.
Exemplo:
./exercicio1.sh 23 14
O maior número é 23.
A soma dos números é 37.
#!/bin/bash
# Elaborar um script que receba dois números como parâmetros e como resultado
# da sua execução exiba as seguintes informações:
# - O maior dos números recebidos;
# - O somatório dos números recebidos.
# Exemplo:
# ./exercicio1.sh 23 14
# O maior número é 23.
# A soma dos números é 37.
# Por.: Marco Aurélio Rocha 07/07/19
clear
NUM1=$1
NUM2=$2
SOMA=$((NUM1 + NUM2))
echo "A soma dos' números é: $SOMA"
 if [[ "$NUM1" -gt "$NUM2" ]]
 then
 echo "O maior número é $NUM1"
 elif [[ "$NUM2" -gt "$NUM1" ]]
 then
 echo "O maior número é $NUM2"
 fi
exit 0
_______________________________
Exercício 3
Escreva um script que receba como parâmetro o caminho de um diretório e liste seus arquivos e diretórios um a um. Se for diretório, deve escrever “(dir)” ao lado do diretório.
Exemplo 1:
./exercicio3.sh /tmp
arq1
arq2
dir1 (dir)
xarq
dir2 (dir)
#!/bin/bash
# Escreva um script que receba como parâmetro o caminho de um diretório e liste seus
# arquivos e diretórios um a um. Se for diretório, deve escrever “(dir)” ao lado do diretório.
# Exemplo 1:
# ./exercicio3.sh /tmp
# arq1
# arq2
# dir1 (dir)
# xarq
# dir2 (dir)
# Por.: Marco Aurélio Rocha 07/07/19
clear
ENTRADA=$1
 if [ ! -d $ENTRADA ]
 then
 echo "Nãoé um diretório válido!"
 exit 1
 fi
 for DIR in $(ls -l "$ENTRADA" | grep ^d | awk '{print $9}')
 do
 echo "$DIR (dir)"
 done
 for ARQ in $(ls -l "$ENTRADA" | grep ^- | awk '{print $9}')
 do
 echo $ARQ
 done
exit 0
_______________________________
Exercício 4
Elaborar um script que receba um nome de arquivo como parâmetro e verifique se esse arquivo existe. Em caso afirmativo, imprimir o seu tamanho em bytes.
Exemplo 1:
./exercicio5.sh /etc/fstab
O arquivo /etc/fstab existe e tem 861 bytes.
Exemplo 2:
./exercicio5.sh /etc/arqqualquer
O arquivo /etc/arqqualquer não existe.
#!/bin/bash
# Elaborar um script que receba um nome de arquivo como parâmetro e verifique
# se esse arquivo existe. Em caso afirmativo, imprimir o seu tamanho em bytes.
# Exemplo 1:
# ./exercicio5.sh /etc/fstab
# O arquivo /etc/fstab existe e tem 861 bytes.
# Exemplo 2:
# ./exercicio5.sh /etc/arqqualquer
# O arquivo /etc/arqqualquer não existe.
# Por.: Marco Aurélio Rocha 07/07/19
ARQUIVO=$1
 if [ ! -f $ARQUIVO ]
 then
 echo "O arquivo $ARQUIVO não existe."
 exit 1
 fi
 TAMANHO=$(du -b $ARQUIVO | cut -f1)
 clear
 echo "O arquivo $ARQUIVO existe e tem $TAMANHO bytes".
exit 0
______________________________
Exercício 5
Elaborar um script que apresente 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.
Informe sua opção:
As linhas acima serão apresentadas aos usuários até que seja escolhida a opção 4 (Sair). Caso seja escolhida alguma opção entre 1 e 3, serão executados os comandos correspondentes e o resultado da execução será apresentado ao usuário. Caso seja informado algum número que não corresponde às opções de menu disponíveis, exibir na tela a mensagem “Opção não disponível. Tente outra vez.”.
Exemplo1:Exemplo2:
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.
Informe sua opção: 3
Qua Jun 21 23:43:06 BRT 2006
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.
Informe sua opção: 1
/dev/hda3 9.9G 5.4G 4.1G 57% /
/dev/hda1 23M 6.5M 16M 30% /boot
/dev/hda6 23G 1.8G 20G 9% /home
/dev/hda5 5.0G 3.2G 1.6G 68% /var
shmfs 125M 0 125M 0% /dev/shm
#!/bin/bash
# Elaborar um script que apresente 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.
# Informe sua opção:
# As linhas acima serão apresentadas aos usuários até que seja escolhida a opção
# 4 (Sair). Caso seja escolhida alguma opção entre 1 e 3, serão executados os
# comandos correspondentes e o resultado da execução será apresentado ao usuário.
# Caso seja informado algum número que não corresponde às opções de menu
# disponíveis, exibir na tela a mensagem “Opção não disponível. Tente outra vez.”.
# Por.: Marco Aurélio Rocha 07/07/19
clear
echo "########################## MENU DO SISTEMA ##########################
# #
# 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. #
# #
#####################################################################"
echo;read -p "Informe uma das opções acima [1-4]: " OPCAO
case $OPCAO in
 1) echo;echo "Status da utilização das partições do Sistema:"
 df -h;echo
 echo "Pressione qualquer tecla para voltar ao Menu de Opções:"
 read -n 1
 ;;
 2) echo;echo "Relação de usuários logados no Sistema:"
 who | awk '{print $1}';echo
 echo "Pressione qualquer tecla para voltar ao Menu de Opções:"
 read -n 1
 ;;
 3) echo;echo "Data e hora:"
 date "+%d/%m/%y %H:%M";echo
 echo "Pressione qualquer tecla para voltar ao Menu de Opções:"
 read -n 1
 ;;
 4) echo "Saindo . . ."
 sleep 1
 exit 1
 ;;
 *) echo "Opção não disponível. Tente outra vez."
 echo
 sleep 2
 ;;
esac
./$0
exit 0
Exercício 6
Todos os semestres a coordenação exige que o professor repasse a ela os dias em que serão utilizados o laboratório. Essas datas baseiam-se nos dias da semana em que são ministradas as aulas. Como nossa disciplina exige uso intensivo do laboratório, o professor repassa a coordenação todas as datas do semestre letivo em que são ministradas as aulas de LPI, para que possamos usar o laboratório 100% do tempo disponível. Esse é um processo trabalhoso, que envolve a busca dessas informações em um calendário e a transcrição das datas para um e-mail que é enviado à coordenação. Para minimizar esse problema, desenvolvam um script que, a partir da informação dos dias da semana em que há aulas de SO, produza todas as respectivas datas do ano em que serão ministradas nossas aulas. (1 – Segunda, 2 – Terça, 3 – Quarta, 4 – Quinta, 5 – Sexta, 6 – Sábado e 7 - Domingo)
Exemplo:
exercicios7.sh 2010/02/07 2010/07/05 1,3
11/02/2010, 13/02/2010, 18/02/2010, 20/02/2010, 25/02/2010, 27/02/2010,
03/03/2010, 05/03/2010, ...
_______________________________
Exercício 7
Considere um determinado diretório que possui vários arquivos textos. Esses arquivos possuem nomes variados, não obedecendo a qualquer critério. Escreva um script que renomeie cada arquivo desse diretório, dando ao arquivo o nome correspondente à primeira palavra encontrada no conteúdo do próprio arquivo.
#!/bin/bash
# Considere um determinado diretório que possui vários arquivos textos.
# Esses arquivos possuem nomes variados, não obedecendo a qualquer
# critério. Escreva um script que renomeie cada arquivo desse diretório,
# dando ao arquivo o nome correspondente à primeira palavra encontrada
# no conteúdo do próprio arquivo.
# Por.: Marco Aurélio Rocha 07/07/19
cd /home/marco/textos
for RENOMEIA in $(ls *.txt)
do
 for PRIMEIRA in $(cat $RENOMEIA | cut -d" " -f1)
 do
 mv $RENOMEIA $PRIMEIRA.txt
 done
done
exit 0
_______________________________
Exercício 8
Desenvolva um script que receba palavras interativamente e, a cada palavra recebida, exiba, como resultado, essas palavras ordenadas. Ao ser informada a palavra “sair”, o script é finalizado.
Exemplo:
exercicio10.sh
Informe a palavra a ser incluída na lista ordenada: casa
casa
Informe a palavra a ser incluída na lista ordenada: abacaxi
abacaxi
casa
Informe a palavra a ser incluída na lista ordenada: bola
abacaxi
bola
casa
Informe a palavra a ser incluída na lista ordenada: sair
_______________________________
Exercício 9
Desenvolva um script que realize as operações aritméticas básicas (soma, subtração, divisão e
multiplicação), recebendo a operação e os operadores como parâmetros:
Exemplo:
exercicio11.sh 2 + 2
4 exercicio11.sh 2
*
3
6 exercicio11.sh 8
/
4
2 exercicio11.sh 7
-
2
5
_______________________________
Exercício 10
Faça um script que a cada 60 segundos verifique se um determinado usuário está “logado” no sistema, quando o usuário se logar o script deverá:
1 - Informar na tela que o acesso ocorreu;
2 - Enviar uma mensagem de log informando o acesso (hora e em qual console o acesso ocorreu);
3 - Envie uma mensagem para o usuário avisando que seu acesso foi bloqueado;
4 - Cancele todos os processos deste usuário;
5 - Altere seu shell para “/bin/false e bloqueie sua conta utilizando um “!” no campo de senha doarquivo /etc/passwd.
Expressões Regulares
Exercício de fxação
Com base no exemplo dado escreva um shell script que receba um endereço IP e informe se é um endereço válido ou não.
$ ValidaIP.sh 10.10.10.102
Endereço IP 10.10.10.102 é um endereço Ipv4 válido.
$ ValidaIP.sh 10.10.10.266
O endereço 10.10.10.266 não é um endereço Ipv4 válido.

Outros materiais