Problem with case in script

Asked

Viewed 43 times

1

Someone explains me why my script is only returning the "Error option"?

#!/bin/bash

#==========================#
DATA=$(date +%T) #Vai mostrar a hora com os mins
CORTE=$(date +%k) #Vai mostrar apenas a hora, tipo 18 ou 12 horas, sem os mins
#==========================#

echo $CORTE #Verificar como ficou o resultado da variável CORTE

case $CORTE in #Dependendo da numeração da variável CORTE irá mostrar diferentes mensagens
    [6-11]) 
        echo "Bom dia!"
        ;;
    [12-17])
        echo "Boa tarde!"
        ;;
    [18-23])
        echo "Boa noite!"
        ;;
    [0-5])
        echo "Boa noite!"
        ;;
    *)
        echo "Error"
        ;;
esac

echo "Horário: $DATA" #Para finalizar irá mostrar as horas com os mins

1 answer

1


As I recall the case does not recognize ranges, try so:

if ((6<=$CORTE && $CORTE<=11)); then
    echo "Bom dia!"
elif ((12<=$CORTE && $CORTE<=17)); then
    echo "Boa tarde!"
elif ((18<=$CORTE && $CORTE<=23)); then
    echo "Boa noite!"
elif ((0<=$CORTE && $CORTE<=5)); then
    echo "Boa madruga! :-)"
else 
    echo "Error"    
fi    

If you are required to use the case I guess you’ll have to do with or, a job, something like:

case $CORTE in
    6|7|8|9|10|11) echo 'Bom dia!';;
    12|13|14|15|16|17) echo 'Boa tarde!'
    # ....
esac
  • 1

    I used the pipe that even you didn’t recommend and it worked, thank you.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.