Teste se o número do intervalo 0, infinito

0

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.

    
por xpukm 21.11.2013 / 17:25

2 respostas

1

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
    
por 21.11.2013 / 21:09
2

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.

    
por 21.11.2013 / 17:28

Tags