更新:
我正在尝试使用键盘进行一些颜色更改顶点控制取决于现在是什么时间。但我的案件陈述给我带来了麻烦。我想将脚本运行的时间 $zed 与它可能出现的各种可能性进行比较,并相应地设置灯光。
但它每次都会给我默认情况。这输出“伙计什么?”
为什么我的任何一个案例都不起作用?
#!/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
答案1
我明白你的陈述发生了什么case
。来自模式匹配手册页的部分bash
:
[...] Matches any one of the enclosed characters.
对于从 10 点到 23 点的所有时间,模式匹配正在寻找任何一所包含的字符。
选项1:
1[0-2])
apexctl ...
;;
1[3])
apexctl ...
;;
选项2:
10|11|12)
apexctl ...
;;
13)
apexctl ...
;;
与案例功能无关的注释:
您的 0-4 小时apexctl
命令前面带有sudo
.这是你的意思吗?
答案2
你完全误解了方式case
和[ ]
工作。你需要的是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 ]
无论如何没有意义,因为 0 小于 3,即它与[ "$zed" -le 3 ]
单独的相同。