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 bash
Manpage:
[...] 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 case
und [ ]
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.