So erhalten Sie eine Case-Anweisung, die nach Tageszeiten differenziert

So erhalten Sie eine Case-Anweisung, die nach Tageszeiten differenziert

AKTUALISIERT:

Ich versuche, einige Farbänderungen mit meiner Tastatur vorzunehmen, indem ichapexctlje nachdem, wie spät es ist. Aber meine Case-Anweisung macht mir Probleme. Ich möchte die Zeit, zu der das Skript ausgeführt wird, mit verschiedenen möglichen Zeiten vergleichen und die Lichter entsprechend einstellen.

Aber es gibt mir jedes Mal den Standardfall. Dies gibt „Alter, was?“ aus.

Warum funktioniert keiner meiner Fälle?

#!/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

Antwort1

Ich sehe, was mit Ihren Aussagen passiert case. Von derMustervergleichAbschnitt der bashManpage:

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

Für die gesamte Zeit von 10-23 Uhr sucht das Mustervergleichssystem nacheinsder eingeschlossenen Zeichen.

Option 1:

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

1[3])
apexctl ...
;;

Option 2:

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

13)
apexctl ...
;;

Hinweis, der nichts mit der Funktionalität des Gehäuses zu tun hat:

Ihrem 0-4-Stunden apexctl-Befehl ist ein vorangestellt sudo. Ist es das, was Sie meinten?

Antwort2

Sie verstehen die Vorgehensweise caseund [ ]Arbeitsweise völlig falsch. Was Sie brauchen, ist 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 ]macht sowieso keinen Sinn, da 0 kleiner als 3 ist, d. h. dasselbe wie [ "$zed" -le 3 ]alleine.

verwandte Informationen