Definição de variáveis para conter um intervalo de números em um script bash [duplicado]

2

Eu tenho uma declaração de caso para um menu de diálogo, e quero que ela se refira a vários números (um a nove), se algum número de um a nove for selecionado.

Como faço para uma palavra ter vários valores? Agora

: ${EXAMPLE=9}

mas como eu tornaria isso igual a vários números?

Eu já tentei até agora:

: ${EXAMPLE=1,2,3,4,5,6,7}

: ${EXAMPLE=1-9}

: ${EXAMPLE=1 && 2 && 3}

Contexto:

Eu fiz um diálogo de menu que lista todos os arquivos em uma determinada área, e quero fazer um caso como

case $example in
        **1)**  # but not just 1, it should be 1-9

   echo "blah blah" ;;

esac
    
por Peder Skaaravik 09.06.2017 / 20:05

1 resposta

2

Existem algumas coisas que você pode fazer:

  • use o intervalo [1-9]
  • use | para criar uma lista de "ou" valores
  • use curinga:

Exemplo:

bash-4.3$ var=25
bash-4.3$ case $var in 
> [1-9]) echo "1 to 9";; 
> 25|35|45) echo "25 or 25 or 45" ;;
> 5*) echo "starting with 5";;
> esac
25 or 25 or 45

A maiúsculas e minúsculas é principalmente para padrões, portanto, se você quiser fazer uma avaliação aritmética, é melhor usar if com [ , embora possa fazer algo como [1-5][0-9][0-9]) echo "100 to 599" ;; para ver se o item está dentro do intervalo de 100 a 599 (ou seja , var > = 100 & amp; var < = 599). Veja este para mais informações sobre aritmética na declaração de caso do bash.

    
por Sergiy Kolodyazhnyy 09.06.2017 / 22:44