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

Prof. Armando Luiz N. Delgado

6 de agosto de 2003

Laboratório 12

Programação shell - expressões aritméticas, leitura de dados, variáveis de ambiente.

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. 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 last(1), date(1) (opções -d e formato %s) e expressões aritméticas (seções Arithmetic Expansion e ARITHMETIC EVALUATION em bash(1)).

    Solução.

  2. O script deve ler cada linha de um arquivo (indicado como argumento) e escrever a linha de volta para STDOUT, seguida de uma linha em branco extra. Isto tem o efeito de criar linhas com espaço duplo.

    Inclua todo o código necessário para testar se o script recebe o argumento (um arquivo) na linha de comando e se o arquivo especificado existe, antes de executar a tarefa propriamente dita.

    Uma vez funcionando o script, altere-o de forma que o número de linhas em branco a serem inseridas é definida pela variável de ambiente ESPACO.

    Finalmente, altere o script de forma que quando o valor de ESPACO for 1 (um), o script remove todas as linhas em branco do arquivo especificado.

    Solução 1.
    Solução 2.
    Solução 3.
    Solução 4.

  3. O script deve ecoar a si mesmo para STDOUT, mas de trás para frente, linha por linha.

    DICAS: O que siginifica o parâmetro especial $0? Pense em como tail(1), head(1) e basename(1) podem ser úteis.

    Solução.

  4. Dada uma lista de arquivos como argumento, o script deve verificar o tipo de cada arquivo (usando file(1)) pelo tipo de compressão usado nele. A partir daí, o script automaticamente chama o comando de descompressão apropriado (gunzip(1), bunzip2(1), unzip(1)).

    Se o arquivo não estiver comprimido, o script emite uma mensagem de aviso, mas não efetua nenhuma ação sobre o dito arquivo.

    Faça uma versão deste script usando if ... elif ... fi e outra usando case ... esac.

    Solução 1.
    Solução 2.

  5. Encontre todos os arquivos regulares com tamanho maior que 100 Kbytes a partir de seu diretório de login. Para cada arquivo encontrado, dê ao usuário a opção de removê-lo ou comprimi-lo. Escreva em um arquivo (e.g., Removidos.log) o nome de todos os arquivos removidos e a data de remoção.

    Solução.

  6. Ache o maior número dentre 3 (três) números fornecidos como argumentos do script. Uma mensagem de erro deve ser mostrada se houver quantidade insuficiente de argumentos.

    Solução.

  7. Execute as operações matemáticas básicas:
    +
    Adição
    -
    Subtração
    x
    Multiplicação
    /
    Divisão
    ^
    Exponenciação

    Supondo que o nome do script é conta, ele deve ser usado da seguinte forma:

             conta 20 / 3
             conta 34 x 6
    

    O script deve também testar se há argumentos suficientes para executar a operação. Use case ... esac como parte da solução.

    Solução 1.
    Solução 2.

  8. Usando mail(1), gerencie uma lista simples de endereços eletrônicos. O script automaticamente envia um arquivo de texto específico para todos os endereços que constam da lista de endereços, que está em outro arquivo específico. Tanto o arquivo de texto como o arquivo com a lista de endereços devem ser indicados como argumentos do script.

    DICA: A forma básica de uso de mail(1) é mail  [-s assunto] end_eletrônico  <arquivo_com_mensagem:

                mail delgado@inf.ufpr.br <mensagem.txt
                mail -s "Aviso de Concurso" delgado@inf.ufpr.br <mensagem.txt
    

Conclusões

ASSUNTOS DAS PRÓXIMAS AULAS:



Armando Luiz Nicolini Delgado
2008-11-03