Como inserir a condição para verificar 0 ou mais de 0 no caso

2

Estou tentando usar maiúsculas e minúsculas para executar essa função

if [[ $input -gt 0 || $input -eq 0 ]];

É possível colocar no caso de testar a entrada para maior que 0 ou igual a 0, ou até mesmo 0 e menor que 0, no caso.

    
por Zac 15.01.2015 / 10:23

4 respostas

0

Se apenas números inteiros precisarem ser manipulados e -0 não precisar ser manipulado corretamente, os seguintes trabalhos:

case "$input" in
''|*[!0-9-]*|[0-9-]*-*)
  echo "invalid input"      
  ;;
[0-9]*)
  echo "input >= 0"
  ;;
-[1-9]*)
 echo "input < 0"
 ;;
*)
 echo "invalid input"
 ;;
esac

Mas geralmente é melhor usar as construções if .. then .. elif ... then .. else .. fi para distinção de casos com expressões mais complicadas do que case com correspondência de padrões.

    
por 15.01.2015 / 10:42
2

Este exemplo de script sh valida que uma variável é um inteiro.

#!/bin/sh

num=$1

if [ $num -eq $num ] 2> /dev/null
then
    case 1 in
        $(($num < 0))     ) echo $num is negative.;;
        $(($num <= 100))  ) echo $num is between 0 and 100.;;
        $(($num <= 1000)) ) echo $num is between 100 and 1000.;;
        *                 ) echo $num is greater than 1000.;;
    esac
else
    echo $num is not a number.
fi

Verificamos que a variável é um número usando o operador -eq . Precisamos suprimir sua saída para stderr caso não seja um número.

Se a variável contiver um inteiro, o case avaliará os intervalos no formulário apresentado. As expressões $(( some comparison )) serão avaliadas como "true" (1) ou "false" (0); Dessa forma, você pode testar qualquer lista de intervalos.

    
por 14.10.2017 / 02:59
0
[ "$input" -gt -1 ] || exit

... ou ...

case ${input:?NULL} in 
(?*[!0-9]*|[!-0-9]*|[!0-9]) ! : ;;
(-*[!0]*)  echo \<0 ;;
(*[!0]*)   echo \>1 ;;
(0*)       echo 0   ;;
esac 
    
por 15.01.2015 / 10:43
0
case $([[ $input =~ ^-?[0-9]+$ ]] && [[ $input -gt 0 || $input -eq 0 ]] ; echo $?) in
0)
        echo "good"
        ;;
1)
        echo "bad"
        ;;
*)
        echo "weird"
        ;;
esac

Se você não gosta da complexidade dentro do case, pelo menos a correspondência regex funciona bem e simples.

    
por 15.01.2015 / 15:15

Tags