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.