CI066 - Oficina de Programação
Laboratório 10

Prof. Armando Luiz N. Delgado

Laboratório 10

Preliminares

  1. Copie o diretório ~ci066/LabNum7 para seu diretório de login.

Programação shell - estruturas de controle: condicionais e laços

Crie scripts shell que implementem uma solução para os exercícios abaixo.

ATENÇÃO: Cada script deve ser executado como se fosse um comando normal do UNIX.

  1. Retorne um status de 0 (zero) se o argumento do script for sim ou yes e 1 caso contrário. Considere neste exercício que as variantes s, S, SIM, Sim, y, Y, YES, Yes são todas aceitas como sim.

    Solução

  2. Remova do arquivo de telefones do Laboratório 7 a pessoa cujo sobrenome é passado como argumento do script. Caso não exista pessoa com o sobrenome indicado, o script se encerra com status 1 (um), avisando antes ao usuário. Caso haja mais de uma pessoa com o mesmo sobrenome, o script deve obter do usuário confirmação de remoção para cada pessoa encontrada.

    Soluções: 1, 2, 3, 4

  3. Liste os usuários logados há mais de 1 (um) dia. Se não houver usuários nestas condições, exiba uma mensagem indicando tal situação.

    DICA: Verifique como date(1), who(1), last(1) ou w(1) e grep(1) podem ser úteis.

    Soluções: 1, 2, 3

  4. Liste os usuários logados por um tempo menor ou igual ao único argumento numérico do script. Este argumento pode indicar dias (sufixo d), horas (sufixo h) ou minutos (sufixo m). Caso nenhum sufixo seja usado, o argumento indica o tempo em horas.

    Por exemplo, o argumento 10d indica 10 dias, 3h ou simplesmente 3 indica 3 horas, e 20m indica 20 minutos.

    DICA: Use date(1) (opções -d e formato %s) e expressões aritméticas (seções Arithmetic Expansion e ARITHMETIC EVALUATION em bash(1)).

    Soluções: 1, 2, 3, 4, 5

  5. Para os usuários ainda logados, mostre na tela o número de horas e minutos que este usuário está logado no sistema. O usuário é indicado pelo seu login no argumento do script. Se o usuário não está logado, o script deve mostrar na tela uma mensagem indicando tal fato.

    DICA: Use w(1) ou who(1).

    Soluções: 1, 2

  6. Renomeie um arquivo indicado no 1o argumento de forma a remover do final do nome original os caracteres indicados no 2o argumento. Por exemplo, comando  teste1teste  teste deve renomear o arquivo teste1teste para teste1. Se o arquivo não existir, exiba uma mensagem indicando tal fato SEM EXECUTAR o comando de renomeação.

    DICA: Não use basename(1). Veja a seção Parameter Expansion em bash(1).

Conclusões

ASSUNTOS DAS PRÓXIMAS AULAS:



Armando Luiz Nicolini Delgado
2008-10-06