bash 设置唤醒闹钟的脚本设置了错误的时间

bash script to set wake alarm sets wrong time

我在启动时为 运行 编写了一个 bash 脚本,并为周一至周五设置了闹钟。周六和周日不需要,所以我修改了脚本以节省那些日子的精力。脚本有效,有点。但是,它总是与第一个 'if' 语句一起使用。电脑每天在指定时间醒来,只在开机时不执行'== Friday'和'== Saturday'选项。如果我 运行 脚本手动“==星期五”和“==星期六”选项被正确筛选。

关于为什么会发生这种情况的任何想法。我担心脚本的可靠性。

#!/bin/bash

# see if waiting for the system to start helps get the correct time
sudo sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm"
sleep 10

nvidia-settings -a [gpu:0]/GPUFanControlState=1
nvidia-settings -a [fan:0]/GPUCurrentFanSpeed=15

day=$(date +%A)
#printf "%s\n" "$day"
#DT=$(date --date='06:19 tomorrow')


if [[ "$day" == "Sunday" || "$day" == "Monday" || "$day" == "Tuesday" || "$day" == "Wednesday" || "$day" == "Thursday" ]]; 
  then
    DTs=$(date --date='06:19:00 tomorrow +22 seconds' +%s)
  fi
if [[ "$day" == "Friday" || "$day" == "Saturday" ]]; 
  then    
    DTs=$(date --date='06:19:00 next Monday' +%s)
  fi

# The RTCWake needs to be set to 0 so that an IO error is not created
sudo sh -c "echo $DTs > /sys/class/rtc/rtc0/wakealarm"
WAKERTC=$(cat /sys/class/rtc/rtc0/wakealarm)
WAKERTC=$(date -d @$WAKERTC)

notify-send "will wake $WAKERTC"
notify-send "NVIDIA Fan set to 15"

仅供参考,额外的 22 秒允许我调试脚本。此外,'echo 0' 语句在脚本的早期移动了,因为我认为启动中的一些延迟可能有助于时钟(它没有)。

编辑已添加 --- 感谢您就 if-then 代码的最佳实践提出建议。他们是我应该看到自己的好渔获物。虽然,脚本仍然行为不端。要么根本不执行 if 语句,生成一条读取 "will wake " 的通知语句,这意味着没有设置警报,要么 Friday/Saturday 查询未被识别并且它仍然在第二天醒来。重要说明:您可能会注意到该脚本与 Nvidia GPU 风扇控制器交织在一起。这每次都执行。此外,如果来自终端的 运行 脚本是完美的,但如果来自启动应用程序的 运行 则只有大约 80% 的时间有效。

试试这个:

if [[ "$day" == "Sunday" || "$day" == "Monday" || "$day" == "Tuesday" || "$day" == "Wednesday" || "$day" == "Thursday" ]]; then
    DTs=$(date --date='06:19:00 tomorrow +22 seconds' +%s)
else
    DTs=$(date --date='06:19:00 next Monday' +%s)
fi

当您可以使用 else

时,第二个 if 似乎是多余的