我的代码比较var与正则表达式有问题。
主要问题是问题在这里
if [[ “$alarm” =~ ^[0-2][0-9]\:[0-5][0-9]$ ]]
这个“如果”永远不会是真的我不知道为什么即使我传递给“$ alarm”值如13:00或08:19它总是假的并且写“无效的时钟格式”。
当我尝试这个^ [0-2] [0-9]:[0-5] [0-9] $在网站上测试正则表达式时它的工作例如我用12:20编译。
我启动脚本whith命令./alarm 11:12 下面是整个代码
#!/bin/bash
masa="`date +%k:%M`"
mp3="$HOME/Desktop/alarm.mp3" #change this
echo "lol";
if [ $# != 1 ]; then
echo "please insert alarm time [24hours format]"
echo "example ./alarm 13:00 [will ring alarm at 1:00pm]"
exit;
fi
alarm=$1
echo "$alarm"
#fix me with better regex >_<
if [[ “$alarm” =~ ^[0-2][0-9]\:[0-5][0-9]$ ]]
then
echo "time now $masa"
echo "alarm set to $alarm"
echo "will play $mp3"
else
echo "invalid clock format"
exit;
fi
while [ $masa != $alarm ];do
masa="`date +%k:%M`" #update time
sleep 1 #dont overload the cpu cycle
done
echo $masa
if [ $masa = $alarm ];then
echo ringggggggg
play $mp3 > /dev/null 2> /dev/null &
fi
exit
答案 0 :(得分:0)
我可以看到你的测试有几个问题。
首先,看起来您可能在变量周围使用了错误的双引号(“
”
,而不是"
)。这些“花哨的引号”正在与你的变量连接,我认为这是导致你的模式无法匹配的原因。您可以在bash的扩展测试中更改它们(即[[
而不是[
),无论如何都不需要引用您的变量,所以我建议完全删除它们。
其次,您的正则表达式目前允许一些无效日期。我建议使用这样的东西:
re='^([01][0-9]|2[0-3]):[0-5][0-9]$'
if [[ $alarm =~ $re ]]
我故意选择使用单独的变量来存储模式,因为这是使用bash regex的最广泛兼容的方式。