Para fazer testes, você normalmente usa o operador [ou . é um sinônimo para o comando (não faz parte do Bash especificamente)[[[test
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
$ man test
[...]
INTEGER1 -eq INTEGER2
INTEGER1 is equal to INTEGER2
INTEGER1 -ge INTEGER2
INTEGER1 is greater than or equal to INTEGER2
[...]
Então parece que você pode escrever (não esqueça os espaços - [é apenas um programa embutido, então mantenha seus argumentos separados)
if [ "$var" -eq 0 ]; then
echo "Zero"
elif [ "$var" -gt 0 ]; then
echo "Positive"
fi
Observe que se $varnão for um número inteiro, isso resultará em um erro. Estamos assumindo que $varjá é algum número inteiro.
Se você não tem certeza de que $varé um número inteiro, não conheço um ótimo teste, então aqui está um código usando expressões regulares:
if [[ "$var" =~ ^[1-9][0-9]+$ ]]; then
echo "Positive"
elif [[ "$var" = 0 ]]; then
echo "Zero"
else
echo "Other"
fi
O idioma comum para isso é verificar se o valor da variável consiste em nada além de números. Com shells bash mais recentes, você pode usar =~e uma expressão regular:
zero_or_positive_integer(){
for i in "$@"; do
if [[ "$i" =~ ^[0-9]+$ ]]; then
echo "YES $i is either 0 or a positive integer"
else
echo "NO $i is neither 0 nor a positive integer"
fi
done
}
O que resulta em:
$ zero_or_positive_integer foo -2 1.5 0 12
NO foo is neither 0 nor a positive integer
NO -2 is neither 0 nor a positive integer
NO 1.5 is neither 0 nor a positive integer
YES 0 is either 0 or a positive integer
YES 12 is either 0 or a positive integer
O printfBash interno lerá uma string e verificará se ela pode ser convertida com sucesso conforme especificado pela string de formato. Você pode verificar o status "${?}", usar -vpara colocar o valor em uma variável temporária e descartar a mensagem de erro com 2>/dev/null.
Para fazer testes, você normalmente usa o operador
[
ou . é um sinônimo para o comando (não faz parte do Bash especificamente)[[
[
test
Então parece que você pode escrever (não esqueça os espaços -
[
é apenas um programa embutido, então mantenha seus argumentos separados)Observe que se
$var
não for um número inteiro, isso resultará em um erro. Estamos assumindo que$var
já é algum número inteiro.Se você não tem certeza de que
$var
é um número inteiro, não conheço um ótimo teste, então aqui está um código usando expressões regulares:O idioma comum para isso é verificar se o valor da variável consiste em nada além de números. Com shells bash mais recentes, você pode usar
=~
e uma expressão regular:O que resulta em:
O
printf
Bash interno lerá uma string e verificará se ela pode ser convertida com sucesso conforme especificado pela string de formato. Você pode verificar o status "${?}", usar-v
para colocar o valor em uma variável temporária e descartar a mensagem de erro com2>/dev/null
.