Shell
by (C) João Eriberto Mota Filho <eriberto (a) eriberto pro br>
Artigo criado em: 04 de setembro de 2012.
Última atualização: veja o rodapé desta página.
Tiny URL ou bit.ly: http://bit.ly/shellbash
Esta página está também disponível pela URL http://eriberto.pro.br/shell.
Exercícios de fixação
Os exercícios a seguir contêm questões que fixam os conhecimentos adquiridos em sala de aula, principalmente em cursos de pós-graduação.
Utilize o Canivete Suíço do Shell Bash, disponível em http://aurelio.net/shell/canivete, como auxiliar para resolver as questões.
Parte 1
Resolva as questões a seguir, todas baseadas no arquivo arq1.txt.
- Quantas linhas o arquivo possui?
- Quais números estão repetidos?
- Quantos números não estão repetidos?
- Quantos números não possuem o algarismo 9?
- Substitua todos os algarismos 8 por 0 e apague todos os algarismos 5.
- Depois da operação anterior, quais números ficam triplicados?
- Qual é a soma de todos os números?
Parte 2
Resolva as questões a seguir, todas baseadas no arquivo arq2.tar.bz2.
- Quais arquivos possuem o mesmo conteúdo? (dica: use hash md5)?
- Quantas linhas, no total, possuem todos os arquivos juntos?
- Quantas linhas começam com “E” e terminam com “O”?
Parte 3
Resolva as questões a seguir, todas baseadas no arquivo arq3.gz.
- Quantos nomes diferentes de pessoas aparecem nos logs?
- Quantas perdas de conexão ocorreram entre 12:08 e 12:13 (incluindo os dois horários)?
- Altere todos os nomes “renata” para “luciana”, apenas nas linhas nas quais houver perda de conexão.
- Crie um novo arquivo, invertendo a posição do horário com a posição do nome do usuário.
Parte 4
Resolva as questões a seguir, todas baseadas no arquivo arq4.txt.gz.
- Quantas vezes o nome “eriberto”, não importando a caixa dos caracteres, aparece no interior do arquivo?
- Quantas sentenças de 5 caracteres alfanuméricos aparecem no arquivo?
- Faça com que todos os caracteres existentes no arquivo sejam apresentados em caixa baixa.
Parte 5
Resolva as questões a seguir, todas baseadas no arquivo chapeuzinho_vermelho_na_imprensa.txt.gz.
- Quantas linhas iniciam com o caractere “-”?
- Quantas palavras estão totalmente em caixa alta? (considere como palavras duas ou letras alfanuméricas)
- Quantas palavras não possuem as vogais “a” e “e”? (sem acento)
- Retire todas as linhas em branco existentes no texto.
Parte 6
Resolva as questões a seguir, todas baseadas no arquivo people.20091103.txt.bz2.
- Quantos e-mails diferentes existem no arquivo?
- Quantos e-mails diferentes não possuem qualquer algarismo?
- Quantos pacotes diferentes existem nas linhas marcadas como “main”? (ignore as linhas marcadas como "non-us/main")
Parte 7
Neste site há uma relação de pacotes que possuem problemas de hardening no Debian. Neste outro site é possivel obter uma lista de pacotes órfãos. Faça uma relação dos pacotes órfãos que possuem problemas de hardening.
Parte 8
Crie um script que faça o seguinte:
- Gere um número inteiro aleatório entre 1 e 100 e que dê ao usuário 10 chances para que o mesmo adivinhe tal número.
- Deverá haver mensagens de erro caso:
- O usuário não escolha um número, mas sim outro caractere qualquer. Utilize uma função para fazer essa validação.
- O usuário escolha um número fora do range. Utilize uma função para fazer essa validação.
- O usuário escolha um número não inteiro. Utilize uma função para fazer essa validação.
- Sempre imprima na tela: "O número escolhido por você é maior/menor do que o escolhido por mim. Restam x tentativas".
- No caso de acerto, escreva na tela em amarelo: você acertou.
- No caso de erro após as 10 tentativas, escreva na tela em vermelho: você errou.
Parte 9
Crie um script que faça o seguinte:
- Verifique se existe o arquivo /etc/bash.bashrc.
- Caso não exista, utilize uma função para escrever uma mensagem sobre isso no log /var/log/syslog e termine a execução do script. Também deverá haver uma mensagem (a mesma) para o usuário na sua tela (via função).
- Caso exista, verifique se há a linha "alias ls='ls --color=auto'".
- Havendo, escreva no log e na tela do usuário, via função, "nada a fazer, saindo.".
- Não havendo, escreva no log e na tela do usuário, via função, "adicionado alias para o comando ls".