De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Programação Shell - FISL

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 16 de Junho de 2003

Esta dica eu peguei na palestra do Júlio Cezar Neves, no IV Fórum Internacional de Software Livre, em Porto Alegre. O Júlio é o autor do excelente livro Linux: Programação Shell. Eu comprei o livro dele, a 2ª edição, no ano 2001 e carrego para todo lado. O livro está quase se desmanchando de tão manuseado, mas eu sempre descubro coisas interessantes nele. O livro já está na 3ª edição e mais informações sobre ele podem ser encontradas em http://www.brasport.com.br/livro.asp?Cod=85-7452-118-3

A palestra do Júlio foi sensacional. O fantástico é que o livro transpira o mesmo bom humor e alegria do seu autor.

Antes da dica, um alerta, eu copiei a idéia principal da dica da palestra do Júlio e coloquei algumas coisas da minha cabeça. Se houver algum erro aqui o culpado sou eu e não o Júlio.

Dado o alerta, vamos à dica:

A programação shell tem alguns recursos bem interessantes. Cada comando executado gera um código de retorno, indicando se o comando foi bem sucedido ou se houve algum problema.

Vejamos alguns exemplos:

  % cd dir
  bash: cd: dir: Arquivo ou diretório não encontrado
  % echo $?
  1
  % mkdir dir
  % cd dir
  % echo $?
  0

O código de retorno de um comando executado em bash fica armazenado na variável $?.

Eu tentei ir para o diretório dir, mas como dir não existe, o código de retorno da operação deu 1 (falso). Em seguida criei o diretório e fui para lá. Desta vez deu certo e o código de retorno foi 0 (verdadeiro).

Vejam que interessante, na programação shell, eu posso fazer o teste dentro de uma construção de laço ou condicional, como um if:

  #!/bin/bash
  
  if cd dir
  then
  	touch a b c
  	ls -l
          echo estou em dir
  else
          mkdir dir
          cd dir
  	touch a b c
  	ls -l
  fi

O comando cd dir faz parte da condição de teste do if. Se deu certo, vou para dir, se não funcionou, crio o diretório, vou para lá ("mkdir dir" e "cd dir").

Vamos fazer um teste real:

  % cddir.sh
  ./cddir.sh: line 3: cd: dir: Arquivo ou diretório não encontrado
  total 0
  -rw-rw-r--    1 queiroz  queiroz         0 Jun 13 12:38 a
  -rw-rw-r--    1 queiroz  queiroz         0 Jun 13 12:38 b
  -rw-rw-r--    1 queiroz  queiroz         0 Jun 13 12:38 c

O diretório dir não existia, daí a mensagem de erro. A shell script executou o else, criou o diretório dir, criou os arquivos a, b, c, e em seguida emitiu o comando ls.

Para não receber mensagens de erro eu posso redirecionar estas saídas para /dev/null:

  if cd dir 2> /dev/null

Este foi apenas um exemplo extremamente útil de um recurso de shell scripts. Entendendo-se o conceito o número de aplicações possíveis é enorme.

Eu utilizei a shell bash, em um sistema Conectiva Linux versão 9.0.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Rubens Queiroz de Almeida