SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
Oficina de ShellScript
             Segunda Parte
                 Wildcards
           Variáveis de Ambiente
          Comandos em Shell Script
         Parâmetros para o programa
               Mais comandos
                  /dev/null


           Bruno L. Albrecht
             Felipe A. Chies
           PET Computação UFRGS
                      
Wildcards

       Recurso utilizado para especificar um ou mais 
        arquivos/diretório de uma vez só.
       Permite a filtragem do que será listado/copiado/
        apagado/etc
       É uma feature que deixa a shell “mais 
        poderosa” que a GUI no trato de arquivos.
       Quatro tipos:
           *, ?, [ ] e { }
                               
Wildcards

       *: qualquer coisa! (zero ou mais caracteres)
           rm *.txt → apaga todos os arquivos que terminem 
            com .txt


       ?: um único caractere qualquer!
           rm log?.txt → log1.txt, loga.txt, lob[.txt, etc
           rm *?.* → todos os arquivos não ocultos
           Obs.: para nos referirmos a um arquivo que um 
            wildcard no nome, utilizamos 'wildcard'
                                       
Wildcards

       [ ] : um dos caracteres listados (ou não)
           [abcd] : a ou b ou c ou d
           [a­d] : qualquer um no intervalo de 'a' a 'd'
           [!abcd] : qualquer um, menos a,b,c,d
           [!a­d] : qualquer um, menos os que estão no 
            intervalo de 'a' a 'd'
           Exemplo:
                sudo umount /dev/[hs]d[a­d][1­9]
                     desmonta todos os dispositivos
                                          
Wildcards

       { } : cada opção separada por vírgulas é 
        considerada apenas uma vez
           echo t{r,igr,rist}es
                tres tigres tristes
           echo alun{o,a}{,s}
                aluno alunos aluno alunos




                                        
ShellScript: Introdução

   Shell
       Interpretador de comandos;
   Script
       É uma descrição geral de qualquer programa 
        escrito em linguagem interpretada, ou seja, não 
        compilada;
       Temos script em PHP, Ruby, script em PERL e 
        também Shell Script;
Objetivos

   Facilitar as tarefas repetidas do adminstrador:
       evita a redigitação de comandos;
       podem ser agendados para execução através da 
        tabela crontab (man cron);
   Scripts podem fazer tarefas complexas
       podemos combinar diversos comandos, com 
        controladores de fluxo e variáveis;
   São “rápidos” de serem criados e não precisam 
    ser compilados;
Hello World

   Muito simples!!!
    Muito simples:
   Crie o arquivo: gedit hello.sh &

    #!/bin/bash
    echo "Hello World!!!"

   Para executá­lo:
       chmod +x hello.sh
       ./hello.sh
Variáveis

   O bash reconhece uma variável quando ela 
    começa com $;
   Declaração: var=“valor”
       valor pode ser número, frase, outras variáveis ou 
        comando. 
       Pode ser expressado entre “ ”(aspas duplas), ' ' 
        (apóstrofes) ou ` `(crases);
Variáveis

   Aspas duplas: valor da variável será 
    interpretado;
       variavel="Meu login é: $USER"
       echo $variavel
            Meu login é: Bruno
   Apóstrofes: declaração literal
       variavel='Meu login é: $USER'
       echo $variavel
            Meu login é: $USER
Entre crases

   Crases: vão interpretar os comandos 
    declarados. Se forem combinados com texto 
    numa expressão, deve­se usar as aspas 
    juntamente!!!
       variavel=“Meu diretório atual é: `pwd`”
       echo $variavel
            Meu diretório atual é: /home/bruno
       Obs.: É o mesmo que $(comando)
            var=$(pwd)
PARÂMETROS

       É um array de parâmetros!
           De $1 a $9
           $0 → nome do programa
           $# → quantidade de parâmetros
           $* → conjunto de todos os parâmetros
           Shift n → utilizado para deslocar n parâmetros




                                    
Variáveis de Ambiente

       São variáveis LOCAIS ou GLOBAIS já 
        definidas pelo sistema operacioal


       Podem ser redefinidas


       Exemplo:
           O nome do usuário é determinado a partir de uma 
            variável de ambiente: $USER
                                  
Variáveis de Ambiente

    Principais variáveis globais:
        PATH diretório onde podem ser encontrados os 
         executáveis
        USER    nome (login) do usuário
        HOME    diretório home do usuário
        HOST    nome do host (máquina)
        SHELL shell ativo
        PS1     mensagem no terminal
        IFS     separador de parâmetros (default: ” ”)
    A lista completa pode ser obtida através do comando 
                                
Variáveis de Ambiente
   Para definir uma variável de ambiente GLOBAL:
       export VARIAVEL=conteúdo
   Para definir uma variável de ambiente LOCAL:
       VARIAVEL=conteudo
   Exemplo: 
       export PATH=$PATH:/meu_dir


   Obs.: esta forma de definir variáveis é 
 
    TEMPORÁRIA, ou seja, apenas enquanto o shell 
                            

    estiver ativo
Variáveis de Ambiente

       Para definir variáveis globais e locais 
        PERMANENTEMENTE, devemos alterar os 
        seguintes arquivos:
            ~./bashrc → somente para o usuário atual
           /etc/bash.bashrc → para todos os usuários
       Imprimir o conteúdo de uma variável:
           echo $VARIAVEL
       Deletar uma variável:
 
           unset VARIÁVEL         
Expressões aritméticas

       Para o Shell executar operações aritméticas, 
        devemos utilizar $((expressão))
           echo $((2+2))
           var1=$((var2+var1))
       Ou então, o comando let:
           let var1++
           let var2­­


                                   
Expressões aritméticas

       x++, ++x, x­­, ­­x: [pós,pré]­[in,de]cremento
                             y
       x**y: potenciação (x )
       x*y, x/y, x%y: multiplicação, divisão, resto
       <, <=, >, >=, ==, !=: comparações
       &&, ||: AND e OR lógicos




                                  
Comandos: test
       Descrição: testar qualquer coisa!
       test $var1 ­lt $var2
            Obs.: resultado em $?




                                      
if

        O comando if testa o STDERR (variável de 
         ambiente $?), mas, para ficar semelhante à 
         sintaxe do C, utilizamos o comando test
        If test $variavel ­gt 10     If [ $variavel ­gt 10 ]
        then                         then
             echo ”é maior que 10”         echo ”é maior que 10”
        else                         else
             echo ”é menor que 10”         echo ”é menor que 10”
        fi                           fi



        Atalho do comando test no if:
 
             [ expressão ] → não do espaço antes e depois da 
                                     
              expressão
case

   Para não precisarmos concatenar milhares de 
    ifs, utilizamos o case:
     if [ $var ­eq 1 ]           case $var in
     then                           1) <comandos> ;;
           <comandos>               2) <comandos> ;;
     elif [ $var ­eq 2 ]
                                    3) <comandos> ;;
     then
                                    4) <comandos> ;;
           <comandos>
     elif [ $var ­eq 3 ]            *) <comandos>
     then                        esac
           <comandos>
     elif [ $var ­eq 4 ]
                           ● Não há ;; no último grupo
                           ● Para fechar o case, usamos “esac”
     then
                           ● Podemos usar wildcards nos padrões de 
           <comandos>
     else                  grupos. ex.: [1­4], ?, ??, 3|4, ?0|?5, [1234] 
           <comandos>      etc
     fi
For

  for numero in um dois três quatro cinco
  do
        echo "Contando: $numero"
  done

     Um comando muito útil para utilizar o for é o seq, 
      que gera sequências de números:
for num in $(seq 10)                        for num in $(seq 6 10)
do                                          do
    <...>                                       <...> 
done            for num in $(seq 0 2 10)    done
                do
                    <...>
                done
For

 for par
 do
       echo "Parâmetro: $par"
 done

   Neste caso, não colocamos o “in” depois da 
    variável. Isto serve para a variável (no caso 
    “par”) receber cada parâmetro passado para o 
    programa a cada laço do for.
For

   Podemos ainda usar uma sintaxe parecida com 
    a do C.
                                      for (( ; i<=9 ; ))
    for ((i=0 ; i<=9 ; i++))          do
    do                                    let i++;
          echo ­n “$i “                   echo ­n “$i “
    done                              done

   Outra forma de for
        for arq in *            1 ­> arquivo1.txt
                                2 ­> arquivo2.sh
        do                      3 ­> arquivo3.bla
            let i++;            4 ­> arquivo4.doc
            echo “$i ­> $arq”   etc...
        done
Break e Continue

      break: pára o laço
      continue: ignora o que tem embaixo e volta 
       para o início do laço
for ((i=0 ; ; i++))         $ ./testefor
                            0 1 2 3 4 5 6 7 8 9
do
    echo ­n “$i “         for ((i=0 ; ; i++))
    if [ i ­lt 9 ]        do                      $ ./testefor2
    then                      echo ­n “$i “       0 1 2 3 4 5 6 7 8 9
               continue       if [ i ­eq 9 ]
    else                      then
               break                   break;
done                      done
While
   Utilizando um contador com o while:

                            while :
                            do
i=0
                                  if test ­f /tmp/lock
while test i ­le 10
                                  then
do
                                          echo "Aguardando lock..."
      i=$((i+1))
                                          sleep 1
      echo "Contando: $i"
                                  else
done
                                          break
                                  fi
                            done

   Para um loop infinito (saindo com break):
Until

    Igual ao while, mas o teste é feito após os 
     comandos serem executados

     i=0                              $./testeuntil
     until [ $i ­eq 9 ]               0 1 2 3 4 5 6 7 8
     do                               $
          echo ­n “$i ”
          let i++
     done
                                                     $ ./testeuntil2
 until ! who | grep pet                              pet pts/0 Jan 4 16:47 (143.54.12.140)
 do                                                  pet pts/0 Jan 4 16:48 (143.54.12.140)
      sleep 60                                       ...
 done                                                pet pts/0 Jan 4 17:39 (143.54.12.140)
 echo ­n “usuário pet foi embora!!”                  usuário pet foi embora às 17:39h!!
 echo “às $(date “%H:%Mh”)”                          $
Interação com o usuário
   read: recebe uma lista de parâmetros e salva nas 
    variáveis
       Se houver mais parâmetros do que variáveis, a última 
        recebe o resto
   echo: imprime uma mensagem no STDOUT
         $ read var1 var2 var3
         Curso de ShellScript        $ read var1 var2
         $ echo $var1                Curso de ShellScript
         Curso                       $ echo $var1
         $ echo $var2                Curso
         de                          $ echo $var2
         $ echo $var3                de ShellScript
         ShellScript
Leitura de Arquivos

   Duas formas:
                         Cat arquivo.txt |
    while read LINHA     while read LINHA
    do                   do
       echo $LINHA          echo $LINHA
    done < arquivo.txt   done


   O while termina quando o read encontra um 
    EOF (leitura mal sucedida)

Weitere ähnliche Inhalte

Was ist angesagt?

Shell Script - Luz e trevas
Shell Script - Luz e trevasShell Script - Luz e trevas
Shell Script - Luz e trevasOsvaldo Filho
 
Minicurso Shell Script
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell ScriptLuís Eduardo
 
Introducao ao Shell Script
Introducao ao Shell ScriptIntroducao ao Shell Script
Introducao ao Shell ScriptHugo Maia Vieira
 
12 aula - shell script-2015
12   aula - shell script-201512   aula - shell script-2015
12 aula - shell script-2015Flávia Santos
 
Curso de Shell Script 05/11
Curso de Shell Script 05/11Curso de Shell Script 05/11
Curso de Shell Script 05/11Rodrigo Silva
 
Curso de shell
Curso de shellCurso de shell
Curso de shellTiago
 
Introdução ao shell script no linux
Introdução ao shell script no linuxIntrodução ao shell script no linux
Introdução ao shell script no linuxPaulo Damas
 
Linux - Shell e Comandos Básicos
Linux - Shell e Comandos BásicosLinux - Shell e Comandos Básicos
Linux - Shell e Comandos BásicosFrederico Madeira
 
44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batch44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batchMarcio Pereira
 
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 2017Sandro Custodio
 
O Que é Shell (bash)
O Que é Shell (bash)O Que é Shell (bash)
O Que é Shell (bash)Sérgio Silva
 
Curso de ShellScript - Lm07 shellscript7
Curso de ShellScript - Lm07 shellscript7Curso de ShellScript - Lm07 shellscript7
Curso de ShellScript - Lm07 shellscript7Pessoal
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoRafael Jaques
 
Aula6 Cont
Aula6 ContAula6 Cont
Aula6 Contwillians
 
Apostila manual completo - windows-script-host
Apostila   manual completo - windows-script-hostApostila   manual completo - windows-script-host
Apostila manual completo - windows-script-hostRogerio Pereira
 

Was ist angesagt? (20)

Curso gratuitoshellscript nivel-2
Curso gratuitoshellscript nivel-2Curso gratuitoshellscript nivel-2
Curso gratuitoshellscript nivel-2
 
Shell Script - Luz e trevas
Shell Script - Luz e trevasShell Script - Luz e trevas
Shell Script - Luz e trevas
 
Minicurso Shell Script
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell Script
 
Introducao ao Shell Script
Introducao ao Shell ScriptIntroducao ao Shell Script
Introducao ao Shell Script
 
12 aula - shell script-2015
12   aula - shell script-201512   aula - shell script-2015
12 aula - shell script-2015
 
Shell Script
Shell ScriptShell Script
Shell Script
 
Shell script
Shell scriptShell script
Shell script
 
Curso de Shell Script 05/11
Curso de Shell Script 05/11Curso de Shell Script 05/11
Curso de Shell Script 05/11
 
Shell scripts
Shell scriptsShell scripts
Shell scripts
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 
Introdução ao shell script no linux
Introdução ao shell script no linuxIntrodução ao shell script no linux
Introdução ao shell script no linux
 
Linux - Shell e Comandos Básicos
Linux - Shell e Comandos BásicosLinux - Shell e Comandos Básicos
Linux - Shell e Comandos Básicos
 
44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batch44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batch
 
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 (bash)O Que é Shell (bash)
O Que é Shell (bash)
 
Curso de ShellScript - Lm07 shellscript7
Curso de ShellScript - Lm07 shellscript7Curso de ShellScript - Lm07 shellscript7
Curso de ShellScript - Lm07 shellscript7
 
Shell script
Shell script Shell script
Shell script
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
 
Aula6 Cont
Aula6 ContAula6 Cont
Aula6 Cont
 
Apostila manual completo - windows-script-host
Apostila   manual completo - windows-script-hostApostila   manual completo - windows-script-host
Apostila manual completo - windows-script-host
 

Andere mochten auch

A Certificação LPI
A Certificação LPIA Certificação LPI
A Certificação LPIrjsmelo
 
Sistemas operacionais de rede exercicio de sala
Sistemas operacionais de rede exercicio de salaSistemas operacionais de rede exercicio de sala
Sistemas operacionais de rede exercicio de salaCarlos Melo
 
Linux comandos gerais e servidores de rede
Linux   comandos gerais e servidores de redeLinux   comandos gerais e servidores de rede
Linux comandos gerais e servidores de redefernandao777
 
Comandos do linux
Comandos do linuxComandos do linux
Comandos do linuxPeslPinguim
 
Treinamento de comandos Unix e Linux
Treinamento de comandos Unix e LinuxTreinamento de comandos Unix e Linux
Treinamento de comandos Unix e LinuxCid de Andrade
 
Livro Programação em Shell 8 edição Julio Cézar Nevez
Livro Programação em Shell 8 edição   Julio Cézar NevezLivro Programação em Shell 8 edição   Julio Cézar Nevez
Livro Programação em Shell 8 edição Julio Cézar NevezSoftD Abreu
 
Redes e Servidores Linux - Guia Prático - Carlos E. Morimoto
Redes e Servidores Linux - Guia Prático - Carlos E. MorimotoRedes e Servidores Linux - Guia Prático - Carlos E. Morimoto
Redes e Servidores Linux - Guia Prático - Carlos E. MorimotoHeber Gutenberg
 
Livro curso de_hacker_para_iniciantes_cap_1
Livro curso de_hacker_para_iniciantes_cap_1Livro curso de_hacker_para_iniciantes_cap_1
Livro curso de_hacker_para_iniciantes_cap_1Alax Ricard
 
Livro proibido do curso de hacker completo 285 páginas 71
Livro proibido do curso de hacker completo 285 páginas 71Livro proibido do curso de hacker completo 285 páginas 71
Livro proibido do curso de hacker completo 285 páginas 71Guilherme Dias
 

Andere mochten auch (16)

A Certificação LPI
A Certificação LPIA Certificação LPI
A Certificação LPI
 
Sistemas operacionais de rede exercicio de sala
Sistemas operacionais de rede exercicio de salaSistemas operacionais de rede exercicio de sala
Sistemas operacionais de rede exercicio de sala
 
Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida) Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida)
 
Lpi autodidata Flisol Florianopolis
Lpi autodidata Flisol FlorianopolisLpi autodidata Flisol Florianopolis
Lpi autodidata Flisol Florianopolis
 
Certificação LPI
Certificação LPICertificação LPI
Certificação LPI
 
Shell Script Linux
Shell Script LinuxShell Script Linux
Shell Script Linux
 
Administração de Redes Linux - III
Administração de Redes Linux - IIIAdministração de Redes Linux - III
Administração de Redes Linux - III
 
Linux comandos gerais e servidores de rede
Linux   comandos gerais e servidores de redeLinux   comandos gerais e servidores de rede
Linux comandos gerais e servidores de rede
 
Comandos do linux
Comandos do linuxComandos do linux
Comandos do linux
 
Certificação LPI
Certificação LPICertificação LPI
Certificação LPI
 
Treinamento de comandos Unix e Linux
Treinamento de comandos Unix e LinuxTreinamento de comandos Unix e Linux
Treinamento de comandos Unix e Linux
 
Cap1 exercicios comandos linux
Cap1 exercicios comandos linuxCap1 exercicios comandos linux
Cap1 exercicios comandos linux
 
Livro Programação em Shell 8 edição Julio Cézar Nevez
Livro Programação em Shell 8 edição   Julio Cézar NevezLivro Programação em Shell 8 edição   Julio Cézar Nevez
Livro Programação em Shell 8 edição Julio Cézar Nevez
 
Redes e Servidores Linux - Guia Prático - Carlos E. Morimoto
Redes e Servidores Linux - Guia Prático - Carlos E. MorimotoRedes e Servidores Linux - Guia Prático - Carlos E. Morimoto
Redes e Servidores Linux - Guia Prático - Carlos E. Morimoto
 
Livro curso de_hacker_para_iniciantes_cap_1
Livro curso de_hacker_para_iniciantes_cap_1Livro curso de_hacker_para_iniciantes_cap_1
Livro curso de_hacker_para_iniciantes_cap_1
 
Livro proibido do curso de hacker completo 285 páginas 71
Livro proibido do curso de hacker completo 285 páginas 71Livro proibido do curso de hacker completo 285 páginas 71
Livro proibido do curso de hacker completo 285 páginas 71
 

Ähnlich wie Oficina de ShellScript: Wildcards, Variáveis e Comandos

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)Hugo Maia Vieira
 
Curso de ShellScript - Lm05 shellscript5
Curso de ShellScript - Lm05 shellscript5Curso de ShellScript - Lm05 shellscript5
Curso de ShellScript - Lm05 shellscript5Pessoal
 
Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyDiego Rubin
 
Oficina shell
Oficina shellOficina shell
Oficina shellapsegundo
 
Shell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadminShell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadminMagno Torres
 
Aula 05 - Estrutura de Controle em PHP.pdf
Aula 05 - Estrutura de Controle em PHP.pdfAula 05 - Estrutura de Controle em PHP.pdf
Aula 05 - Estrutura de Controle em PHP.pdfAntonioSvio1
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comandogarux
 
Shell script do zero aula 1 - basico do basico e primeiros comandos
Shell script do zero    aula 1 - basico do basico e primeiros comandosShell script do zero    aula 1 - basico do basico e primeiros comandos
Shell script do zero aula 1 - basico do basico e primeiros comandosIvan Ribeiro
 
Manual comandos
Manual comandosManual comandos
Manual comandosPaulo Rijo
 
Trabalhando na Linha de comando
Trabalhando na  Linha de comandoTrabalhando na  Linha de comando
Trabalhando na Linha de comandoSoftD Abreu
 

Ähnlich wie Oficina de ShellScript: Wildcards, Variáveis e Comandos (20)

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 i
Shell script iShell script i
Shell script i
 
Curso de ShellScript - Lm05 shellscript5
Curso de ShellScript - Lm05 shellscript5Curso de ShellScript - Lm05 shellscript5
Curso de ShellScript - Lm05 shellscript5
 
Linux shell
Linux shellLinux shell
Linux shell
 
Fpar aula5
Fpar aula5Fpar aula5
Fpar aula5
 
shell bash Fpar aula6
shell bash Fpar aula6shell bash Fpar aula6
shell bash Fpar aula6
 
Introdução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação RubyIntrodução a Linguagem de Programação Ruby
Introdução a Linguagem de Programação Ruby
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
Oficina shell
Oficina shellOficina shell
Oficina shell
 
Shell script
Shell scriptShell script
Shell script
 
Shell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadminShell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadmin
 
Shell Script
Shell ScriptShell Script
Shell Script
 
Aula 05 - Estrutura de Controle em PHP.pdf
Aula 05 - Estrutura de Controle em PHP.pdfAula 05 - Estrutura de Controle em PHP.pdf
Aula 05 - Estrutura de Controle em PHP.pdf
 
Lpi+102
Lpi+102Lpi+102
Lpi+102
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comando
 
Shell script do zero aula 1 - basico do basico e primeiros comandos
Shell script do zero    aula 1 - basico do basico e primeiros comandosShell script do zero    aula 1 - basico do basico e primeiros comandos
Shell script do zero aula 1 - basico do basico e primeiros comandos
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
Manual comandos
Manual comandosManual comandos
Manual comandos
 
Trabalhando na Linha de comando
Trabalhando na  Linha de comandoTrabalhando na  Linha de comando
Trabalhando na Linha de comando
 

Oficina de ShellScript: Wildcards, Variáveis e Comandos

  • 1. Oficina de ShellScript Segunda Parte Wildcards Variáveis de Ambiente Comandos em Shell Script Parâmetros para o programa Mais comandos /dev/null Bruno L. Albrecht Felipe A. Chies   PET Computação UFRGS  
  • 2. Wildcards  Recurso utilizado para especificar um ou mais  arquivos/diretório de uma vez só.  Permite a filtragem do que será listado/copiado/ apagado/etc  É uma feature que deixa a shell “mais  poderosa” que a GUI no trato de arquivos.  Quatro tipos:  *, ?, [ ] e { }    
  • 3. Wildcards  *: qualquer coisa! (zero ou mais caracteres)  rm *.txt → apaga todos os arquivos que terminem  com .txt  ?: um único caractere qualquer!  rm log?.txt → log1.txt, loga.txt, lob[.txt, etc  rm *?.* → todos os arquivos não ocultos  Obs.: para nos referirmos a um arquivo que um  wildcard no nome, utilizamos 'wildcard'    
  • 4. Wildcards  [ ] : um dos caracteres listados (ou não)  [abcd] : a ou b ou c ou d  [a­d] : qualquer um no intervalo de 'a' a 'd'  [!abcd] : qualquer um, menos a,b,c,d  [!a­d] : qualquer um, menos os que estão no  intervalo de 'a' a 'd'  Exemplo:  sudo umount /dev/[hs]d[a­d][1­9]  desmonta todos os dispositivos    
  • 5. Wildcards  { } : cada opção separada por vírgulas é  considerada apenas uma vez  echo t{r,igr,rist}es  tres tigres tristes  echo alun{o,a}{,s}  aluno alunos aluno alunos    
  • 6. ShellScript: Introdução  Shell  Interpretador de comandos;  Script  É uma descrição geral de qualquer programa  escrito em linguagem interpretada, ou seja, não  compilada;  Temos script em PHP, Ruby, script em PERL e  também Shell Script;
  • 7. Objetivos  Facilitar as tarefas repetidas do adminstrador:  evita a redigitação de comandos;  podem ser agendados para execução através da  tabela crontab (man cron);  Scripts podem fazer tarefas complexas  podemos combinar diversos comandos, com  controladores de fluxo e variáveis;  São “rápidos” de serem criados e não precisam  ser compilados;
  • 8. Hello World  Muito simples!!! Muito simples:  Crie o arquivo: gedit hello.sh & #!/bin/bash echo "Hello World!!!"  Para executá­lo:  chmod +x hello.sh  ./hello.sh
  • 9. Variáveis  O bash reconhece uma variável quando ela  começa com $;  Declaração: var=“valor”  valor pode ser número, frase, outras variáveis ou  comando.   Pode ser expressado entre “ ”(aspas duplas), ' '  (apóstrofes) ou ` `(crases);
  • 10. Variáveis  Aspas duplas: valor da variável será  interpretado;  variavel="Meu login é: $USER"  echo $variavel  Meu login é: Bruno  Apóstrofes: declaração literal  variavel='Meu login é: $USER'  echo $variavel  Meu login é: $USER
  • 11. Entre crases  Crases: vão interpretar os comandos  declarados. Se forem combinados com texto  numa expressão, deve­se usar as aspas  juntamente!!!  variavel=“Meu diretório atual é: `pwd`”  echo $variavel  Meu diretório atual é: /home/bruno  Obs.: É o mesmo que $(comando)  var=$(pwd)
  • 12. PARÂMETROS  É um array de parâmetros!  De $1 a $9  $0 → nome do programa  $# → quantidade de parâmetros  $* → conjunto de todos os parâmetros  Shift n → utilizado para deslocar n parâmetros    
  • 13. Variáveis de Ambiente  São variáveis LOCAIS ou GLOBAIS já  definidas pelo sistema operacioal  Podem ser redefinidas  Exemplo:  O nome do usuário é determinado a partir de uma  variável de ambiente: $USER    
  • 14. Variáveis de Ambiente  Principais variáveis globais:  PATH diretório onde podem ser encontrados os  executáveis  USER nome (login) do usuário  HOME diretório home do usuário  HOST nome do host (máquina)  SHELL shell ativo  PS1 mensagem no terminal  IFS separador de parâmetros (default: ” ”)   A lista completa pode ser obtida através do comando   
  • 15. Variáveis de Ambiente  Para definir uma variável de ambiente GLOBAL:  export VARIAVEL=conteúdo  Para definir uma variável de ambiente LOCAL:  VARIAVEL=conteudo  Exemplo:   export PATH=$PATH:/meu_dir  Obs.: esta forma de definir variáveis é    TEMPORÁRIA, ou seja, apenas enquanto o shell    estiver ativo
  • 16. Variáveis de Ambiente  Para definir variáveis globais e locais  PERMANENTEMENTE, devemos alterar os  seguintes arquivos:   ~./bashrc → somente para o usuário atual  /etc/bash.bashrc → para todos os usuários  Imprimir o conteúdo de uma variável:  echo $VARIAVEL  Deletar uma variável:    unset VARIÁVEL  
  • 17. Expressões aritméticas  Para o Shell executar operações aritméticas,  devemos utilizar $((expressão))  echo $((2+2))  var1=$((var2+var1))  Ou então, o comando let:  let var1++  let var2­­    
  • 18. Expressões aritméticas  x++, ++x, x­­, ­­x: [pós,pré]­[in,de]cremento y  x**y: potenciação (x )  x*y, x/y, x%y: multiplicação, divisão, resto  <, <=, >, >=, ==, !=: comparações  &&, ||: AND e OR lógicos    
  • 19. Comandos: test  Descrição: testar qualquer coisa!  test $var1 ­lt $var2  Obs.: resultado em $?    
  • 20. if  O comando if testa o STDERR (variável de  ambiente $?), mas, para ficar semelhante à  sintaxe do C, utilizamos o comando test If test $variavel ­gt 10 If [ $variavel ­gt 10 ] then then echo ”é maior que 10” echo ”é maior que 10” else else echo ”é menor que 10” echo ”é menor que 10” fi fi  Atalho do comando test no if:    [ expressão ] → não do espaço antes e depois da    expressão
  • 21. case  Para não precisarmos concatenar milhares de  ifs, utilizamos o case: if [ $var ­eq 1 ] case $var in then  1) <comandos> ;; <comandos> 2) <comandos> ;; elif [ $var ­eq 2 ] 3) <comandos> ;; then 4) <comandos> ;; <comandos> elif [ $var ­eq 3 ] *) <comandos> then esac <comandos> elif [ $var ­eq 4 ] ● Não há ;; no último grupo ● Para fechar o case, usamos “esac” then ● Podemos usar wildcards nos padrões de  <comandos> else grupos. ex.: [1­4], ?, ??, 3|4, ?0|?5, [1234]  <comandos> etc fi
  • 22. For for numero in um dois três quatro cinco do       echo "Contando: $numero" done  Um comando muito útil para utilizar o for é o seq,  que gera sequências de números: for num in $(seq 10) for num in $(seq 6 10) do do <...>  <...>  done for num in $(seq 0 2 10) done do <...> done
  • 23. For for par do       echo "Parâmetro: $par" done  Neste caso, não colocamos o “in” depois da  variável. Isto serve para a variável (no caso  “par”) receber cada parâmetro passado para o  programa a cada laço do for.
  • 24. For  Podemos ainda usar uma sintaxe parecida com  a do C. for (( ; i<=9 ; )) for ((i=0 ; i<=9 ; i++)) do do let i++;       echo ­n “$i “ echo ­n “$i “ done done  Outra forma de for for arq in * 1 ­> arquivo1.txt 2 ­> arquivo2.sh do 3 ­> arquivo3.bla let i++; 4 ­> arquivo4.doc echo “$i ­> $arq” etc... done
  • 25. Break e Continue  break: pára o laço  continue: ignora o que tem embaixo e volta  para o início do laço for ((i=0 ; ; i++)) $ ./testefor 0 1 2 3 4 5 6 7 8 9 do echo ­n “$i “ for ((i=0 ; ; i++)) if [ i ­lt 9 ] do $ ./testefor2 then echo ­n “$i “ 0 1 2 3 4 5 6 7 8 9 continue if [ i ­eq 9 ] else then break break; done done
  • 26. While  Utilizando um contador com o while: while : do i=0       if test ­f /tmp/lock while test i ­le 10       then do               echo "Aguardando lock..."       i=$((i+1))               sleep 1       echo "Contando: $i"       else done               break       fi done  Para um loop infinito (saindo com break):
  • 27. Until  Igual ao while, mas o teste é feito após os  comandos serem executados i=0 $./testeuntil until [ $i ­eq 9 ] 0 1 2 3 4 5 6 7 8 do $ echo ­n “$i ” let i++ done $ ./testeuntil2 until ! who | grep pet pet pts/0 Jan 4 16:47 (143.54.12.140) do pet pts/0 Jan 4 16:48 (143.54.12.140) sleep 60 ... done pet pts/0 Jan 4 17:39 (143.54.12.140) echo ­n “usuário pet foi embora!!” usuário pet foi embora às 17:39h!! echo “às $(date “%H:%Mh”)” $
  • 28. Interação com o usuário  read: recebe uma lista de parâmetros e salva nas  variáveis  Se houver mais parâmetros do que variáveis, a última  recebe o resto  echo: imprime uma mensagem no STDOUT $ read var1 var2 var3 Curso de ShellScript $ read var1 var2 $ echo $var1 Curso de ShellScript Curso $ echo $var1 $ echo $var2 Curso de $ echo $var2 $ echo $var3 de ShellScript ShellScript
  • 29. Leitura de Arquivos  Duas formas: Cat arquivo.txt | while read LINHA while read LINHA do do echo $LINHA echo $LINHA done < arquivo.txt done  O while termina quando o read encontra um  EOF (leitura mal sucedida)