Exercícios e Scripts do Shell Linux
Classificado em Computação
Escrito em em português com um tamanho de 8,34 KB.
Comandos e Scripts Linux
1. Listar Conteúdo do Diretório com Nomes entre Aspas
Especifique o comando Linux que lista o conteúdo do diretório /root/teste, com os nomes de arquivos entre aspas e separados por vírgulas.
Resposta:
ls -Q -m /root/teste
2. Listar Subdiretórios com Permissões Específicas
Especifique o comando Linux que permite listar todos os subdiretórios do diretório atual com permissão de leitura, escrita e execução para o dono e leitura e execução para o grupo.
Resposta:
ls -l | grep '^drwxr-x'
3. Definir o C Shell como Shell Padrão
Especifique o comando Linux que permite definir o C Shell como o shell padrão para o usuário root.
Resposta:
chsh -s /bin/csh root
4. Script para Copiar Arquivo se Existir
Escreva um script que receba um arquivo e um diretório como argumentos. O script deve verificar se os argumentos correspondem a um arquivo e um diretório, respectivamente. O script deve verificar se o arquivo existe no diretório e, caso não exista, copiar o arquivo para o diretório.
Script:
#!/bin/bash
clear
if test -f "$1"; then
if test -d "$2"; then
ls "$2" | grep -w "$1"
if test $? -eq 0; then
echo -e "$1 existe em $2\n"
else
cp "$1" "$2"
echo -e "$1 copiado para $2\n"
fi
else
echo -e "Diretório inválido\n"
exit
fi
else
echo -e "Arquivo inválido\n"
exit
fi
5. Script AWK para Calcular IMC
Crie um arquivo chamado personas.dat com os campos: nome, peso (em kg) e altura (em metros). Use o caractere # como delimitador. Exemplo:
Juan#80#1.75
Paulina#65#1.6
Escreva um programa AWK, chamado listado_imc, que leia personas.dat e gere uma lista de pessoas com IMC (Índice de Massa Corporal) normal (entre 18.5 e 24.99). O IMC é calculado como: IMC = peso / (altura)2.
A lista deve ter o seguinte formato:
Listagem IMC normal
Nome IMC
Programa AWK (listado_imc):
BEGIN { FS = "#"; OFS = "\t";
print "Listagem IMC normal";
print "Nome\t\tIMC";
}
{
imc = $2 / ($3 * $3);
if (imc >= 18.5 && imc <= 24.99) {
printf "%s\t\t%.2f\n", $1, imc;
}
}
Execução:
awk -f listado_imc personas.dat
6. Seleção de Comando com base no PATH
Dado o seguinte conteúdo da variável de ambiente PATH:
/usr/local/bin:/bin:/usr/bin:.
Se existir um comando chamado lista no diretório atual e outro no diretório /usr/bin, qual seria executado ao digitar lista
no prompt?
Resposta:
Seria executado o comando lista localizado em /usr/bin, pois o diretório atual (.) aparece *depois* de /usr/bin na variável PATH.
7. Script para Extrair Linhas que Começam com Letras
Escreva um script que receba dois arquivos como argumentos. O script deve validar se os arquivos existem. Se o primeiro arquivo (arquivo de entrada) não estiver vazio, o script deve salvar no segundo arquivo (arquivo de saída) as linhas do arquivo de entrada que começam com qualquer letra (maiúscula ou minúscula).
Script:
#!/bin/bash
clear
if test -s "$1"; then
if test -f "$2"; then
grep '^[a-zA-Z]' "$1" > "$2"
else
echo -e "$1: Arquivo inválido\n"
exit
fi
else
echo -e "Arquivo $1 não existe ou está vazio\n"
exit
fi
8. Comando para Encontrar e Apagar Arquivos Vazios
Especifique o comando Linux que permite pesquisar e apagar, sem confirmação, todos os arquivos vazios regulares cujos nomes começam com a letra a e que se encontram em /root/teste.
Resposta:
find /root/teste -name "a*" -size 0 -type f -exec rm -f {} \;
9. Comando para Extrair Palavras com Vogais no Início e Fim
Crie um arquivo palabras.txt contendo uma palavra diferente em cada linha. Especifique o comando Linux que permite extrair de palavras.txt todas as palavras que começam e terminam com uma vogal (maiúscula ou minúscula).
Resposta:
# Crie palabras.txt com um editor de texto.
grep '^[aeiouAEIOU].*[aeiouAEIOU]$' palabras.txt
10. Criar um Alias
Especifique o comando Linux que permite criar o alias lista que limpa a tela, exibe a data e hora em linhas separadas e lista as permissões de *todos* os arquivos no diretório atual.
Resposta:
alias lista='clear; date +"%D\n%T"; ls -al'
11. Contar Arquivos Regulares com Pipes
Usando pipes, digite o comando Linux que informa o número de arquivos regulares (não diretórios, links, etc.) existentes no diretório de trabalho atual.
Resposta:
ls -l | grep '^\-' | wc -l
12. Script AWK para Listar Alunos Aprovados
Crie um arquivo chamado notas_curso com os campos: nome do aluno, sobrenome do aluno, nota1, nota2, nota3. Use a vírgula (,) como delimitador. Exemplo:
Juan,Perez,3.5,4.7,5.3
Paulina,Fabres,2.5,4.7,3.4
Escreva um programa AWK, chamado listado_aprobados, que exiba uma lista de alunos aprovados (média maior ou igual a 4.0). A lista deve ter o seguinte formato:
Listagem Aprovados
Sobrenome Nome Média
Programa AWK (listado_aprobados):
BEGIN { FS = ","; OFS = "\t";
print "Listagem Aprovados";
print "Sobrenome\tNome\t\tMédia";
}
{
media = ($3 + $4 + $5) / 3;
if (media >= 4.0) {
printf "%-s\t\t%s\t\t%.1f\n", $2, $1, media;
}
}
Execução:
awk -f listado_aprobados notas_curso
13. Configurar Variáveis de Ambiente para Histórico de Comandos
Quais comandos Linux permitem configurar as variáveis de ambiente para que o histórico de comandos inclua a data e hora da execução e para eliminar entradas duplicadas no arquivo de histórico?
Resposta:
Edite as variáveis HISTTIMEFORMAT
e HISTCONTROL
no arquivo .bash_profile
(ou arquivo de configuração do seu shell, como .bashrc
) do usuário. Adicione/modifique as seguintes linhas:
export HISTTIMEFORMAT="%F %T " # Formato: AAAA-MM-DD HH:MM:SS
export HISTCONTROL=erasedups
14. Script para Testar Conectividade de Rede
Uma empresa possui uma matriz e três filiais. Devido a problemas de conexão, é necessário testar constantemente os endereços IP das filiais. Escreva um shell script, chamado testIP, que gere um arquivo de log (testIP_sucursales.log) com o resultado do teste de conectividade da matriz para todas as filiais. Os testes devem ser realizados a cada 5 minutos, 24 horas por dia. Os endereços IP das filiais devem ser fornecidos em um arquivo cujo nome é passado como argumento para o script. O formato do arquivo é um endereço IP por linha.
Script (testIP):
#!/bin/bash
clear
while true; do
for ip in $(cat "$1"); do
echo -e "+--------------------------------+" >> testIP_sucursales.log
date +"%D %T" >> testIP_sucursales.log
ping -c 3 "$ip" >> testIP_sucursales.log
done
sleep 300
done
15. Script para Mostrar Linhas Não Vazias com Números de Linha
Escreva um shell script, chamado mostrar_lineas, que mostre todas as linhas não vazias, juntamente com o número da linha, de qualquer arquivo lido do teclado.
Script (mostrar_lineas):
#!/bin/bash
clear
echo -e "Nome do arquivo: \c"
read arquivo
i=1
while read linha; do
if test ! "$linha" = ""; then
echo -e "$i\t$linha"
i=$((i + 1))
fi
done < "$arquivo"