Como você faz instruções de caso com intervalos

4

Eu devo:

Faça uma declaração de caso que mostrará a nota a após a entrada. Sem loop ou condicional.

  • A=90-100, B=80-89, C=70-79, D=60-69, F=0-59

Isso é o que eu tenho até agora:

    echo -n "What is your test score? (in percentage): "
    read percentage 

    case $name in 
    9?) echo "A" ;; 
    8?) echo "B" ;;
    7?) echo "C" ;;
    6?) echo "D" ;;
    5?) echo "F" ;;
    4?) echo "F" ;;
    3?) echo "F" ;;
    2?) echo "F" ;;
    1?) echo "F" ;;
    [0-9]) echo "F" ;;
    *) echo "Please enter another number" 
              read percentage 
    ;;
    esac 

Como você acabou de fazer uma declaração com os intervalos (ex. 59-0)?

    
por musicstrings 21.11.2014 / 21:33

2 respostas

1

Eu faria isso, deveria satisfazer os requisitos.

#!/bin/bash

echo -n "What is your test score? "
read score 

case $score in 
    100) echo "A" ;;
    9[0-9]) echo "A" ;; 
    8[0-9]) echo "B" ;;
    7[0-9]) echo "C" ;;
    6[0-9]) echo "D" ;;
    *) echo "F" ;;
esac

Inicialmente usei 9 [0-9] | 100), mas acho que isso viola a regra sobre condicionais.

Ele retornará um F se você tentar inserir 101 ou qualquer outro valor "fora do intervalo". Eu fiz isso assumindo que isso nunca acontecerá.

    
por 21.11.2014 / 22:21
1

Isso também funcionará -

echo -n "What is your test score? (in percentage): "
read per 

case $per in 
([9][0-9]|100) echo "A" ;; 
([8][0-9]) echo "B" ;;
([7][0-9]) echo "C" ;;
([6][0-9]) echo "D" ;;
[0-9]|[1-5][0-9]|59) echo "F" ;;
*) echo "Please enter another number" 
read percentage;;
esac
    
por 27.10.2016 / 11:36