SlideShare una empresa de Scribd logo
1 de 4
Descargar para leer sin conexión
Papo de Botequim              LINUX USER




Curso de Shell Script


Papo de Botequim - Parte II
Nossos personagens voltam à mesa do bar para discutir expressões regulares e             linhas que usavam a palavra grep, em
                                                                                         todos os arquivos terminados em .sh.
colocar a “mão na massa” pela primeira vez, construindo um aplicativo simples            Como uso essa extensão para definir
                                                                                         meus arquivos com programas em Shell,
para catalogar uma coleção de CDs. POR JÚLIO CÉSAR NEVES                                 malandramente, o que fiz foi listar as lin-
                                                                                         has dos programas que poderia usar
                                                                                         como exemplo do comando grep.



G
        arçom! Traz um “chops” e dois                                                       Olha que legal! O grep aceita como
        “pastel”. O meu amigo hoje não                                                   entrada a saída de outro comando, redi-
        vai beber porque está finalmente                                                  recionado por um pipe (isso é muito
sendo apresentado a um verdadeiro sis-                                                       comum em Shell e é um tremendo
tema operacional, e ainda tem muita                                                           acelerador da execução de coman-
coisa a aprender!                                                                              dos). Dessa forma, no 3° exemplo,
– E então, amigo, tá entendendo                                                                 o comando who listou as pessoas
  tudo que te expliquei até agora?                                                               “logadas” na mesma máquina que
– Entendendo eu tô, mas não vi                                                                   você (não se esqueça jamais: o
  nada prático nisso…                                                                            Linux é multiusuário) e o grep foi
– Calma rapaz, o que te falei até                                                                usado para verificar se o Carvalho
  agora serve como base ao que há                                                               estava trabalhando ou “coçando”.
  de vir daqui pra frente. Vamos usar                                                          O grep é um comando muito con-
  essas ferramentas que vimos para                                                            hecido, pois é usado com muita fre-
  montar programas estruturados. Você                                                      qüência. O que muitas pessoas não
  verá porque até na TV já teve pro-                                                     sabem é que existem três comandos na
  grama chamado “O Shell é o Limite”.                                                    família grep: grep, egrep e fgrep. A princi-
  Para começar vamos falar dos coman-                                                    pais diferenças entre os 3 são:
  dos da família grep                                                                    • grep - Pode ou não usar expressões
– Grep? Não conheço nenhum termo em          $ grep franklin /etc/passwd                    regulares simples, porém no caso de
  inglês com este nome…                                                                     não usá-las, o fgrep é melhor, por ser
– É claro, grep é um acrônimo (sigla)       Pesquisando em vários arquivos:                 mais rápido.
  para Global Regular Expression Print,                                                  • egrep (“e” de extended, estendido) - É
  que usa expressões regulares para          $ grep grep *.sh                               muito poderoso no uso de expressões
  pesquisar a ocorrência de cadeias de                                                      regulares. Por ser o mais poderoso dos
  caracteres na entrada definida.           Pesquisando na saída de um comando:             três, só deve ser usado quando for
  Por falar em expressões regulares (ou                                                     necessária a elaboração de uma
regexp), o Aurélio Marinho Jargas es-        $ who | grep carvalho                          expressão regular não aceita pelo grep.
creveu dois artigos [1 e 2] imperdíveis                                                  • fgrep (“f” de fast, rápido) - Como o
para a Revista do Linux sobre esse          No 1º exemplo, procurei a palavra               nome diz, é o ligeirinho da família,
assunto e também publicou um livro [3]      franklin em qualquer lugar do arquivo           executando o serviço de forma muito
pela Editora Novatec. Acho bom você ler     /etc/passwd. Se quisesse procurar um            veloz (por vezes é cerca de 30% mais
esses artigos, eles vão te ajudar no que    nome de usuário, isto é, somente no iní-        rápido que o grep e 50% mais que o
está para vir.                              cio dos registros desse arquivo, poderia        egrep), porém não permite o uso de
                                            digitar $ grep ‘^franklin’ /etc/passwd.         expressões regulares na pesquisa.
Eu fico com grep,você com gripe                “E para que servem o circunflexo e os     –Agora que você já conhece as difer-
Esse negócio de gripe é brincadeira, só     apóstrofos?”, você vai me perguntar. Se      enças entre os membros da família, me
um pretexto para pedir umas caipirinhas.    tivesse lido os artigos que mencionei,       diga: o que você acha dos três exemplos
Eu te falei que o grep procura cadeias de   saberia que o circunflexo serve para limi-   que eu dei antes das explicações?
caracteres dentro de uma entrada defi-      tar a pesquisa ao início de cada linha e     – Achei que o fgrep resolveria o teu prob-
nida, mas o que vem a ser uma “entrada      os apóstrofos servem para o Shell não           lema mais rapidamente que o grep.
definida”? Bem, existem várias formas       interpretar esse circunflexo, deixando-o     – Perfeito! Tô vendo que você está
de definir a entrada do comando grep.       passar incólume para o comando grep.            atento, entendendo tudo que estou te
Veja só. Para pesquisar em um arquivo:         No 2º exemplo mandei listar todas as         explicando! Vamos ver mais exemplos




                                                                                www.linuxmagazine.com.br   Setembro 2004         87
LINUX USER                  Papo de Botequim




                   Quadro 1 - Listando subdiretórios                                              ser explorado).
                                                                                                  – Péra aí! De onde eu vou receber os
 $ ls -l | grep    ‘^d’                                                                             dados dos CDs?
 drwxr-xr-x        3                root     root      4096    Dec   18 2000 doc                  – Vou mostrar como o programa pode
 drwxr-xr-x        11               root     root      4096    Jul   13 18:58 freeciv               receber parâmetros de quem o estiver
 drwxr-xr-x        3                root     root      4096    Oct   17 2000 gimp                   executando e, em breve, ensinarei a ler
 drwxr-xr-x        3                root     root      4096    Aug    8 2000 gnome                  os dados da tela ou de um arquivo.
 drwxr-xr-x        2                root     root      4096    Aug    8 2000 idl
 drwxrwxr-x        14               root     root      4096    Jul   13 18:58 locale              Passando parâmetros
 drwxrwxr-x        12               root     root      4096    Jan   14 2000 lyx                  Veja abaixo a estrutura do arquivo con-
 drwxrwxr-x        3                root     root      4096    Jan   17 2000 pixmaps              tendo a lista das músicas:
 drwxr-xr-x        3                root     root      4096    Jul    2 20:30 scribus
 drwxrwxr-x        3                root     root      4096    Jan   17 2000 sounds                nomedoálbum^intérprete1~nomeU
 drwxr-xr-x        3                root     root      4096    Dec   18 2000 xine                  damúsica1:...:intérpreten~nomeU
 drwxr-xr-x        3                root     root      4096    Jun   19 2000 xplns                 damúsican

  para clarear de vez as diferenças de               -l). Os apóstrofos foram usados para o       Isto é, o nome do álbum será separado
  uso entre os membros da família.                   Shell não “ver” o circunflexo. Vamos ver     por um circunflexo do resto do registro,
  Eu sei que em um arquivo qualquer                  mais um. Veja na Tabela 1 as quatro          formado por diversos grupos compostos
existe um texto falando sobre Linux, só              primeiras posições possíveis da saída de     pelo intérprete de cada música do CD e a
não tenho certeza se está escrito com L              um ls -l em um arquivo comum (não é          música interpretada. Estes grupos são
maiúsculo ou minúsculo. Posso fazer                  diretório, nem link, nem …).                 separados entre si por dois pontos (:) e,
uma busca de duas formas:                               Para descobrir todos os arquivos exe-     internamente, o intérprete será separado
                                                     cutáveis em um determinado diretório         por um til (~) do nome da música.
 egrep (Linux | linux) arquivo.txt                   eu poderia fazer:                               Quero escrever um programa chamado
                                                                                                  musinc, que incluirá registros no meu
ou então:                                              $ ls -la | egrep ‘^-..(x|s)’               arquivo músicas. Passarei cada álbum
                                                                                                  como parâmetro para o programa:
 grep [Ll]inux arquivo.txt                           novamente usamos o circunflexo para
                                                     limitar a pesquisa ao início de cada          $ musinc “álbum^interprete~U
No primeiro caso, a expressão regular                linha, ou seja, listamos as linhas que        musica:interprete~musica:...”
complexa (Linux | linux) usa os parênte-             começam por um traço (-), seguido de
ses para agrupar as opções e a barra ver-            qualquer coisa (o ponto), novamente          Desta forma, musinc estará recebendo os
tical (|) é usada como um “ou” (or, em               seguido de qualquer coisa, e por fim um      dados de cada álbum como se fosse uma
inglês) lógico, isto é, estou procurando             x ou um s. Obteríamos o mesmo resul-         variável. A única diferença entre um
Linux ou linux.                                      tado se usássemos o comando:                 parâmetro recebido e uma variável é que
   No segundo, a expressão regular                                                                os primeiros recebem nomes numéricos
[Ll]inux significa: começado por L ou l                $ ls -la | grep ‘^-..[xs]’                 (o que quis dizer é que seus nomes são
seguido de inux. Como esta é uma                                                                  formados somente por um algarismo,
expressão simples, o grep consegue                   e além disso, agilizaríamos a pesquisa.      isto é, $1, $2, $3, …, $9). Vamos, fazer
resolvê-la, por isso é melhor usar a                                                              mais alguns testes:
segunda forma, já que o egrep tornaria a             A “CDteca”
pesquisa mais lenta.                                 Vamos começar a desenvolver progra-           $ cat teste
   Outro exemplo. Para listar todos os               mas! Creio que a montagem de um               #!/bin/bash
subdiretórios do diretório corrente, basta           banco de dados de músicas é bacana            #Teste de passagem    de parametros
usar o comando $ ls -l | grep ‘^d’. Veja o           para efeito didático (e útil nestes tempos    echo “1o. parm ->     $1”
resultado no Quadro 1.                               de downloads de arquivos MP3 e                echo “2o. parm ->     $2”
   No exemplo, o circunflexo (^) serviu              queimadores de CDs). Não se esqueça           echo “3o. parm ->     $3”
para limitar a pesquisa à primeira                   que, da mesma forma que vamos desen-
posição da saída do ls longo (parâmetro              volver um monte de programas para            Agora vamos rodar esse programinha:
                                                     organizar os seus CDs de música, com
               Tabela 1                              pequenas adaptações você pode fazer o         $ teste passando parametros para U
                                                     mesmo para organizar os CDs de soft-          testar
 Posição           Valores possíveis
 1ª                -
                                                     ware que vêm com a Linux Magazine e           bash: teste: cannot execute
 2ª                r ou -
                                                     outros que você compra ou queima, e
 3ª                w ou -                            disponibilizar esse banco de software        Ops! Esqueci-me de tornar o script exe-
 4ª                x,s(suid) ou -                    para todos os que trabalham com você         cutável. Vou fazer isso e testar nova-
                                                     (o Linux é multiusuário, e como tal deve     mente o programa:




88          Setembro 2004           www.linuxmagazine.com.br
Papo de Botequim                  LINUX USER




 $ chmod 755 teste                          Execute o programa:                          inclusão de CDs no meu banco chamado
 $ teste passando parametros para U                                                      musicas. O programa é muito simples
 testar                                      $ teste passando parametros para testar     (como tudo em Shell). Veja a Listagem 1.
 1o. parm -> passando                        O programa teste recebeu 4 U                   O script é simples e funcional; limito-
 2o. parm -> parametros                      parametros                                  me a anexar ao fim do arquivo musicas o
 3o. parm -> para                            1o. parm -> passando                        parâmetro recebido. Vamos cadastrar 3
                                             2o. parm -> parametros                      álbuns para ver se funciona (para não
Repare que a palavra testar, que seria o     3o. parm -> para                            ficar “enchendo lingüiça,” suponho que
quarto parâmetro, não foi listada. Isso      Para listar todos de uma U                  em cada CD só existem duas músicas):
ocorreu porque o programa teste só lista     “tacada” eu faco passando U
os três primeiros parâmetros recebidos.      parametros para testar                        $ musinc “album3^Artista5U
Vamos executá-lo de outra forma:                                                           ~Musica5:Artista6~Musica5”
                                            Repare que antes das aspas usei uma            $ musinc “album1^Artista1U
 $ teste “passando parametros” U            barra invertida, para escondê-las da           ~Musica1:Artista2~Musica2”
 para testar                                interpretação do Shell (se não usasse as       $ musinc “album 2^Artista3U
 1o. parm -> passando parametros            contrabarras as aspas não apareceriam).        ~Musica3:Artista4~Musica4”
 2o. parm -> para                             Como disse, os parâmetros recebem
 3o. parm -> testar                         números de 1 a 9, mas isso não significa     Listando o conteúdo do arquivo musicas:
                                            que não posso usar mais de nove
As aspas não deixaram o Shell ver o         parâmetros. Significa que só posso             $ cat musicas
espaço em branco entre as duas              endereçar nove. Vamos testar isso:             album3^Artista5~Musica5:Artista6U
primeiras palavras, e elas foram consid-                                                   ~Musica6
eradas como um único parâmetro. E            $ cat teste                                   album1^Artista1~Musica1:Artista2U
falando em passagem de parâmetros,           #!/bin/bash                                   ~Musica2
uma dica: veja na Tabela 2 algumas var-      # Programa para testar passagem U             album2^Artista3~Musica3:Artista4U
iáveis especiais. Vamos alterar o pro-       de parametros (3a. Versao)                    ~Musica4
grama teste para usar as novas variáveis:    echo O programa $0 recebeu $# U
                                             parametros                                  Podia ter ficado melhor. Os álbuns estão
 $ cat teste                                 echo “11o. parm -> $11”                     fora de ordem, dificultando a pesquisa.
 #!/bin/bash                                 shift                                       Vamos alterar nosso script e depois testá-
 # Programa para testar passagem U           echo “2o. parm -> $1”                       lo novamente. Veja a listagem 2. Sim-
 de parametros (2a. Versao)                  shift 2                                     plesmente inseri uma linha que classifica
 echo O programa $0 recebeu $# U             echo “4o. parm -> $1”                       o arquivo musicas, redirecionando a
 parametros                                                                              saída para ele mesmo (para isso serve a
 echo “1o. parm -> $1”                      Execute o programa:                          opção -o), após cada álbum ser anexado.
 echo “2o. parm -> $2”
 echo “3o. parm -> $3”                       $ teste passando parametros para U            $ cat musicas
 echo Para listar todos de uma U             testar                                        album1^Artista1~Musica1:Artista2U
 ”tacada” eu faco $*                       O programa teste recebeu 4 U                  ~Musica2
                                             parametros que são:                           albu2^Artista3~Musica3:Artista4U
 Listagem 1: Incluindo CDs                   11o. parm -> passando1                        ~Musica4
       na “CDTeca”                           2o. parm -> parametros                        album3^Artista5~Musica5:Artista6U
                                             4o. parm -> testar                            ~Musica6
 $ cat musinc
 #!/bin/bash                                Duas coisas muito interessantes aconte-         Oba! Agora o programa está legal e
 # Cadastra CDs (versao 1)                  ceram neste script. Para mostrar que os      quase funcional. Ficará muito melhor em
 #                                          nomes dos parâmetros variam de $1 a $9       uma nova versão, que desenvolveremos
 echo $1 >> musicas                         digitei echo $11 e o que aconteceu? O        após aprender a adquirir os dados da tela
                                            Shell interpretou como sendo $1 seguido      e formatar a entrada.
                                            do algarismo 1 e listou passando1;
            Listagem 2                        O comando shift, cuja sintaxe é shift n,     Tabela 2: Variáveis especiais
                                            podendo o n assumir qualquer valor
 $ cat musinc                                                                              Variável        Significado
                                            numérico, despreza os n primeiros
 #!/bin/bash                                                                               $0              Contém o nome do programa
                                            parâmetros, tornando o parâmetro de
 # Cadastra CDs (versao 2)                                                                 $#              Contém a quantidade de
                                            ordem n+1.                                                     parâmetros passados
 #
                                              Bem, agora que você já sabe sobre            $*              Contém o conjunto de todos os
 echo $1 >> musicas
                                            passagem de parâmetros, vamos voltar à                         parâmetros (muito parecido com $@)
 sort -o musicas musicas
                                            nossa “cdteca” para fazer o script de




                                                                                www.linuxmagazine.com.br    Setembro 2004                   89
LINUX USER           Papo de Botequim




  Ficar listando arquivos com o                grep <cadeia de caracteres> U                                Listagem 5 - musexc
comando cat não está com nada, vamos           [arq1, arq2, ..., arqn]
fazer um programa chamado muslist                                                             $ cat musexc
para listar um álbum, cujo nome será         O grep entendeu que deveria procurar a           #!/bin/bash
passado como parâmetro. Veja o código        cadeia de caracteres album nos arquivos          # Exclui CDs (versao 1)
na Listagem 3:                               2 e musicas. Como o arquivo 2 não                #
  Vamos executá-lo, procurando pelo          existe, grep gerou o erro e, por encontrar       grep -v “$1” musicas > /tmp/mus$$
album 2. Como já vimos antes, para pas-      a palavra album em todos os registros de         mv -f /tmp/mus$$ musicas
sar a string album 2 é necessário pro-       musicas, listou a todos.
tegê-la da interpretação do Shell, para        É melhor ignorarmos maiúsculas e
que ele não a interprete como dois           minúsculas na pesquisa. Resolveremos          mando. Estamos então prontos para
parâmetros. Exemplo:                         os dois problemas com a Listagem 4.           desenvolver o script para remover CDs
                                               Nesse caso, usamos a opção -i do grep       empenados da sua “CDteca”. Veja o
 $ muslist “album 2”                         que, como já vimos, serve para ignorar        código da Listagem 5.
 grep: can’t open 2                          maiúsculas e minúsculas, e colocamos o           Na primeira linha mandei para
 musicas: album1^Artista1~Musica1U           $1 entre aspas, para que o grep continu-      /tmp/mus$$ o arquivo musicas, sem os
 :Artista2~Musica2                           asse a ver a cadeia de caracteres resul-      registros que atendessem a consulta feita
 musicas: album2^Artista3~Musica3U           tante da expansão da linha pelo Shell         pelo comando grep. Em seguida, movi
 :Artista4~Musica4                           como um único argumento de pesquisa.          /tmp/mus$$ por cima do antigo musicas.
 musicas:album3^Artista5~Musica5U                                                          Usei o arquivo /tmp/mus$$ como arqui-
 :Artista6~Musica6                             $ muslist “album 2”                         vo de trabalho porque, como já havia
                                               album2^Artista3~Musica3:Artista4U           citado no artigo anterior, o $$ contém o
Que lambança! Onde está o erro? Eu tive        ~Musica4                                    PID (identificação do processo) e, dessa
o cuidado de colocar o parâmetro pas-                                                      forma, cada um que editar o arquivo
sado entre aspas para o Shell não o             Agora repare que o grep localiza a         musicas o fará em um arquivo de tra-
dividir em dois! É, mas repare como o        cadeia pesquisada em qualquer lugar do        balho diferente, evitando colisões.
grep está sendo executado:                   registro; então, da forma que estamos            Os programas que fizemos até aqui
                                             fazendo, podemos pesquisar por álbum,         ainda são muito simples, devido à falta
 grep $1 musicas                             por música, por intérprete e mais.            de ferramentas que ainda temos. Mas é
                                             Quando conhecermos os comandos                bom praticar os exemplos dados porque,
Mesmo colocando álbum 2 entre aspas,         condicionais, montaremos uma nova             eu prometo, chegaremos a desenvolver
para que fosse encarado como um único        versão de muslist que permitirá especi-       um sistema bacana para controle dos
parâmetro, quando o $1 foi passado pelo      ficar por qual campo pesquisar.               seus CDs. Na próxima vez que nos
Shell para o comando grep, transformou-         Ah! Em um dia de verão você foi à          encontrarmos, vou te ensinar como fun-
se em dois argumentos. Dessa forma, o        praia, esqueceu os CDs no carro, aquele       cionam os comandos condicionais e
conteúdo da linha que o grep executou        “solzinho” de 40 graus empenou seu            aprimoraremos mais um pouco esses
foi o seguinte:                              disco favorito e agora você precisa de        scripts. Por hoje chega! Já falei demais e
                                             uma ferramenta para removê-lo do              estou de goela seca! Garçom! Mais um
 grep album 2 musicas                        banco de dados? Não tem problema,             sem colarinho!                          s
                                             vamos desenvolver um script chamado
Como a sintaxe do grep é:                    musexc, para excluir estes CDs.                                     INFORMAÇÕES
                                                Antes de desenvolver o “bacalho”,
     Listagem 3 - muslist                    quero te apresentar a uma opção bas-           [1] http://www.revistadolinux.com.br/ed/003/
                                             tante útil da família de comandos grep. É          ferramentas.php3
 $ cat muslist
                                             a opção -v, que quando usada lista todos       [2] http://www.revistadolinux.com.br/ed/007/
 #!/bin/bash
                                             os registros da entrada, exceto o(s) local-        ereg.php3
 # Consulta CDs (versao 1)
                                             izado(s) pelo comando. Exemplos:               [3] http://www.aurelio.net/er/livro/
 #
 grep $1 musicas
                                               $ grep -v “album 2” musicas
                                               album1^Artista1~Musica1:Artista2U                            Julio Cezar Neves é
                                                                                            SOBRE O AUTOR




                                                                                                            Analista de Suporte de
         Listagem 4                            ~Musica2
                                                                                                            Sistemas desde 1969 e
      muslist melhorado                        album3^Artista5~Musica5:Artista6U                            trabalha com Unix
                                               ~Musica6                                                     desde 1980, quando
 $ cat muslist
                                                                                                            fez parte da equipe
 #!/bin/bash
                                             Conforme expliquei antes, o grep do                            que desenvolveu o
 # Consulta CDs (versao 2)                                                                                  SOX, um sistema
                                             exemplo listou todos os registros de
 #                                                                                                          operacional similar ao Unix, produzido
                                             musicas exceto o referente a album 2,                          pela Cobra Computadores.
 grep -i “$1” musicas
                                             porque atendia ao argumento do co-




90       Setembro 2004      www.linuxmagazine.com.br

Más contenido relacionado

La actualidad más candente

Programação em Shell Script
Programação em Shell ScriptProgramação em Shell Script
Programação em Shell ScriptReinaldo Lima
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à ShellscriptVinícius Hax
 
Introdução ao Linux - aula 03 e 04
Introdução ao Linux - aula 03 e 04Introdução ao Linux - aula 03 e 04
Introdução ao Linux - aula 03 e 04Renan Aryel
 
Curso de Shell Script 05/11
Curso de Shell Script 05/11Curso de Shell Script 05/11
Curso de Shell Script 05/11Rodrigo Silva
 
Introdução à linguagem de programação Python
Introdução à linguagem de programação PythonIntrodução à linguagem de programação Python
Introdução à linguagem de programação PythonCarlos Schults
 
Introdução a programação em python d2
Introdução a programação em python d2Introdução a programação em python d2
Introdução a programação em python d2Moises de Paula
 
(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03Norton Trevisan Roman
 
Oficina de shell script
Oficina de shell scriptOficina de shell script
Oficina de shell scriptbrunobione
 
Introdução à linguagem Python
Introdução à linguagem PythonIntrodução à linguagem Python
Introdução à linguagem PythonAlex Tercete
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonFabio Spanhol
 
Curso de Shell Script 11/11
Curso de Shell Script 11/11Curso de Shell Script 11/11
Curso de Shell Script 11/11Rodrigo Silva
 

La actualidad más candente (17)

Programação em Shell Script
Programação em Shell ScriptProgramação em Shell Script
Programação em Shell Script
 
Curso shell
Curso shellCurso shell
Curso shell
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à Shellscript
 
Introdução ao Linux - aula 03 e 04
Introdução ao Linux - aula 03 e 04Introdução ao Linux - aula 03 e 04
Introdução ao Linux - aula 03 e 04
 
Curso de Shell Script 05/11
Curso de Shell Script 05/11Curso de Shell Script 05/11
Curso de Shell Script 05/11
 
Introdução à linguagem de programação Python
Introdução à linguagem de programação PythonIntrodução à linguagem de programação Python
Introdução à linguagem de programação Python
 
Curso gratuitoshellscript nivel-2
Curso gratuitoshellscript nivel-2Curso gratuitoshellscript nivel-2
Curso gratuitoshellscript nivel-2
 
Introdução a programação em python d2
Introdução a programação em python d2Introdução a programação em python d2
Introdução a programação em python d2
 
(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03
 
Oficina de shell script
Oficina de shell scriptOficina de shell script
Oficina de shell script
 
Introdução à linguagem Python
Introdução à linguagem PythonIntrodução à linguagem Python
Introdução à linguagem Python
 
Shell Script v0
Shell Script v0Shell Script v0
Shell Script v0
 
Curso Gratuito de Shell Script
Curso Gratuito de Shell ScriptCurso Gratuito de Shell Script
Curso Gratuito de Shell Script
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com Python
 
Curso de Shell Script 11/11
Curso de Shell Script 11/11Curso de Shell Script 11/11
Curso de Shell Script 11/11
 
Shell script
Shell scriptShell script
Shell script
 

Destacado (20)

FCE Scan daryl
FCE Scan darylFCE Scan daryl
FCE Scan daryl
 
CATEGORIA PAISAJES
CATEGORIA PAISAJESCATEGORIA PAISAJES
CATEGORIA PAISAJES
 
Tuscany dinnerware (wb) copy
Tuscany dinnerware (wb) copyTuscany dinnerware (wb) copy
Tuscany dinnerware (wb) copy
 
Oracle TDE - O Básico
Oracle TDE - O BásicoOracle TDE - O Básico
Oracle TDE - O Básico
 
A tecnologia como ferramenta de capacitação
A tecnologia como ferramenta de capacitaçãoA tecnologia como ferramenta de capacitação
A tecnologia como ferramenta de capacitação
 
10092015110600
1009201511060010092015110600
10092015110600
 
doc20151009130127
doc20151009130127doc20151009130127
doc20151009130127
 
B.E degree
B.E degreeB.E degree
B.E degree
 
ART 135 Poster Project
ART 135 Poster Project ART 135 Poster Project
ART 135 Poster Project
 
Degree
DegreeDegree
Degree
 
Własny biznes
Własny biznesWłasny biznes
Własny biznes
 
dtk copy sept
dtk copy septdtk copy sept
dtk copy sept
 
CV_creative_UK_v2.2
CV_creative_UK_v2.2CV_creative_UK_v2.2
CV_creative_UK_v2.2
 
HiDrive 2015
HiDrive 2015HiDrive 2015
HiDrive 2015
 
kebebe picture
kebebe picturekebebe picture
kebebe picture
 
Caso clinico3 artrosis
Caso clinico3 artrosisCaso clinico3 artrosis
Caso clinico3 artrosis
 
01-Degree (ok)
01-Degree (ok)01-Degree (ok)
01-Degree (ok)
 
Aladdin and the enchanted lamp
Aladdin and the enchanted lampAladdin and the enchanted lamp
Aladdin and the enchanted lamp
 
Actividad
ActividadActividad
Actividad
 
Portif
PortifPortif
Portif
 

Similar a Curso de Shell Script 02/11

Curso de ShellScript - Lm02 shellscript2
Curso de ShellScript - Lm02 shellscript2Curso de ShellScript - Lm02 shellscript2
Curso de ShellScript - Lm02 shellscript2Pessoal
 
Apostila comandos unix
Apostila   comandos unixApostila   comandos unix
Apostila comandos unixgravetim
 
Guia com mais de 500 comandos do linux explicados computeiro da depressão
Guia com mais de 500 comandos do linux explicados   computeiro da depressãoGuia com mais de 500 comandos do linux explicados   computeiro da depressão
Guia com mais de 500 comandos do linux explicados computeiro da depressãoJesser Martins Medeiros
 
SAC - Seismic Analyses Code
SAC - Seismic Analyses CodeSAC - Seismic Analyses Code
SAC - Seismic Analyses CodeGeorge Franca
 
SAC - Seismic Analyses Code
SAC - Seismic Analyses CodeSAC - Seismic Analyses Code
SAC - Seismic Analyses CodeGeorge Franca
 
Sistema Operacional GNU/Linux
Sistema Operacional GNU/LinuxSistema Operacional GNU/Linux
Sistema Operacional GNU/LinuxPedro Neto
 
Sapo sessions linux power tools
Sapo sessions linux power toolsSapo sessions linux power tools
Sapo sessions linux power toolsArmando Reis
 
Curso de ShellScript - Lm06 shellscript6
Curso de ShellScript - Lm06 shellscript6Curso de ShellScript - Lm06 shellscript6
Curso de ShellScript - Lm06 shellscript6Pessoal
 
Comandos Linux
Comandos LinuxComandos Linux
Comandos Linuxlol
 
Comandos básicos linux
Comandos básicos linuxComandos básicos linux
Comandos básicos linuxLuciano Souto
 
Curso de Shell Script 04/11
Curso de Shell Script 04/11Curso de Shell Script 04/11
Curso de Shell Script 04/11Rodrigo Silva
 

Similar a Curso de Shell Script 02/11 (20)

Curso de ShellScript - Lm02 shellscript2
Curso de ShellScript - Lm02 shellscript2Curso de ShellScript - Lm02 shellscript2
Curso de ShellScript - Lm02 shellscript2
 
Comandos Unix
Comandos UnixComandos Unix
Comandos Unix
 
Apostila comandos unix
Apostila   comandos unixApostila   comandos unix
Apostila comandos unix
 
Shell script
Shell script Shell script
Shell script
 
apostila-expressoes-regulares.pdf
apostila-expressoes-regulares.pdfapostila-expressoes-regulares.pdf
apostila-expressoes-regulares.pdf
 
Guia com mais de 500 comandos do linux explicados computeiro da depressão
Guia com mais de 500 comandos do linux explicados   computeiro da depressãoGuia com mais de 500 comandos do linux explicados   computeiro da depressão
Guia com mais de 500 comandos do linux explicados computeiro da depressão
 
SAC - Seismic Analyses Code
SAC - Seismic Analyses CodeSAC - Seismic Analyses Code
SAC - Seismic Analyses Code
 
SAC - Seismic Analyses Code
SAC - Seismic Analyses CodeSAC - Seismic Analyses Code
SAC - Seismic Analyses Code
 
Sistema Operacional GNU/Linux
Sistema Operacional GNU/LinuxSistema Operacional GNU/Linux
Sistema Operacional GNU/Linux
 
Sapo sessions linux power tools
Sapo sessions linux power toolsSapo sessions linux power tools
Sapo sessions linux power tools
 
Aula 10 semana
Aula 10 semanaAula 10 semana
Aula 10 semana
 
Curso de ShellScript - Lm06 shellscript6
Curso de ShellScript - Lm06 shellscript6Curso de ShellScript - Lm06 shellscript6
Curso de ShellScript - Lm06 shellscript6
 
Comandos linux
Comandos linuxComandos linux
Comandos linux
 
Comandos Linux
Comandos LinuxComandos Linux
Comandos Linux
 
Ubuntu
UbuntuUbuntu
Ubuntu
 
Aula 10 semana
Aula 10 semanaAula 10 semana
Aula 10 semana
 
Aula 06 comandos linux
Aula 06   comandos linuxAula 06   comandos linux
Aula 06 comandos linux
 
Aula de Linux
Aula de LinuxAula de Linux
Aula de Linux
 
Comandos básicos linux
Comandos básicos linuxComandos básicos linux
Comandos básicos linux
 
Curso de Shell Script 04/11
Curso de Shell Script 04/11Curso de Shell Script 04/11
Curso de Shell Script 04/11
 

Curso de Shell Script 02/11

  • 1. Papo de Botequim LINUX USER Curso de Shell Script Papo de Botequim - Parte II Nossos personagens voltam à mesa do bar para discutir expressões regulares e linhas que usavam a palavra grep, em todos os arquivos terminados em .sh. colocar a “mão na massa” pela primeira vez, construindo um aplicativo simples Como uso essa extensão para definir meus arquivos com programas em Shell, para catalogar uma coleção de CDs. POR JÚLIO CÉSAR NEVES malandramente, o que fiz foi listar as lin- has dos programas que poderia usar como exemplo do comando grep. G arçom! Traz um “chops” e dois Olha que legal! O grep aceita como “pastel”. O meu amigo hoje não entrada a saída de outro comando, redi- vai beber porque está finalmente recionado por um pipe (isso é muito sendo apresentado a um verdadeiro sis- comum em Shell e é um tremendo tema operacional, e ainda tem muita acelerador da execução de coman- coisa a aprender! dos). Dessa forma, no 3° exemplo, – E então, amigo, tá entendendo o comando who listou as pessoas tudo que te expliquei até agora? “logadas” na mesma máquina que – Entendendo eu tô, mas não vi você (não se esqueça jamais: o nada prático nisso… Linux é multiusuário) e o grep foi – Calma rapaz, o que te falei até usado para verificar se o Carvalho agora serve como base ao que há estava trabalhando ou “coçando”. de vir daqui pra frente. Vamos usar O grep é um comando muito con- essas ferramentas que vimos para hecido, pois é usado com muita fre- montar programas estruturados. Você qüência. O que muitas pessoas não verá porque até na TV já teve pro- sabem é que existem três comandos na grama chamado “O Shell é o Limite”. família grep: grep, egrep e fgrep. A princi- Para começar vamos falar dos coman- pais diferenças entre os 3 são: dos da família grep • grep - Pode ou não usar expressões – Grep? Não conheço nenhum termo em $ grep franklin /etc/passwd regulares simples, porém no caso de inglês com este nome… não usá-las, o fgrep é melhor, por ser – É claro, grep é um acrônimo (sigla) Pesquisando em vários arquivos: mais rápido. para Global Regular Expression Print, • egrep (“e” de extended, estendido) - É que usa expressões regulares para $ grep grep *.sh muito poderoso no uso de expressões pesquisar a ocorrência de cadeias de regulares. Por ser o mais poderoso dos caracteres na entrada definida. Pesquisando na saída de um comando: três, só deve ser usado quando for Por falar em expressões regulares (ou necessária a elaboração de uma regexp), o Aurélio Marinho Jargas es- $ who | grep carvalho expressão regular não aceita pelo grep. creveu dois artigos [1 e 2] imperdíveis • fgrep (“f” de fast, rápido) - Como o para a Revista do Linux sobre esse No 1º exemplo, procurei a palavra nome diz, é o ligeirinho da família, assunto e também publicou um livro [3] franklin em qualquer lugar do arquivo executando o serviço de forma muito pela Editora Novatec. Acho bom você ler /etc/passwd. Se quisesse procurar um veloz (por vezes é cerca de 30% mais esses artigos, eles vão te ajudar no que nome de usuário, isto é, somente no iní- rápido que o grep e 50% mais que o está para vir. cio dos registros desse arquivo, poderia egrep), porém não permite o uso de digitar $ grep ‘^franklin’ /etc/passwd. expressões regulares na pesquisa. Eu fico com grep,você com gripe “E para que servem o circunflexo e os –Agora que você já conhece as difer- Esse negócio de gripe é brincadeira, só apóstrofos?”, você vai me perguntar. Se enças entre os membros da família, me um pretexto para pedir umas caipirinhas. tivesse lido os artigos que mencionei, diga: o que você acha dos três exemplos Eu te falei que o grep procura cadeias de saberia que o circunflexo serve para limi- que eu dei antes das explicações? caracteres dentro de uma entrada defi- tar a pesquisa ao início de cada linha e – Achei que o fgrep resolveria o teu prob- nida, mas o que vem a ser uma “entrada os apóstrofos servem para o Shell não lema mais rapidamente que o grep. definida”? Bem, existem várias formas interpretar esse circunflexo, deixando-o – Perfeito! Tô vendo que você está de definir a entrada do comando grep. passar incólume para o comando grep. atento, entendendo tudo que estou te Veja só. Para pesquisar em um arquivo: No 2º exemplo mandei listar todas as explicando! Vamos ver mais exemplos www.linuxmagazine.com.br Setembro 2004 87
  • 2. LINUX USER Papo de Botequim Quadro 1 - Listando subdiretórios ser explorado). – Péra aí! De onde eu vou receber os $ ls -l | grep ‘^d’ dados dos CDs? drwxr-xr-x 3 root root 4096 Dec 18 2000 doc – Vou mostrar como o programa pode drwxr-xr-x 11 root root 4096 Jul 13 18:58 freeciv receber parâmetros de quem o estiver drwxr-xr-x 3 root root 4096 Oct 17 2000 gimp executando e, em breve, ensinarei a ler drwxr-xr-x 3 root root 4096 Aug 8 2000 gnome os dados da tela ou de um arquivo. drwxr-xr-x 2 root root 4096 Aug 8 2000 idl drwxrwxr-x 14 root root 4096 Jul 13 18:58 locale Passando parâmetros drwxrwxr-x 12 root root 4096 Jan 14 2000 lyx Veja abaixo a estrutura do arquivo con- drwxrwxr-x 3 root root 4096 Jan 17 2000 pixmaps tendo a lista das músicas: drwxr-xr-x 3 root root 4096 Jul 2 20:30 scribus drwxrwxr-x 3 root root 4096 Jan 17 2000 sounds nomedoálbum^intérprete1~nomeU drwxr-xr-x 3 root root 4096 Dec 18 2000 xine damúsica1:...:intérpreten~nomeU drwxr-xr-x 3 root root 4096 Jun 19 2000 xplns damúsican para clarear de vez as diferenças de -l). Os apóstrofos foram usados para o Isto é, o nome do álbum será separado uso entre os membros da família. Shell não “ver” o circunflexo. Vamos ver por um circunflexo do resto do registro, Eu sei que em um arquivo qualquer mais um. Veja na Tabela 1 as quatro formado por diversos grupos compostos existe um texto falando sobre Linux, só primeiras posições possíveis da saída de pelo intérprete de cada música do CD e a não tenho certeza se está escrito com L um ls -l em um arquivo comum (não é música interpretada. Estes grupos são maiúsculo ou minúsculo. Posso fazer diretório, nem link, nem …). separados entre si por dois pontos (:) e, uma busca de duas formas: Para descobrir todos os arquivos exe- internamente, o intérprete será separado cutáveis em um determinado diretório por um til (~) do nome da música. egrep (Linux | linux) arquivo.txt eu poderia fazer: Quero escrever um programa chamado musinc, que incluirá registros no meu ou então: $ ls -la | egrep ‘^-..(x|s)’ arquivo músicas. Passarei cada álbum como parâmetro para o programa: grep [Ll]inux arquivo.txt novamente usamos o circunflexo para limitar a pesquisa ao início de cada $ musinc “álbum^interprete~U No primeiro caso, a expressão regular linha, ou seja, listamos as linhas que musica:interprete~musica:...” complexa (Linux | linux) usa os parênte- começam por um traço (-), seguido de ses para agrupar as opções e a barra ver- qualquer coisa (o ponto), novamente Desta forma, musinc estará recebendo os tical (|) é usada como um “ou” (or, em seguido de qualquer coisa, e por fim um dados de cada álbum como se fosse uma inglês) lógico, isto é, estou procurando x ou um s. Obteríamos o mesmo resul- variável. A única diferença entre um Linux ou linux. tado se usássemos o comando: parâmetro recebido e uma variável é que No segundo, a expressão regular os primeiros recebem nomes numéricos [Ll]inux significa: começado por L ou l $ ls -la | grep ‘^-..[xs]’ (o que quis dizer é que seus nomes são seguido de inux. Como esta é uma formados somente por um algarismo, expressão simples, o grep consegue e além disso, agilizaríamos a pesquisa. isto é, $1, $2, $3, …, $9). Vamos, fazer resolvê-la, por isso é melhor usar a mais alguns testes: segunda forma, já que o egrep tornaria a A “CDteca” pesquisa mais lenta. Vamos começar a desenvolver progra- $ cat teste Outro exemplo. Para listar todos os mas! Creio que a montagem de um #!/bin/bash subdiretórios do diretório corrente, basta banco de dados de músicas é bacana #Teste de passagem de parametros usar o comando $ ls -l | grep ‘^d’. Veja o para efeito didático (e útil nestes tempos echo “1o. parm -> $1” resultado no Quadro 1. de downloads de arquivos MP3 e echo “2o. parm -> $2” No exemplo, o circunflexo (^) serviu queimadores de CDs). Não se esqueça echo “3o. parm -> $3” para limitar a pesquisa à primeira que, da mesma forma que vamos desen- posição da saída do ls longo (parâmetro volver um monte de programas para Agora vamos rodar esse programinha: organizar os seus CDs de música, com Tabela 1 pequenas adaptações você pode fazer o $ teste passando parametros para U mesmo para organizar os CDs de soft- testar Posição Valores possíveis 1ª - ware que vêm com a Linux Magazine e bash: teste: cannot execute 2ª r ou - outros que você compra ou queima, e 3ª w ou - disponibilizar esse banco de software Ops! Esqueci-me de tornar o script exe- 4ª x,s(suid) ou - para todos os que trabalham com você cutável. Vou fazer isso e testar nova- (o Linux é multiusuário, e como tal deve mente o programa: 88 Setembro 2004 www.linuxmagazine.com.br
  • 3. Papo de Botequim LINUX USER $ chmod 755 teste Execute o programa: inclusão de CDs no meu banco chamado $ teste passando parametros para U musicas. O programa é muito simples testar $ teste passando parametros para testar (como tudo em Shell). Veja a Listagem 1. 1o. parm -> passando O programa teste recebeu 4 U O script é simples e funcional; limito- 2o. parm -> parametros parametros me a anexar ao fim do arquivo musicas o 3o. parm -> para 1o. parm -> passando parâmetro recebido. Vamos cadastrar 3 2o. parm -> parametros álbuns para ver se funciona (para não Repare que a palavra testar, que seria o 3o. parm -> para ficar “enchendo lingüiça,” suponho que quarto parâmetro, não foi listada. Isso Para listar todos de uma U em cada CD só existem duas músicas): ocorreu porque o programa teste só lista “tacada” eu faco passando U os três primeiros parâmetros recebidos. parametros para testar $ musinc “album3^Artista5U Vamos executá-lo de outra forma: ~Musica5:Artista6~Musica5” Repare que antes das aspas usei uma $ musinc “album1^Artista1U $ teste “passando parametros” U barra invertida, para escondê-las da ~Musica1:Artista2~Musica2” para testar interpretação do Shell (se não usasse as $ musinc “album 2^Artista3U 1o. parm -> passando parametros contrabarras as aspas não apareceriam). ~Musica3:Artista4~Musica4” 2o. parm -> para Como disse, os parâmetros recebem 3o. parm -> testar números de 1 a 9, mas isso não significa Listando o conteúdo do arquivo musicas: que não posso usar mais de nove As aspas não deixaram o Shell ver o parâmetros. Significa que só posso $ cat musicas espaço em branco entre as duas endereçar nove. Vamos testar isso: album3^Artista5~Musica5:Artista6U primeiras palavras, e elas foram consid- ~Musica6 eradas como um único parâmetro. E $ cat teste album1^Artista1~Musica1:Artista2U falando em passagem de parâmetros, #!/bin/bash ~Musica2 uma dica: veja na Tabela 2 algumas var- # Programa para testar passagem U album2^Artista3~Musica3:Artista4U iáveis especiais. Vamos alterar o pro- de parametros (3a. Versao) ~Musica4 grama teste para usar as novas variáveis: echo O programa $0 recebeu $# U parametros Podia ter ficado melhor. Os álbuns estão $ cat teste echo “11o. parm -> $11” fora de ordem, dificultando a pesquisa. #!/bin/bash shift Vamos alterar nosso script e depois testá- # Programa para testar passagem U echo “2o. parm -> $1” lo novamente. Veja a listagem 2. Sim- de parametros (2a. Versao) shift 2 plesmente inseri uma linha que classifica echo O programa $0 recebeu $# U echo “4o. parm -> $1” o arquivo musicas, redirecionando a parametros saída para ele mesmo (para isso serve a echo “1o. parm -> $1” Execute o programa: opção -o), após cada álbum ser anexado. echo “2o. parm -> $2” echo “3o. parm -> $3” $ teste passando parametros para U $ cat musicas echo Para listar todos de uma U testar album1^Artista1~Musica1:Artista2U ”tacada” eu faco $* O programa teste recebeu 4 U ~Musica2 parametros que são: albu2^Artista3~Musica3:Artista4U Listagem 1: Incluindo CDs 11o. parm -> passando1 ~Musica4 na “CDTeca” 2o. parm -> parametros album3^Artista5~Musica5:Artista6U 4o. parm -> testar ~Musica6 $ cat musinc #!/bin/bash Duas coisas muito interessantes aconte- Oba! Agora o programa está legal e # Cadastra CDs (versao 1) ceram neste script. Para mostrar que os quase funcional. Ficará muito melhor em # nomes dos parâmetros variam de $1 a $9 uma nova versão, que desenvolveremos echo $1 >> musicas digitei echo $11 e o que aconteceu? O após aprender a adquirir os dados da tela Shell interpretou como sendo $1 seguido e formatar a entrada. do algarismo 1 e listou passando1; Listagem 2 O comando shift, cuja sintaxe é shift n, Tabela 2: Variáveis especiais podendo o n assumir qualquer valor $ cat musinc Variável Significado numérico, despreza os n primeiros #!/bin/bash $0 Contém o nome do programa parâmetros, tornando o parâmetro de # Cadastra CDs (versao 2) $# Contém a quantidade de ordem n+1. parâmetros passados # Bem, agora que você já sabe sobre $* Contém o conjunto de todos os echo $1 >> musicas passagem de parâmetros, vamos voltar à parâmetros (muito parecido com $@) sort -o musicas musicas nossa “cdteca” para fazer o script de www.linuxmagazine.com.br Setembro 2004 89
  • 4. LINUX USER Papo de Botequim Ficar listando arquivos com o grep <cadeia de caracteres> U Listagem 5 - musexc comando cat não está com nada, vamos [arq1, arq2, ..., arqn] fazer um programa chamado muslist $ cat musexc para listar um álbum, cujo nome será O grep entendeu que deveria procurar a #!/bin/bash passado como parâmetro. Veja o código cadeia de caracteres album nos arquivos # Exclui CDs (versao 1) na Listagem 3: 2 e musicas. Como o arquivo 2 não # Vamos executá-lo, procurando pelo existe, grep gerou o erro e, por encontrar grep -v “$1” musicas > /tmp/mus$$ album 2. Como já vimos antes, para pas- a palavra album em todos os registros de mv -f /tmp/mus$$ musicas sar a string album 2 é necessário pro- musicas, listou a todos. tegê-la da interpretação do Shell, para É melhor ignorarmos maiúsculas e que ele não a interprete como dois minúsculas na pesquisa. Resolveremos mando. Estamos então prontos para parâmetros. Exemplo: os dois problemas com a Listagem 4. desenvolver o script para remover CDs Nesse caso, usamos a opção -i do grep empenados da sua “CDteca”. Veja o $ muslist “album 2” que, como já vimos, serve para ignorar código da Listagem 5. grep: can’t open 2 maiúsculas e minúsculas, e colocamos o Na primeira linha mandei para musicas: album1^Artista1~Musica1U $1 entre aspas, para que o grep continu- /tmp/mus$$ o arquivo musicas, sem os :Artista2~Musica2 asse a ver a cadeia de caracteres resul- registros que atendessem a consulta feita musicas: album2^Artista3~Musica3U tante da expansão da linha pelo Shell pelo comando grep. Em seguida, movi :Artista4~Musica4 como um único argumento de pesquisa. /tmp/mus$$ por cima do antigo musicas. musicas:album3^Artista5~Musica5U Usei o arquivo /tmp/mus$$ como arqui- :Artista6~Musica6 $ muslist “album 2” vo de trabalho porque, como já havia album2^Artista3~Musica3:Artista4U citado no artigo anterior, o $$ contém o Que lambança! Onde está o erro? Eu tive ~Musica4 PID (identificação do processo) e, dessa o cuidado de colocar o parâmetro pas- forma, cada um que editar o arquivo sado entre aspas para o Shell não o Agora repare que o grep localiza a musicas o fará em um arquivo de tra- dividir em dois! É, mas repare como o cadeia pesquisada em qualquer lugar do balho diferente, evitando colisões. grep está sendo executado: registro; então, da forma que estamos Os programas que fizemos até aqui fazendo, podemos pesquisar por álbum, ainda são muito simples, devido à falta grep $1 musicas por música, por intérprete e mais. de ferramentas que ainda temos. Mas é Quando conhecermos os comandos bom praticar os exemplos dados porque, Mesmo colocando álbum 2 entre aspas, condicionais, montaremos uma nova eu prometo, chegaremos a desenvolver para que fosse encarado como um único versão de muslist que permitirá especi- um sistema bacana para controle dos parâmetro, quando o $1 foi passado pelo ficar por qual campo pesquisar. seus CDs. Na próxima vez que nos Shell para o comando grep, transformou- Ah! Em um dia de verão você foi à encontrarmos, vou te ensinar como fun- se em dois argumentos. Dessa forma, o praia, esqueceu os CDs no carro, aquele cionam os comandos condicionais e conteúdo da linha que o grep executou “solzinho” de 40 graus empenou seu aprimoraremos mais um pouco esses foi o seguinte: disco favorito e agora você precisa de scripts. Por hoje chega! Já falei demais e uma ferramenta para removê-lo do estou de goela seca! Garçom! Mais um grep album 2 musicas banco de dados? Não tem problema, sem colarinho! s vamos desenvolver um script chamado Como a sintaxe do grep é: musexc, para excluir estes CDs. INFORMAÇÕES Antes de desenvolver o “bacalho”, Listagem 3 - muslist quero te apresentar a uma opção bas- [1] http://www.revistadolinux.com.br/ed/003/ tante útil da família de comandos grep. É ferramentas.php3 $ cat muslist a opção -v, que quando usada lista todos [2] http://www.revistadolinux.com.br/ed/007/ #!/bin/bash os registros da entrada, exceto o(s) local- ereg.php3 # Consulta CDs (versao 1) izado(s) pelo comando. Exemplos: [3] http://www.aurelio.net/er/livro/ # grep $1 musicas $ grep -v “album 2” musicas album1^Artista1~Musica1:Artista2U Julio Cezar Neves é SOBRE O AUTOR Analista de Suporte de Listagem 4 ~Musica2 Sistemas desde 1969 e muslist melhorado album3^Artista5~Musica5:Artista6U trabalha com Unix ~Musica6 desde 1980, quando $ cat muslist fez parte da equipe #!/bin/bash Conforme expliquei antes, o grep do que desenvolveu o # Consulta CDs (versao 2) SOX, um sistema exemplo listou todos os registros de # operacional similar ao Unix, produzido musicas exceto o referente a album 2, pela Cobra Computadores. grep -i “$1” musicas porque atendia ao argumento do co- 90 Setembro 2004 www.linuxmagazine.com.br