<Anterior | Conteúdo | Próxima>
Uma versão mais moderna do teste
Versões recentes de bater incluem um comando composto que atua como uma substituição aprimorada para teste. Ele usa a seguinte sintaxe:
[[ expressão ]]
onde, como teste, expressão é uma expressão avaliada como um resultado verdadeiro ou falso. o [[]] comando é muito semelhante a teste (suporta todas as suas expressões), mas
adiciona uma nova expressão de string importante:
string1 =~ regex
que retorna verdadeiro se string1 é correspondido pela expressão regular estendida regex. Isso abre muitas possibilidades para executar tarefas como validação de dados. Em nosso exemplo anterior de expressões inteiras, o script falharia se a constante INT continha qualquer coisa, exceto um inteiro. O script precisa de uma maneira de verificar se a constante contém um número inteiro. Usando [[]] com o =~ operador string expression, poderíamos melhorar o script desta forma:
#! / Bin / bash
# test-integer2: avalia o valor de um inteiro.
INT = -5
if [["$ INT" = ~ ^ -? [0-9] + $]]; então
se [$ INT -eq 0]; então echo "INT é zero."
outro
se [$ INT -lt 0]; então echo "INT é negativo."
outro
echo "INT é positivo."
fi
if [$ ((INT% 2)) -eq 0]; então echo "INT é par."
outro
echo "INT é estranho."
fi
fi
outro
echo "INT não é um número inteiro." > & 2 saída 1
fi
#! / Bin / bash
# test-integer2: avalia o valor de um inteiro.
INT = -5
if [["$ INT" = ~ ^ -? [0-9] + $]]; então
se [$ INT -eq 0]; então echo "INT é zero."
outro
se [$ INT -lt 0]; então echo "INT é negativo."
outro
echo "INT é positivo."
fi
if [$ ((INT% 2)) -eq 0]; então echo "INT é par."
outro
echo "INT é estranho."
fi
fi
outro
echo "INT não é um número inteiro." > & 2 saída 1
fi
Ao aplicar a expressão regular, podemos limitar o valor de INT para apenas strings que começam com um sinal de menos opcional, seguido por um ou mais numerais. Essa expressão também elimina a possibilidade de valores vazios.
Outro recurso adicionado de [[]] é que a == O operador oferece suporte à correspondência de padrões da mesma forma que a expansão do nome do caminho. Por exemplo:
[me @ linuxbox ~] $ FILE = foo.bar
[me @ linuxbox ~] $ FILE = foo.bar
Uma versão mais moderna do teste
[me @ linuxbox ~] $ if [[$ FILE == foo. *]]; então
> echo "$ FILE corresponde ao padrão 'foo. *'"
> fi
foo.bar corresponde ao padrão 'foo. *'
[me @ linuxbox ~] $ if [[$ FILE == foo. *]]; então
> echo "$ FILE corresponde ao padrão 'foo. *'"
> fi
foo.bar corresponde ao padrão 'foo. *'
Isto torna [[]] útil para avaliar nomes de arquivos e caminhos.