Cómo obtener una declaración de caso para diferenciar según las horas del día

Cómo obtener una declaración de caso para diferenciar según las horas del día

ACTUALIZADO:

Estoy intentando hacer algunos cambios de color con mi teclado usandoapexctldependiendo de qué hora sea. Pero la exposición de mi caso me está dando problemas. Quiero comparar el momento en que se ejecuta el script, analizar las distintas posibilidades que podrían existir y configurar las luces en consecuencia.

Pero siempre me da el caso predeterminado. Esto genera "¿Amigo qué?"

¿Por qué ninguno de mis casos funciona?

#!/bin/bash
#Use my keyboard as a clock
#https://github.com/tuxmark5/ApexCtl/issues
#set -vx
zed=`date +"%H"`  
echo $zed

off="000000"
white="FFFFFF"
orange="FF8000"
yellow="FFFF00"
lime="80FF00"
green="00FF00"
teal="00FF80"
turquoise="00FFFF"
sky="0080FF"
blue="0000FF"
purple="7F00FF"
fuschia="FF00FF"
lavender="FF007F"
red="FF0000"


  case $zed in
  0[0-3])
  #purple bluw logo
  apexctl colors -n 551A8B:8 -s 551A8B:8 -e 551A8B:8  -w 551A8B:8 -l 0000FF:8
  ;;
  0[4-9])
  #too early for this
  sudo apexctl colors -n $off:8 -s $off:8 -e $off:8  -w $off:8 -l $off:8
  ;;
  [10-12])
  #still too early for this
  apexctl colors -n $off:8 -s $off:8 -e $off:8  -w $off:8 -l $red:8
  ;;
  [13])
  apexctl colors -n $white:8 -s $white:8 -e $white:8  -w $white:8 -l $white:8
  ;;
  [14])
  apexctl colors -n $orange:8 -s $orange:8 -e $orange:8  -w $orange:8 -l $orange:8
  ;;
  [15])
  apexctl colors -n $yellow:8 -s $yellow:8 -e $yellow:8  -w $yellow:8 -l $yellow:8
  ;;
  [16])
  apexctl colors -n $lime:8 -s $lime:8 -e $lime:8  -w $lime:8 -l $lime:8
  ;;
  [17])
  apexctl colors -n $green:8 -s $green:8 -e $green:8  -w $green:8 -l $green:8
  ;; 
  [18])
  apexctl colors -n $teal:8 -s $teal:8 -e $teal:8  -w $teal:8 -l $teal:8
  ;;
  [19])
  apexctl colors -n $purple:8 -s $purple:8 -e $purple:8  -w $purple:8 -l $purple:8
  ;; 
  [20])
  apexctl colors -n $fuschia:8 -s $fuschia:8 -e $fuschia:8  -w $fuschia:8 -l $fuschia:8
  ;;
  [21-23])  
  apexctl colors -n $red:8 -s $red:8 -e $red:8  -w $red:8 -l $blue:8
  ;;
   *) 
   echo "Dude What?"
  ;;
 esac

Respuesta1

Veo lo que está pasando con tus casedeclaraciones. Desde elLa coincidencia de patronessección de la bashpágina de manual:

[...]  Matches any one of the enclosed characters.

Durante todas las horas de 10 a 23, la combinación de patrones busca cualquierunode los caracteres adjuntos.

Opción 1:

1[0-2])
apexctl ...
;;

1[3])
apexctl ...
;;

Opcion 2:

10|11|12)
apexctl ...
;;

13)
apexctl ...
;;

Nota no relacionada con la funcionalidad del caso:

Su apexctlcomando de 0 a 4 horas va precedido de sudo. ¿Es eso lo que querías decir?

Respuesta2

No entiendes completamente la forma casey [ ]el trabajo. Lo que necesitas es if ... elif ...:

if [ "$zed" -eq 0 ] && [ "$zed" -le 3 ]; then
    : ...
elif [ "$zed" -gt 3 ] && [ "$zed" -lt 12 ]; then
    : ...
elif [ "$zed" -eq 27 ]; then
    : ...
else
    : ...
fi

[ "$zed" -eq 0] && [ "$zed" -le 3 ]De todos modos, no tiene sentido porque 0 es menor que 3, es decir, es lo mismo que [ "$zed" -le 3 ]solo.

información relacionada