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"

Entradas relacionadas: