SlideShare uma empresa Scribd logo
1 de 7
Baixar para ler offline
Programação Shell Script
                                           Prof. Dr. Marcelo Barros de Almeida
                                            Centro Universitário Barão de Mauá


1. Copie o shell script a seguir e rode-o. Tente entender o que aconteceu com cada variável contida nele e fique atento
   aos pequenos detalhes no tratamento de variáveis. As opções (-x) e (-v) na execução do bash pode ajudar (bash -x
   script).
   # ! / bin / bash
   # R e t i r a d o de : www . d i . u b i . p t / ~ o p e r a t i v o s Unix Documents
   # v a r i a v e i s de a m b i e n t e
   echo $PATH
   echo $USER $HOME

   # pode−s e v e r t o d a s a s v a r i á v e i s do a m b i e n t e com o comando e n v | l e s s
   # variaveis locais
   ola="bom dia"
   echo "$ola Paulo"
   echo "$olaPaulo"          # T e x t o c o l a d o na v a r i a v e l . . .
   echo "${ola}Paulo" # P r o t e g e n d o a v a r i á v e l com a s c h a v e s
   mesg="$ola $USER"
   echo $mesg

   # input
   echo "Introduza qualquer Coisa" ; read var
   echo "Introduziu $var"

   # execução
   data=‘date‘
   echo $data
   info=‘echo $HOME ; echo " estamos em "; pwd‘
   echo $info

   # contas
   x=1
   let x=x*2+3
   echo "x=$x"
   x=$((x+3))
   echo "x=$x"
   let x--
   echo "x=$x"

   #variaveis especiais
   echo "Numero de Arguments para este script $#"
   echo "Todos os argumentos para este script $*"
   echo "O primeiro $1 e segundo $2 argumentos"
   echo "O nome deste ficheiro $0"
   echo "O Processo ID deste script $$"
   echo "Exit status do comando anterior $?"


2. Faça um script com a linha de comando dada a seguir e tente explicar o resultado apresentado na tela.
   banner $(date | cut -c13-20)


3. Escreva um script que mostre a data de hoje e depois todos os arquivos dentro da sua conta.
   # ! / bin / bash
   date
   ls -laR ~




                                                                    1
4. Escreva um pequeno script que irá testar se determinado arquivo existe ou não. O nome do arquivo será passado via linha
   de comando.
   # ! / bin / bash
   if [ $# −eq 0 ]
   then
                echo "Sintaxe: $0 nome_do_arquivo"
                exit 1
   fi

   if [ -f $1 ]
   then
           echo "$1 existe e é um arquivo"
   else
           echo "$1 não é um arquivo"
   fi

   ou ...
   # ! / bin / bash
   if [ $# −eq 0 ]
   then
                echo "Sintaxe: $0 nome_do_arquivo"
                exit 1
   fi
   [ -f $1 ] && echo "$1 existe e é um arquivo" || echo "$1 não é um arquivo"


5. Faça um script que permita dizer se o arquivo passado pela linha de comando, caso exista, é maior do que 100 bytes. O
   comando stat pode ajudar na determinação do tamanho.
   # ! / bin / bash
   if [ $# −eq 0 ]
   then
                echo "Sintaxe: $0 nome_do_arquivo"
                exit 1
   fi

   if [ ! -f $1 ]
   then
           echo "$1 nao existe."
           exit 1
   fi

   sz=$(stat -c%s $1)

   if [ $sz -gt 100 ]
   then
           echo "O arquivo é maior que 100 bytes ($sz bytes)"
   else
           echo "O arquivo é menor que 100 bytes ($sz bytes)"
   fi


6. Faça um script que imprima quantos processo estão atualmente em execução na sua máquina. Use os comandos wc e ps
   para isso.
   # ! / bin / bash
   tot=$(( $(ps aux | wc -l) -1 ))
   echo "Existem $tot processos em execução"


7. Crie um script que peça um mês e um ano do usuário e depois apresente um calendário do mês/ano pedido. Use o comando
   cal para lhe ajudar.
   # ! / bin / bash
   read -p "Entre o mês desejado (1-12): " mes
   read -p "Entre o ano desejado (aaaa): " ano
   cal $mes $ano


8. Faça um scritp que renomeia todos os arquivos ".mpeg3" para ".mp3" em um determinado diretório.


                                                          2
# ! / bin / bash

    dir="/tmp"
    old="mpeg3"
    new="mp3"

    IFSOLD=$IFS
    IFS=$’n’
    for fo in $(ls $dir/*.$old)
    do
            fn=${fo/%$old/$new}
            mv $fo $fn
            echo "Movendo $fo -> $fn ..."
    done
    IFS=$IFSOLD


 9. Repita o exercício anterior mas de forma interativa, perguntando na linha de comando o diretório desejado e as extensões.
    # ! / bin / bash
    read -p "Entre o diretorio: " dir
    read -p "Extensao antiga: " old
    read -p "Extensao nova: " new

    IFSOLD=$IFS
    IFS=$’n’
    for fo in $(ls $dir/*.$old)
    do
            fn=${fo/%$old/$new}
            mv $fo $fn
            echo "Movendo $fo -> $fn ..."
    done
    IFS=$IFSOLD


10. Repita o exercício anterior mas passe o diretório e as extensões por linha de comando.
    # ! / bin / bash
    if [ $# − l t 3 ]
    then
                 echo "Sintaxe: $0 nome_do_diretorio extensao_velha extensao_nova"
                 exit 1
    fi

    dir="$1"
    old="$2"
    new="$3"

    if [ ! -d $dir ]
    then
            echo "Diretorio ($dir) invalido" ’!’
            exit 1
    fi

    IFSOLD=$IFS
    IFS=$’n’
    for fo in $(ls $dir/*.$old)
    do
            fn=${fo/%$old/$new}
            mv $fo $fn
            echo "Movendo $fo -> $fn ..."
    done
    IFS=$IFSOLD


11. Escreva um script para listar todos os arquivos de um determinado diretório (passado via linha de comando) mas no
    seguinte formato:
    1: nome a
    2: nome b
    ...


                                                             3
# ! / bin / bash
    if [ $# − l t 1 ]
    then
                 echo "Sintaxe: $0 nome_do_diretorio"
                 exit 1
    fi

    dir="$1"

    if [ ! -d $dir ]
    then
            echo "Diretório invalido ($dir)"
            exit 1
    fi
    IFSOLD=$IFS
    IFS=$’n’
    for fn in $(ls $dir/*)
    do
            if [ -f $fn ]
            then
                     echo "--> $fn"
            fi
    done
    IFS=$IFSOLD


12. Escreva um script capaz de dizer o número de linhas num arquivo (passado via linha de comando) e o número de palavras.
    O comando wc pode ajudar.
    # ! / bin / bash

    arq="$1"

    if [ ! -f $arq ]
    then
            echo "Arquivo invalido ($arq)"
            exit 1
    fi

    lin=$(cat $arq | wc -l)
    pal=$(cat $arq | wc -w)

    echo "Numero de linhas..: $lin"
    echo "Numero de palavras: $pal"


13. Desenvolva um script que receba um número como parâmetro e vá imprimindo na tela uma contagem regressiva até chegar
    a zero, imprimindo a contagem na tela a cada um segundo (use o comando sleep para esperar).
    # ! / bin / bash

    if [ "$1" = "" ]
    then
            echo "Sintaxe: $0 contagem"
            exit 1
    fi

    num="$1"

    while [ $num -ge 0 ]
    do
            echo "Contagem: $num"
            num=$((num - 1))
            sleep 1
    done


14. Mostra na tela todos os parâmetros recebidos na linha de comando (podem ser mais que 9, logo o shift será necessário),
    imprimindo-os como a seguir:
    1: parâmetro 1


                                                           4
2: parâmetro 2
    ...
    # ! / bin / bash

    n=1

    while [ -n "$1" ]
    do
            echo "$n: $1"
            shift
            n=$((n + 1))
    done


15. Crie um script para mostrar (cat) todos os usuários cadastrados no sistema (/etc/passwd) ordenados em ordem alfa-
    bética.
    # ! / bin / bash
    cat /etc/passwd | cut -f1 -d: | sort


16. Um dos parâmetros de cada linha do arquivo (/etc/passwd) é o shell usado pelo usuário (o sétimo campo). Escreva
    um programa capaz de listar todos os shells únicos existente no passwd. O programa uniq pode ser útil.
    # ! / bin / bash
    cat /etc/passwd | cut -f7 -d: | uniq


17. Crie um pequeno script de backup capaz de receber um nome de diretório a ser compactado e também um nome de
    diretório onde o arquivo com o backup será será armazenado. O nome do arquivo de backup deve serguir o formato
    "BKP-AAAA-MM-DD.tar.gz", onde AAAA é o ano, MM o mês e DD o dia. Use o comando tar para fazer a criação
    do backup. Inclua testes para determinar se os diretórios de origem e destino realmente existem.
    # ! / bin / bash
    if [ $# − l t 2 ]
    then
                 echo "Sintaxe: $0 dir_src dir_dst"
                 exit 1
    fi

    src="$1"
    dst="$2"

    if [ ! -d $src ]
    then
            echo "Diretório de origem invalido ($src)"
            exit 1
    fi

    if [ ! -d $dst ]
    then
            echo "Diretório de destino invalido ($dst)"
            exit 2
    fi

    if [ "$dst" = "$src" ]
    then
            echo "Diretório de destino e source devem ser diferente"
            exit 3
    fi

    nome="BKP-"$(date +"%F")".tar.gz"
    tar cvzf "$dst/$nome" "$src"


18. Crie um script que utilize um laço para criar 10 diretório com o nome padrão dir<n>, onde n é o número a ser adicionado
    ao nome do diretório. Dentro de cada diretório crie 5 arquivos com o padrão file<m>, onde m é o número a ser adicionado
    ao nome do arquivo.




                                                           5
# ! / bin / bash
    DIR=./dirteste
    FILE=arquivo

    for i in $(seq 1 10)
    do
            d="$DIR$i"
            mkdir "$d"
            for j in $(seq 1 5)
            do
                    f="$FILE$j"
                    touch "$d/$f"
            done
    done


19. Escreva um script capaz de ir adicionando idéias em um "repositório de idéias"situado em /ideias.txt. O programa
    deve ser executado com a idéia como parâmetro da linha de comando e deve fazer entradas que começem com a data/hora
    do dia (comando date pode audar), por exemplo:
    30/08/2008 10:21 Fazer script para remover usuários
    # ! / bin / bash
    REPO=~/ideias.txt

    if [ "$1" = "" ]
    then
            echo "Sintaxe: $0 "nova ideia""
            exit 1
    fi

    ideia=$(date)" - $1"

    echo $ideia >> $REPO


20. Criar um programa que mostre o espaço utilizado pelos arquivos dentro de cada diretório da sua conta no sistema, colo-
    cando em ordem numérica o resultado. Use os comandos du e sort.
    # ! / bin / bash
    cd ~
    du * -s | sort -n


21. Crie um script capaz de listar todos os arquivos da sua conta que possuem a palavra "bash"dentro dele.
    # ! / bin / bash
    cd ~
    grep bash * -oHalr


22. Utilizando o comando find, buscar os arquivos que pertencem ao usuário www-data, redirecionando a saída para o
    arquivo arq.txt. Depois, busque todos os diretórios que pertencem ao usuário www-data, redirecionando a saída para
    o arquivo dir.txt. Finalmente, junte os arquivos arq.txt e dir.txt em um único arquivo lista.txt
    # ! / bin / bash
    DIR="/var/www"
    DST="/tmp"
    find "$DIR" -user www-data -type f > "$DST/arq.txt"
    find "$DIR" -user www-data -type d > "$DST/dir.txt"
    cat "$DST/arq.txt" "$DST/arq.txt" > "$DST/lista.txt"


23. Faça um script que possa ser utilizado dentro do /etc/init.d/, isto é, um script capaz de responder às opções
    "start", "stop" e "restart" via linha de comando. Estruture adequadamente o seu script empregando um case e
    chamadas de função para cada ação (stop, restart e start).
    # ! / bin / bash

    function start()
    {
            echo "starting..."


                                                            6
}

    function stop()
    {
            echo "stopping..."
    }

    function restart()
    {
            echo "restarting..."
    }

    case $1 in
            start)
                          start;;
               stop)
                          stop;;
               restart)
                          restart;;
               *)
                          echo "Sintaxe: $0 [start|stop|restart]";;
    esac


24. Faça um script que deixe o arquivo syslog (/var/log/syslog) com apenas as últimas 10 linhas. O comando tail
    pode ajudar.
    # ! / bin / bash
    LOG=/var/log/syslog
    TMP=/tmp/$$.tmp

    tail -n 10 "$LOG" > "$TMP"
    mv "$TMP" "$LOG"


25. Faça um script capaz de lista todos os usuários da máquina que possuam UID maior que 100 (o comando cut pode ser
    útil). O resultado deve ter o seguinte formato:
    user1 (uid1)
    user2 (uid2)
    ...
    # ! / bin / bash
    IFSOLD=$IFS
    IFS=$’n’
    for line in $(cat /etc/passwd)
    do
                 uid=$(echo "$line" | cut -d: -f3)
                 usr=$(echo "$line" | cut -d: -f1)
                 if [ $uid -gt 100 ]
                 then
                         echo -e "$usr t ($uid)"
                 fi
    done


26. Escreva um script que liste todos os usuários com a cota estourada. O comando awk pode ser útil.
    # ! / bin / bash

    OLDIFS=$IFS
    IFS=$’n’
    for line in $(repquota -au)
    do
            usr=$( echo "$line" | awk ’{ print $1 }’ )
            cot=$( echo "$line" | awk ’{ print $2 }’ | grep "+" )
            if [ ! "$cot" = "" ]
            then
                    echo "O usuario $usr esta com cota estourada"
            fi
    done
    IFS=$OLDIFS


                                                            7

Mais conteúdo relacionado

Mais procurados

Sistemas operacionais de redes particionamento de discos ii
Sistemas operacionais de redes   particionamento de discos iiSistemas operacionais de redes   particionamento de discos ii
Sistemas operacionais de redes particionamento de discos ii
Carlos Melo
 

Mais procurados (20)

Seguranca de rede
Seguranca de redeSeguranca de rede
Seguranca de rede
 
Slide placa mãe
Slide placa mãeSlide placa mãe
Slide placa mãe
 
Introdução à sistemas distribuídos
Introdução à sistemas distribuídosIntrodução à sistemas distribuídos
Introdução à sistemas distribuídos
 
Arquitetura de computadores Módulo 4
Arquitetura de computadores Módulo 4Arquitetura de computadores Módulo 4
Arquitetura de computadores Módulo 4
 
conteúdos UFCD 0771.ppt
conteúdos UFCD 0771.pptconteúdos UFCD 0771.ppt
conteúdos UFCD 0771.ppt
 
Redes de computadores
Redes de computadoresRedes de computadores
Redes de computadores
 
3 placa mãe
3 placa mãe3 placa mãe
3 placa mãe
 
Escalonamento de processos
Escalonamento de processosEscalonamento de processos
Escalonamento de processos
 
Sistemas operacionais de redes particionamento de discos ii
Sistemas operacionais de redes   particionamento de discos iiSistemas operacionais de redes   particionamento de discos ii
Sistemas operacionais de redes particionamento de discos ii
 
Sistemas de Arquivos do Windows
Sistemas de Arquivos do WindowsSistemas de Arquivos do Windows
Sistemas de Arquivos do Windows
 
Montando o Computador
Montando o ComputadorMontando o Computador
Montando o Computador
 
Cisco Packet Tracer
Cisco Packet TracerCisco Packet Tracer
Cisco Packet Tracer
 
Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)
 
Endereçamento IP
Endereçamento IPEndereçamento IP
Endereçamento IP
 
Gerenciamento de Arquivos Nos Sistemas Operacionais
Gerenciamento de Arquivos Nos Sistemas OperacionaisGerenciamento de Arquivos Nos Sistemas Operacionais
Gerenciamento de Arquivos Nos Sistemas Operacionais
 
Sistemas Operacionais em redes
Sistemas Operacionais em redesSistemas Operacionais em redes
Sistemas Operacionais em redes
 
Lista de Exerícios - Manutenção e Redes de Computadores IFNMG - Campus Januária
Lista de Exerícios - Manutenção e Redes de Computadores IFNMG - Campus JanuáriaLista de Exerícios - Manutenção e Redes de Computadores IFNMG - Campus Januária
Lista de Exerícios - Manutenção e Redes de Computadores IFNMG - Campus Januária
 
Arquitetura de um computador
Arquitetura de um computadorArquitetura de um computador
Arquitetura de um computador
 
Visualg
VisualgVisualg
Visualg
 
1ª aula sistema operacional
1ª aula  sistema operacional1ª aula  sistema operacional
1ª aula sistema operacional
 

Semelhante a Lista de exercícios em Bash (resolvida)

Sapo sessions linux power tools
Sapo sessions linux power toolsSapo sessions linux power tools
Sapo sessions linux power tools
Armando Reis
 
Principais comandos do terminal no linux tecnologia para todos!
Principais comandos do terminal no linux   tecnologia para todos!Principais comandos do terminal no linux   tecnologia para todos!
Principais comandos do terminal no linux tecnologia para todos!
Fábio Fernando
 
O Que é shell - bash
O Que é shell - bashO Que é shell - bash
O Que é shell - bash
Sérgio Silva
 

Semelhante a Lista de exercícios em Bash (resolvida) (20)

shell bash Fpar aula6
shell bash Fpar aula6shell bash Fpar aula6
shell bash Fpar aula6
 
Shell script
Shell scriptShell script
Shell script
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)
 
Shell Script - Controle de fluxo
Shell Script - Controle de fluxoShell Script - Controle de fluxo
Shell Script - Controle de fluxo
 
Sapo sessions linux power tools
Sapo sessions linux power toolsSapo sessions linux power tools
Sapo sessions linux power tools
 
Linux shell
Linux shellLinux shell
Linux shell
 
Curso shell
Curso shellCurso shell
Curso shell
 
Lpi+102
Lpi+102Lpi+102
Lpi+102
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
Fpar aula5
Fpar aula5Fpar aula5
Fpar aula5
 
Principais comandos do terminal no linux tecnologia para todos!
Principais comandos do terminal no linux   tecnologia para todos!Principais comandos do terminal no linux   tecnologia para todos!
Principais comandos do terminal no linux tecnologia para todos!
 
Oficina de shell script
Oficina de shell scriptOficina de shell script
Oficina de shell script
 
Bash, o poder da linha de comando! - Tchelinux.org 2017
Bash, o poder da linha de comando! - Tchelinux.org 2017Bash, o poder da linha de comando! - Tchelinux.org 2017
Bash, o poder da linha de comando! - Tchelinux.org 2017
 
O Que é shell - bash
O Que é shell - bashO Que é shell - bash
O Que é shell - bash
 
Shell Script v0
Shell Script v0Shell Script v0
Shell Script v0
 
Shell Script Linux
Shell Script LinuxShell Script Linux
Shell Script Linux
 
Shell script i
Shell script iShell script i
Shell script i
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
 
Comandos linux
Comandos linuxComandos linux
Comandos linux
 
PHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesPHP Day - PHP para iniciantes
PHP Day - PHP para iniciantes
 

Mais de Marcelo Barros de Almeida

[9/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[9/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[9/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[9/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Marcelo Barros de Almeida
 
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Marcelo Barros de Almeida
 
[7/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[7/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[7/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[7/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Marcelo Barros de Almeida
 
[6/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[6/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[6/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[6/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Marcelo Barros de Almeida
 
[5/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[5/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[5/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[5/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Marcelo Barros de Almeida
 
[4/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[4/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[4/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[4/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Marcelo Barros de Almeida
 
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Marcelo Barros de Almeida
 
[2/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[2/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[2/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[2/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
Marcelo Barros de Almeida
 

Mais de Marcelo Barros de Almeida (20)

[9/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[9/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[9/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[9/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
 
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[8/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
 
[7/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[7/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[7/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[7/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
 
[6/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[6/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[6/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[6/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
 
[5/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[5/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[5/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[5/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
 
[4/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[4/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[4/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[4/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
 
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[3/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
 
[2/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[2/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...[2/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
[2/9] Sistemas embarcados de alto desempenho para tratamento e processamento ...
 
Projeto de Hardware com Microcontroladores STM32
Projeto de Hardware com Microcontroladores STM32Projeto de Hardware com Microcontroladores STM32
Projeto de Hardware com Microcontroladores STM32
 
Criando Placas Eletrônicas com KiCAD (Marcelo Barros)
Criando Placas Eletrônicas com KiCAD (Marcelo Barros)Criando Placas Eletrônicas com KiCAD (Marcelo Barros)
Criando Placas Eletrônicas com KiCAD (Marcelo Barros)
 
Agenda em bash e dialog
Agenda em bash e dialogAgenda em bash e dialog
Agenda em bash e dialog
 
Administração de Redes Linux - III
Administração de Redes Linux - IIIAdministração de Redes Linux - III
Administração de Redes Linux - III
 
Administração de Redes Linux - II
Administração de Redes Linux - IIAdministração de Redes Linux - II
Administração de Redes Linux - II
 
Administração de Redes Linux - I
Administração de Redes Linux - IAdministração de Redes Linux - I
Administração de Redes Linux - I
 
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
 
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
 
Treinamento Qt básico - aula III
Treinamento Qt básico - aula IIITreinamento Qt básico - aula III
Treinamento Qt básico - aula III
 
Treinamento Qt básico - aula II
Treinamento Qt básico - aula IITreinamento Qt básico - aula II
Treinamento Qt básico - aula II
 
Treinamento Qt básico - aula I
Treinamento Qt básico - aula ITreinamento Qt básico - aula I
Treinamento Qt básico - aula I
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)
 

Último

Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Dirceu Resende
 

Último (11)

Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPalestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
 
Apostila e caderno de exercicios de WORD
Apostila e caderno de exercicios de  WORDApostila e caderno de exercicios de  WORD
Apostila e caderno de exercicios de WORD
 
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
 
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docxATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
 
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAEAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
 
Entrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiEntrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo Pagliusi
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINASCOI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
 
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
 
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docxATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Lista de exercícios em Bash (resolvida)

  • 1. Programação Shell Script Prof. Dr. Marcelo Barros de Almeida Centro Universitário Barão de Mauá 1. Copie o shell script a seguir e rode-o. Tente entender o que aconteceu com cada variável contida nele e fique atento aos pequenos detalhes no tratamento de variáveis. As opções (-x) e (-v) na execução do bash pode ajudar (bash -x script). # ! / bin / bash # R e t i r a d o de : www . d i . u b i . p t / ~ o p e r a t i v o s Unix Documents # v a r i a v e i s de a m b i e n t e echo $PATH echo $USER $HOME # pode−s e v e r t o d a s a s v a r i á v e i s do a m b i e n t e com o comando e n v | l e s s # variaveis locais ola="bom dia" echo "$ola Paulo" echo "$olaPaulo" # T e x t o c o l a d o na v a r i a v e l . . . echo "${ola}Paulo" # P r o t e g e n d o a v a r i á v e l com a s c h a v e s mesg="$ola $USER" echo $mesg # input echo "Introduza qualquer Coisa" ; read var echo "Introduziu $var" # execução data=‘date‘ echo $data info=‘echo $HOME ; echo " estamos em "; pwd‘ echo $info # contas x=1 let x=x*2+3 echo "x=$x" x=$((x+3)) echo "x=$x" let x-- echo "x=$x" #variaveis especiais echo "Numero de Arguments para este script $#" echo "Todos os argumentos para este script $*" echo "O primeiro $1 e segundo $2 argumentos" echo "O nome deste ficheiro $0" echo "O Processo ID deste script $$" echo "Exit status do comando anterior $?" 2. Faça um script com a linha de comando dada a seguir e tente explicar o resultado apresentado na tela. banner $(date | cut -c13-20) 3. Escreva um script que mostre a data de hoje e depois todos os arquivos dentro da sua conta. # ! / bin / bash date ls -laR ~ 1
  • 2. 4. Escreva um pequeno script que irá testar se determinado arquivo existe ou não. O nome do arquivo será passado via linha de comando. # ! / bin / bash if [ $# −eq 0 ] then echo "Sintaxe: $0 nome_do_arquivo" exit 1 fi if [ -f $1 ] then echo "$1 existe e é um arquivo" else echo "$1 não é um arquivo" fi ou ... # ! / bin / bash if [ $# −eq 0 ] then echo "Sintaxe: $0 nome_do_arquivo" exit 1 fi [ -f $1 ] && echo "$1 existe e é um arquivo" || echo "$1 não é um arquivo" 5. Faça um script que permita dizer se o arquivo passado pela linha de comando, caso exista, é maior do que 100 bytes. O comando stat pode ajudar na determinação do tamanho. # ! / bin / bash if [ $# −eq 0 ] then echo "Sintaxe: $0 nome_do_arquivo" exit 1 fi if [ ! -f $1 ] then echo "$1 nao existe." exit 1 fi sz=$(stat -c%s $1) if [ $sz -gt 100 ] then echo "O arquivo é maior que 100 bytes ($sz bytes)" else echo "O arquivo é menor que 100 bytes ($sz bytes)" fi 6. Faça um script que imprima quantos processo estão atualmente em execução na sua máquina. Use os comandos wc e ps para isso. # ! / bin / bash tot=$(( $(ps aux | wc -l) -1 )) echo "Existem $tot processos em execução" 7. Crie um script que peça um mês e um ano do usuário e depois apresente um calendário do mês/ano pedido. Use o comando cal para lhe ajudar. # ! / bin / bash read -p "Entre o mês desejado (1-12): " mes read -p "Entre o ano desejado (aaaa): " ano cal $mes $ano 8. Faça um scritp que renomeia todos os arquivos ".mpeg3" para ".mp3" em um determinado diretório. 2
  • 3. # ! / bin / bash dir="/tmp" old="mpeg3" new="mp3" IFSOLD=$IFS IFS=$’n’ for fo in $(ls $dir/*.$old) do fn=${fo/%$old/$new} mv $fo $fn echo "Movendo $fo -> $fn ..." done IFS=$IFSOLD 9. Repita o exercício anterior mas de forma interativa, perguntando na linha de comando o diretório desejado e as extensões. # ! / bin / bash read -p "Entre o diretorio: " dir read -p "Extensao antiga: " old read -p "Extensao nova: " new IFSOLD=$IFS IFS=$’n’ for fo in $(ls $dir/*.$old) do fn=${fo/%$old/$new} mv $fo $fn echo "Movendo $fo -> $fn ..." done IFS=$IFSOLD 10. Repita o exercício anterior mas passe o diretório e as extensões por linha de comando. # ! / bin / bash if [ $# − l t 3 ] then echo "Sintaxe: $0 nome_do_diretorio extensao_velha extensao_nova" exit 1 fi dir="$1" old="$2" new="$3" if [ ! -d $dir ] then echo "Diretorio ($dir) invalido" ’!’ exit 1 fi IFSOLD=$IFS IFS=$’n’ for fo in $(ls $dir/*.$old) do fn=${fo/%$old/$new} mv $fo $fn echo "Movendo $fo -> $fn ..." done IFS=$IFSOLD 11. Escreva um script para listar todos os arquivos de um determinado diretório (passado via linha de comando) mas no seguinte formato: 1: nome a 2: nome b ... 3
  • 4. # ! / bin / bash if [ $# − l t 1 ] then echo "Sintaxe: $0 nome_do_diretorio" exit 1 fi dir="$1" if [ ! -d $dir ] then echo "Diretório invalido ($dir)" exit 1 fi IFSOLD=$IFS IFS=$’n’ for fn in $(ls $dir/*) do if [ -f $fn ] then echo "--> $fn" fi done IFS=$IFSOLD 12. Escreva um script capaz de dizer o número de linhas num arquivo (passado via linha de comando) e o número de palavras. O comando wc pode ajudar. # ! / bin / bash arq="$1" if [ ! -f $arq ] then echo "Arquivo invalido ($arq)" exit 1 fi lin=$(cat $arq | wc -l) pal=$(cat $arq | wc -w) echo "Numero de linhas..: $lin" echo "Numero de palavras: $pal" 13. Desenvolva um script que receba um número como parâmetro e vá imprimindo na tela uma contagem regressiva até chegar a zero, imprimindo a contagem na tela a cada um segundo (use o comando sleep para esperar). # ! / bin / bash if [ "$1" = "" ] then echo "Sintaxe: $0 contagem" exit 1 fi num="$1" while [ $num -ge 0 ] do echo "Contagem: $num" num=$((num - 1)) sleep 1 done 14. Mostra na tela todos os parâmetros recebidos na linha de comando (podem ser mais que 9, logo o shift será necessário), imprimindo-os como a seguir: 1: parâmetro 1 4
  • 5. 2: parâmetro 2 ... # ! / bin / bash n=1 while [ -n "$1" ] do echo "$n: $1" shift n=$((n + 1)) done 15. Crie um script para mostrar (cat) todos os usuários cadastrados no sistema (/etc/passwd) ordenados em ordem alfa- bética. # ! / bin / bash cat /etc/passwd | cut -f1 -d: | sort 16. Um dos parâmetros de cada linha do arquivo (/etc/passwd) é o shell usado pelo usuário (o sétimo campo). Escreva um programa capaz de listar todos os shells únicos existente no passwd. O programa uniq pode ser útil. # ! / bin / bash cat /etc/passwd | cut -f7 -d: | uniq 17. Crie um pequeno script de backup capaz de receber um nome de diretório a ser compactado e também um nome de diretório onde o arquivo com o backup será será armazenado. O nome do arquivo de backup deve serguir o formato "BKP-AAAA-MM-DD.tar.gz", onde AAAA é o ano, MM o mês e DD o dia. Use o comando tar para fazer a criação do backup. Inclua testes para determinar se os diretórios de origem e destino realmente existem. # ! / bin / bash if [ $# − l t 2 ] then echo "Sintaxe: $0 dir_src dir_dst" exit 1 fi src="$1" dst="$2" if [ ! -d $src ] then echo "Diretório de origem invalido ($src)" exit 1 fi if [ ! -d $dst ] then echo "Diretório de destino invalido ($dst)" exit 2 fi if [ "$dst" = "$src" ] then echo "Diretório de destino e source devem ser diferente" exit 3 fi nome="BKP-"$(date +"%F")".tar.gz" tar cvzf "$dst/$nome" "$src" 18. Crie um script que utilize um laço para criar 10 diretório com o nome padrão dir<n>, onde n é o número a ser adicionado ao nome do diretório. Dentro de cada diretório crie 5 arquivos com o padrão file<m>, onde m é o número a ser adicionado ao nome do arquivo. 5
  • 6. # ! / bin / bash DIR=./dirteste FILE=arquivo for i in $(seq 1 10) do d="$DIR$i" mkdir "$d" for j in $(seq 1 5) do f="$FILE$j" touch "$d/$f" done done 19. Escreva um script capaz de ir adicionando idéias em um "repositório de idéias"situado em /ideias.txt. O programa deve ser executado com a idéia como parâmetro da linha de comando e deve fazer entradas que começem com a data/hora do dia (comando date pode audar), por exemplo: 30/08/2008 10:21 Fazer script para remover usuários # ! / bin / bash REPO=~/ideias.txt if [ "$1" = "" ] then echo "Sintaxe: $0 "nova ideia"" exit 1 fi ideia=$(date)" - $1" echo $ideia >> $REPO 20. Criar um programa que mostre o espaço utilizado pelos arquivos dentro de cada diretório da sua conta no sistema, colo- cando em ordem numérica o resultado. Use os comandos du e sort. # ! / bin / bash cd ~ du * -s | sort -n 21. Crie um script capaz de listar todos os arquivos da sua conta que possuem a palavra "bash"dentro dele. # ! / bin / bash cd ~ grep bash * -oHalr 22. Utilizando o comando find, buscar os arquivos que pertencem ao usuário www-data, redirecionando a saída para o arquivo arq.txt. Depois, busque todos os diretórios que pertencem ao usuário www-data, redirecionando a saída para o arquivo dir.txt. Finalmente, junte os arquivos arq.txt e dir.txt em um único arquivo lista.txt # ! / bin / bash DIR="/var/www" DST="/tmp" find "$DIR" -user www-data -type f > "$DST/arq.txt" find "$DIR" -user www-data -type d > "$DST/dir.txt" cat "$DST/arq.txt" "$DST/arq.txt" > "$DST/lista.txt" 23. Faça um script que possa ser utilizado dentro do /etc/init.d/, isto é, um script capaz de responder às opções "start", "stop" e "restart" via linha de comando. Estruture adequadamente o seu script empregando um case e chamadas de função para cada ação (stop, restart e start). # ! / bin / bash function start() { echo "starting..." 6
  • 7. } function stop() { echo "stopping..." } function restart() { echo "restarting..." } case $1 in start) start;; stop) stop;; restart) restart;; *) echo "Sintaxe: $0 [start|stop|restart]";; esac 24. Faça um script que deixe o arquivo syslog (/var/log/syslog) com apenas as últimas 10 linhas. O comando tail pode ajudar. # ! / bin / bash LOG=/var/log/syslog TMP=/tmp/$$.tmp tail -n 10 "$LOG" > "$TMP" mv "$TMP" "$LOG" 25. Faça um script capaz de lista todos os usuários da máquina que possuam UID maior que 100 (o comando cut pode ser útil). O resultado deve ter o seguinte formato: user1 (uid1) user2 (uid2) ... # ! / bin / bash IFSOLD=$IFS IFS=$’n’ for line in $(cat /etc/passwd) do uid=$(echo "$line" | cut -d: -f3) usr=$(echo "$line" | cut -d: -f1) if [ $uid -gt 100 ] then echo -e "$usr t ($uid)" fi done 26. Escreva um script que liste todos os usuários com a cota estourada. O comando awk pode ser útil. # ! / bin / bash OLDIFS=$IFS IFS=$’n’ for line in $(repquota -au) do usr=$( echo "$line" | awk ’{ print $1 }’ ) cot=$( echo "$line" | awk ’{ print $2 }’ | grep "+" ) if [ ! "$cot" = "" ] then echo "O usuario $usr esta com cota estourada" fi done IFS=$OLDIFS 7