Skip to main content

Como usar condições de teste em um script Bash

Surah Bakarah, AMAZING VIEWS with WORDS tracing, Slow Recitation (Abril 2025)

Surah Bakarah, AMAZING VIEWS with WORDS tracing, Slow Recitation (Abril 2025)
Anonim

O comando de teste pode ser usado na linha de comando do Linux para comparar um elemento com outro, mas é mais comumente usado em scripts de shell BASH como parte de instruções condicionais que controlam a lógica e o fluxo do programa.

Um exemplo básico

Você pode tentar esses comandos simplesmente abrindo uma janela de terminal.

teste 1-eq 2 && echo "sim" || eco "não"

O comando acima pode ser dividido da seguinte forma:

  • teste - Isso significa que você está prestes a realizar uma comparação
  • 1 - O primeiro elemento que você vai comparar
  • -eq - Como você está comparando? Nesse caso, você está testando se um número é igual a outro.
  • 2 - O elemento que você está comparando o primeiro elemento contra
  • && - Execute a seguinte declaração se o resultado for verdadeiro
  • echo "yes" - O comando a ser executado se a comparação retornar true
  • || - Execute a seguinte instrução se o resultado for falso
  • echo "no" - O comando a ser executado se a comparação retornar false

Em essência, o comando está comparando 1 a 2 e se eles coincidirem, a instrução echo "yes" é executada exibindo "yes" e se eles não corresponderem, a instrução echo "no" é executada e exibe "no".

Comparando Números

Se você estiver comparando elementos que analisam como números, você pode usar os seguintes operadores de comparação:

  • -eq - faz o valor 1 igual valor 2
  • -ge - é o valor 1 maior ou igual ao valor 2
  • -gt - é o valor 1 maior que o valor 2
  • -le - é o valor 1 menor ou igual ao valor 2
  • -lt - é o valor 1 menor que o valor 2
  • -ne - faz o valor 1 não igual valor 2

Exemplos

teste 1-eq 2 && echo "sim" || eco "não"

(exibe "não" para a tela porque 1 não é igual a 2)

teste 1 -ge 2 && echo "sim" || eco "não"

(exibe "não" para a tela porque 1 não é maior ou igual a 2)

teste 1 -gt 2 && echo "sim" || eco "não"

(exibe "não" para a tela porque 1 não é maior que 2)

teste 1 -le 2 && echo "sim" || eco "não"

(exibe "sim" para a tela porque 1 é menor ou igual a 2)

teste 1 -lt 2 && echo "sim" || eco "não"

(exibe "sim" para a tela porque 1 é menor ou igual a 2)

teste 1 -ne 2 && echo "sim" || eco "não"

(exibe "sim" para a tela porque 1 não é igual a 2)

Comparando Texto

Se você estiver comparando elementos que analisam como strings, você pode usar os seguintes operadores de comparação:

  • = - a string 1 corresponde à string 2
  • ! = - é string 1 diferente da string 2
  • -n - é o comprimento da string maior que 0
  • -z - é o comprimento da string 0

Exemplos

teste "string1" = "string2" && echo "sim" || eco "não"

(exibe "não" para a tela porque "string1" não é igual a "string2")

teste "string1"! = "string2" && echo "yes" || eco "não"

(exibe "sim" para a tela porque "string1" não é igual a "string2")

teste -n "string1" && echo "yes" || eco "não"

(exibe "sim" para a tela porque "string1" tem um comprimento de string maior que zero)

teste -z "string1" && echo "yes" || eco "não"

(exibe "não" para a tela porque "string1" tem um comprimento de string maior que zero)

Comparando Arquivos

Se você estiver comparando arquivos, poderá usar os seguintes operadores de comparação:

  • -ef - Os arquivos possuem o mesmo número de dispositivos e inode (são o mesmo arquivo)?
  • -nt - É o primeiro arquivo mais novo que o segundo arquivo
  • -ot - É o primeiro arquivo mais antigo que o segundo arquivo
  • -b - O arquivo existe e é especial de bloco
  • -c - O arquivo existe e é especial de caractere
  • -d - O arquivo existe e é um diretório
  • -e - O arquivo existe
  • -f - O arquivo existe e é um arquivo regular
  • -g - O arquivo existe e possui o número do grupo especificado
  • -G - O arquivo existe e é proprietário pelo grupo do usuário
  • -h - O arquivo existe e é um link simbólico
  • -k - O arquivo existe e tem seu conjunto de bits pegajoso
  • -L - O mesmo que -h
  • -O - ​​O arquivo existe você é o dono
  • -p - o arquivo existe e é um pipe nomeado
  • -r - O arquivo existe e é legível
  • -s - O arquivo existe e tem um tamanho maior que zero
  • -S - O arquivo existe e é um soquete
  • -t - O descritor de arquivo é aberto em um terminal
  • -u - O arquivo existe e o bit set-user-id está definido
  • -w - O arquivo existe e é gravável
  • -x - O arquivo existe e é executável

Exemplos

teste / caminho / para / arquivo1 -nt / caminho / para / arquivo2 && echo "sim"

(Se file1 for mais recente que file2, a palavra "yes" será exibida)

teste -e / caminho / para / arquivo1 && echo "sim"

(se file1 existir, a palavra "yes" será exibida)

teste -O / caminho / para / arquivo1 && echo "sim"

(se você possui file1 então a palavra "yes" é exibida ")

Terminologia

  • Bloco especial - O arquivo é um dispositivo de bloco, o que significa que os dados são lidos em blocos de bytes. Estes são geralmente arquivos de dispositivos, como discos rígidos.
  • Caractere especial - O arquivo é acionado imediatamente quando você grava nele e é comumente um dispositivo como uma porta serial

Comparando Múltiplas Condições

Até agora, tudo tem comparado uma coisa à outra, mas e se você quiser comparar duas condições?

Por exemplo, se um animal tiver 4 pernas e for "moo", provavelmente é uma vaca. Simplesmente verificar se há 4 pernas não garante que você tenha uma vaca, mas verificar o som que ela faz certamente não é suficiente.

Para testar as duas condições de uma só vez, use a seguinte instrução:

teste 4-eq 4 -a "moo" = "moo" && echo "é uma vaca" || eco "não é uma vaca"

A parte chave aqui é a -a que significa e .

Existe uma maneira melhor e mais comum de executar o mesmo teste e isso é o seguinte:

teste 4-eq 4 && teste "moo" = "moo" && echo "é uma vaca" || eco "não é uma vaca"

Outro teste que você pode querer fazer é comparar duas instruções e, se for true, gerar uma string. Por exemplo, se você quiser verificar se existe um arquivo chamado "file1.txt" ou se existe um arquivo chamado "file1.doc", use o seguinte comando:

teste -e arquivo1.txt -o -e arquivo1.doc && echo "arquivo1 existe" || echo "file1 não existe"

A parte chave aqui é o -o que significa ou .

Existe uma maneira melhor e mais comum de executar o mesmo teste e isso é o seguinte:

teste -e arquivo1.txt || teste -e file1.doc && echo "file1 exists" || echo "file1 não existe"

Eliminando a palavra-chave de teste

Você não precisa usar a palavra teste para realizar a comparação. Tudo o que você precisa fazer é colocar a declaração entre colchetes da seguinte maneira:

-e file1.txt && echo "file1 exists" || echo "file1 não existe"

O e basicamente significa o mesmo que teste.

Agora você sabe disso, você pode melhorar comparando várias condições da seguinte maneira:

4-eq 4 && "moo" = "moo" && echo "é uma vaca" || eco "não é uma vaca"-e arquivo1.txt || -e file1.doc && echo "file1 exists" || echo "file1 não existe"

Resumo

O comando de teste é mais útil em scripts porque você pode testar o valor de uma variável em relação a outra e controlar o fluxo do programa. Na linha de comando padrão, você pode usá-lo para testar se um arquivo existe ou não.