Welcome to Our Website

Bash Scripting Tutorial-5. If Statements

If Statements!decisões, decisões.

introdução

Bash se as declarações forem muito úteis. Nesta secção do nosso Tutorial de Scripting da Bash, irá aprender as formas que poderá usar se as declarações nos seus scripts da Bash ajudarem a automatizar as tarefas.

If statements (and, closely related, case statements) allow us to make decisions in our Bash scripts. Eles nos permitem decidir se devemos ou não executar um pedaço de código baseado em condições que podemos definir., If statements, combined with loops (which we’ll look at the next section) allow us to make much more complex scripts which may solve larger tasks.

Como o que vimos em seções anteriores, sua sintaxe é muito específica para ficar em cima de todos os pequenos detalhes.

Basic If Statements

a basic if statement effectively says, if a particular test is true, then perform a given set of actions. Se não for verdade, então não execute essas ações., Se seguir o formato abaixo:

se
então
<comandos>
fi gratuito

Qualquer coisa entre em seguida, e fi (se para trás) será executado somente se o teste (entre colchetes) é verdadeira.

vamos olhar para um exemplo simples:

if_example.sh

  1. #!/bin/bash
  2. # basic if statement
  3. if
  4. então
  5. echo hey that\’s a large number.,
  6. pwd
  7. fi
  8. date

Let’s break it down:

  • Linha 4 – Vamos ver se o argumento da primeira linha de comando é superior a 100
  • linha 6 e 7 – só será executado se o teste na Linha 4 for verdadeiro. Pode ter aqui todos os comandos que quiser.
  • linha 6-a barra invertida ( \ ) na frente da citação única ( ‘ ) é necessária, uma vez que a citação única tem um significado especial para a bash e não queremos esse significado especial. O backslash escapa do significado especial para torná-lo uma simples citação normal novamente.,
  • linha 8-fi assinala o fim da instrução if. Todos os comandos depois disso serão executados como normal.
  • linha 10-porque este comando está fora da instrução if será executado independentemente do resultado da instrução if.
  1. . /if_example.sh 5 de Fevereiro 9: 06: 30 2021
  2. . / if_example.sh é um grande número.
  3. /home/ryan/bin
  4. Fri 5 Feb 9:06:30 2021

é sempre uma boa prática testar os seus programas com entrada que cobre os diferentes cenários possíveis.,

teste

os parêntesis rectos ( ) na declaração if acima são de facto uma referência ao teste de comando. Isto significa que todos os operadores que o teste permite podem ser usados aqui também. Veja a página do homem para testar para ver todos os operadores possíveis (existem alguns), mas alguns dos mais comuns estão listados abaixo.

Operador Descrição
! Expressão a expressão é falsa.
-n STRING o comprimento da STRING é maior que zero.,
-Z STRING o lengh da STRING é zero (ou seja, está vazio).
STRING1 = STRING2 STRING1 é igual a STRING2
STRING1 != STRING2 STRING1 é igual a STRING2
INTEGER1 -eq INTEGER2 INTEGER1 é numericamente igual a INTEGER2
INTEGER1 -gt INTEGER2 INTEGER1 é numericamente maior que INTEGER2
INTEGER1 -lt INTEGER2 INTEGER1 é numericamente menor do que INTEGER2
-d ARQUIVO o ARQUIVO existe e é um diretório.,
-o ficheiro existe.
-o ficheiro existe e a permissão de leitura é concedida.
-s FILE FILE exists and it’S S S S S S S S S S size is greater than zero (ie. não está vazio).
-o ficheiro existe e a autorização de escrita é concedida.
-X ficheiro ficheiro existe e a permissão de execução é concedida.

a few points to note:

  • = is slightly different to-eq. irá retornar false as = faz uma comparação de string (ie., caractere para caractere o mesmo) enquanto -eq faz um significado de comparação numérica irá retornar verdadeiro.
  • Quando nos referimos ao arquivo acima estamos realmente significando um caminho. Lembre-se que um caminho pode ser absoluto ou relativo e pode se referir a um arquivo ou diretório.
  • Porque é apenas uma referência ao teste de comando que podemos experimentar e dificuldade atirar com teste na linha de comando para ter certeza que a nossa compreensão do seu comportamento é correta.
  1. test 001 = 1
  2. echo $?teste 001-EQ 1
  3. echo $?,touch myfile
  4. test-s myfile echo $?

  5. 1
  6. ls /etc > myfile
  7. teste -s myfile
  8. echo $?
  9. 0

vamos decompô – lo:

  • linha 1-realizar uma comparação baseada em string. O teste não imprime o resultado por isso, em vez disso, verificamos o estado de saída que é o que vamos fazer na próxima linha.
  • Linha 2-a variável $? mantém o estado de saída do comando de execução anterior (neste caso, teste). 0 significa verdadeiro (ou sucesso). 1 = falso (ou falha).,
  • Linha 4-desta vez estamos realizando uma comparação numérica.
  • linha 7-crie um novo ficheiro em branco myfile (assumindo que o meu ficheiro já não existe).linha 8-o tamanho do meu ficheiro é superior a zero?
  • linha 11-redirecione algum conteúdo para o myfile para que o seu tamanho seja maior que zero.
  • linha 12 – testar novamente o tamanho do meu ficheiro. Desta vez é verdade.

Indenting

irá notar que na declaração if acima indentámos os comandos que foram executados se a declaração fosse verdadeira., Isto é referido como indenting e é uma parte importante da escrita de código bom e limpo (em qualquer língua, não apenas scripts Bash). O objectivo é melhorar a legibilidade e tornar mais difícil para nós cometermos erros simples e tolos. Não há nenhuma regra sobre indentar na Bash, então você pode indentar ou não indentar como quiser e seus scripts ainda correrão exatamente o mesmo. Eu recomendaria muito que você faça indentar o seu código no entanto (especialmente como seus scripts ficam maiores) caso contrário você vai achar cada vez mais difícil ver a estrutura em seus scripts.,

aninhado se afirmações

falando de indentação. Aqui está um exemplo perfeito de quando torna a vida mais fácil para você. Você pode ter tantas declarações se necessário dentro do seu script. Também é possível ter uma declaração if dentro de outra declaração if. Por exemplo, podemos querer analisar um número dado na linha de comandos assim:

vamos decompô – lo:

  • Linha 4-Execute o seguinte, apenas se o primeiro argumento da linha de comandos for superior a 100.
  • linha 8-Esta é uma variação ligeira na instrução if., Se quisermos verificar uma expressão, então podemos usar os parênteses duplos, assim como fizemos para variáveis.
  • linha 10 – só é executado se ambas as afirmações forem verdadeiras.yo dawg, eu Rebento-te como se tivesses declarações, por isso ponho uma declaração if dentro da tua declaração if.

    Xzibit

    (Xzibit na verdade não disse isso, mas eu tenho certeza que ele teria dito, se ele hospedasse Pimp My Bash Script.,)

    você pode aninhar quantas afirmações quiser, mas como regra geral se você precisar aninhar mais de 3 níveis de profundidade você provavelmente deve ter uma idéia sobre reorganizar sua lógica.

    se mais

    por vezes queremos realizar um certo conjunto de acções se uma declaração for verdadeira, e outro conjunto de acções se for falsa. Podemos acomodar isso com o outro mecanismo.,

    se
    então
    <comandos>
    else
    <outros comandos>
    fi gratuito

    Agora podemos facilmente lidos de um arquivo se ele é fornecido como um argumento de linha de comando, mais lidos a partir do STDIN.

    else.sh

    1. #!/bin/bash
    2. # else exemplo
    3. se
    4. depois
    5. nl $1
    6. else
    7. nl /dev/stdin
    8. fi gratuito

    Se Elif Else

    Às vezes, podemos ter uma série de condições que podem levar a caminhos diferentes.,

    se
    então
    <comandos>
    elif
    então
    <diferentes comandos>
    else
    <outros comandos>
    fi gratuito

    Por exemplo, pode ser o caso de que se você tem 18 ou mais, você pode ir para a festa. Se não estiver, mas tem uma carta dos seus pais, pode ir, mas deve voltar antes da meia-noite. Caso contrário, não podes ir.pode ter os ramos elif que quiser. O último é também opcional.,

    Operações booleanas

    às vezes só queremos fazer algo se várias condições forem cumpridas. Outras vezes gostaríamos de realizar a ação se uma de várias condições é cumprida. Podemos acomodá-los com operadores booleanos.

    • e &&
    • ou – ||

    Por exemplo, talvez nós só deseja executar uma operação se o arquivo é lido e que tem um tamanho maior que zero.

    and.sh

    1. #!,/bin/bash
    2. # e exemplo
    3. se &&
    4. depois
    5. echo Este arquivo é útil.
    6. fi

    talvez gostássemos de realizar algo ligeiramente diferente se o Utilizador for bob ou andy.

    or.sh

    1. #!/bin/bash
    2. # or example
    3. if | //li>
    4. then
    5. ls-alh else lsls

    6. fi

    Case Statements

    às vezes podemos desejar tomar caminhos diferentes com base numa variável correspondente a uma série de padrões., Poderíamos usar uma série de declarações if e elif, mas que em breve se tornariam impensáveis. Felizmente, há uma declaração de caso que pode tornar as coisas mais limpas., It’s a little hard to explain so here are some examples to illustrate:

    case <variable> in
    <pattern 1>)
    <commands>
    ;;
    <pattern 2>)
    <other commands>
    ;;
    esac

    Here is a basic example:

    case.sh

    1. #!,/bin/bash
    2. # exemplo de caso
    3. case $1
    4. iniciar
    5. echo inicial
    6. ;;
    7. stop)
    8. echo stoping
    9. ;;
    10. reiniciar)
    11. echo reiniciar
    12. ;;
    13. *
    14. echo don\’t saber
    15. ;;
    16. esac

    Vamos acabar com isso:

    • Linha 4 – Esta linha começa a casemechanism.
    • Linha 5-Se $1 for igual a ‘start’, então execute as ações subsequentes. o) significa o fim do padrão.,
    • linha 7-identificamos o fim deste conjunto de afirmações com um ponto-e-vírgula duplo ( ;; ). Seguir este é o próximo caso a considerar.
    • linha 14-lembre-se que o teste para cada caso é um padrão. O * representa qualquer número de qualquer personagem. Se nenhum dos outros casos coincidir, é essencialmente um senão. Não é necessário, mas é frequentemente utilizado.
    • Linha 17-esac é caso para trás e indica que estamos no final da declaração de caso. Quaisquer outros depoimentos serão executados normalmente.
    1. ./case.sh início
    2. iniciar
    3. .,/case.sh reinicie
    4. reiniciar
    5. ./case.sh blá
    6. não sei

    Agora vamos olhar um pouco mais complexa exemplo, onde os padrões são usados um pouco mais.

    resumo

    se executar um conjunto de comandos se um teste for verdadeiro. caso contrário, se o teste não for verdadeiro, então execute um conjunto diferente de comandos. elif se o teste anterior voltou falso, então tente este. && execute o e operação. / / Executar a operação or. case escolha um conjunto de comandos a executar, dependendo de uma string que corresponda a um padrão em particular.,
    Indenting Indenting torna o seu código muito mais fácil de ler. Torna-se cada vez mais importante à medida que os roteiros da Bash ficam mais longos. Planejando agora que seus scripts estão ficando um pouco mais complexos você provavelmente vai querer gastar um pouco de tempo pensando sobre como você estruturá-los antes de mergulhar.

    actividades

    Agora vamos tomar algumas decisões.

    • crie um programa Bash que tomará 2 números como argumentos da linha de comandos. Ele vai imprimir para a tela o maior dos dois números.,
    • crie um script Bash que irá aceitar um ficheiro como argumento da linha de comandos e analisá-lo de certas formas. exemplo. poderá verificar se o ficheiro é executável ou gravável. Você deve imprimir uma determinada mensagem se verdadeiro e outro se falso.
    • crie um script Bash que irá imprimir uma mensagem com base no dia da semana que é (eg. “Feliz Dia de núpcias” para o dia de núpcias, “TGIF” para sexta-feira, etc.).

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *