Com qualquer shell parecido com Bourne (ou seja, voltando desde os anos 70):
case $2 in
"" | *[!0-9]*) echo >&2 not OK; exit 1;;
*) echo OK;;
esac
Eu tenho um problema
If [[ * ]]
then
continue
else
exit 1
fi
Eu quero testar se o argumento do meu switch (por exemplo, -d 3
) é um número inteiro decimal positivo válido (uma sequência de um ou mais dos caracteres ASCII de 0
a 9
). Depois de -d
, pode haver apenas um número [0,infinity)
. Tudo o mais é ruim. Eu não sei o que colocar em vez de *
.
Você pode me ajudar?
Argumento após -d
está em $2
position.
De sua pergunta e comentários, você precisa de $2
para ser um número inteiro não negativo:
if [[ "$2" =~ ^[0-9]+$ ]]
then
...
Note também que if
é escrito com um i
minúsculo.
Se a sua versão do Bash não suporta expressões regulares (< 3.x), você pode usar grep
para fazer o trabalho pesado para você:
if printf "%s\n" "$2" | grep -qE '^[0-9]+$'
then
...
mas veja o comentário de Stephane para uma possível limitação desta abordagem.