Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Aprenda inglês de uma vez por todas

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Formas de if

Colaboração: Júlio Neves

Data de Publicação: 01 de Julho de 2003

O Júlio Cezar, autor do melhor livro de programação shell que conheço :-) me enviou alguns comentários a respeito de uma dica que escrevi com base em uma palestra dele que assisti no IV Fórum Internacional de Software Livre, em Porto Alegre.

O livro de Programação Shell do Júlio pode ser encontrado em http://www.brasport.com.br/livro.asp?Cod=85-7452-118-3

Gostaria de agradecer ao Júlio por compartilhar seus grandes conhecimentos e seu eterno bom humor conosco :-)

A seguir, a mensagem do Júlio:


Formas de if

Júlio Cezar Neves

Como eu havia te prometido ai vai uma série de formas de executar a mesma tarefa:

- Forma 1 -

  #!/bin/bash
  if  cd dir 2> /dev/null
  then
      >a; >b; >c
      ls -l
  else
      mkdir dir
      cd dir
      >a; >b; >c
      ls -l
  fi
  pwd

Observações da Forma 1:

Neste exemplo, tirei partido da característica do comando if que diferentemente dos ifs das linguagens tradicionais não testa uma condição, mas sim a instrução a ele associada, isto é, caso o cd seja bem sucedido (e o será se já existir o diretório dir), a seqüência do programa será pelo then, caso contrário pelo else.

Repare que neste script não usei o touch, usei o redirecionamento da saída padrão (>) para criar os arquivos (a, b e c) sem onerar o kernel, ganhando na execução. O ponto-e-vírgula serve para colocar mais de um comando na mesma linha.

O pwd ao final foi colocado para mostrar que o ls foi feito de dentro do diretório dir, pois qdo termina a execução do script (que estava sendo executado em um sub-shell) vc estará novamente no diretório do shell pai. Se vc executar somente do if ao fi no prompt de comando, ele permanecerá em dir pq não foi criado um sub-shell.

- Forma 2 -

  #!/bin/bash
  if  test -d dir
  then
      >a; >b; >c
      ls -l
  else
      mkdir dir
      cd dir
      >a; >b; >c
      ls -l
  fi
  pwd

Observações da Forma 2:

Neste caso, utilizei o cmd test que serve para testar condições. Além das condições tradicionais (maior, menor, igual, diferente, maior-ou-igual, ...) este cmd também possui diversas opções para testar arquivos e diretórios (neste caso, a opção -d foi usada para verificar se havia um diretório dir definido).

Observe que o if continua testando a execução de uma instrução, no caso o test.

Como esta construção é muito feia e xquisita, foi implementado um alias para o cmd test, que consiste em colocar o escopo da instrução entre um par de colchetes, embelezando e tornando a leitura mais fácil. Assim sendo, o script abaixo é exatamente igual ao anterior, e por isso não será chamado de forma 3.

  #!/bin/bash
  if  [ -d dir ]
  then
      >a; >b; >c
      ls -l
  else
      mkdir dir
      cd dir
      >a; >b; >c
      ls -l
  fi
  pwd
  • Forma 3 -
      #!/bin/bash
      cd dir 2> /dev/null ||
      {
          mkdir dir
          cd dir
      }
      >a; >b; >c
      ls -l
      pwd
    

    ==Observações da Forma 3:==

    Neste caso uma construção maluca! Vejam só a criatividade que o shell permite! O conector || significa um ou lógico (o e lógico é &&), então como sabemos que verdadeiro ou qualquer coisa (falso, verdadeiro) resultará em verdadeiro, a otimização do shell qdo encontra verdadeiro, não executa o que segue o ou. Ao contrário, se o primeiro membro for falso o segundo será executado. Desta forma, caso não haja o diretório dir (o cd dir resultará falso), o conector || fará com que o bloco de programa entre as chaves ({}) seja executado.

Veja a relação completa dos artigos de Júlio Neves

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.99/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1254 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

Guia Manga Universo