前段时间网上有个提醒喝水的表情包很火。

表情包
表情包

闲得无聊用 Shell 实现了一个喝水提醒工具。

喝水小助手 - 演示
喝水小助手 - 演示

代码如下。

#!/bin/bash

#
# 喝水小助手
# 
# 按照中国营养学会膳食指南的要求 —— 男性每天推荐
#  1700 ml 以上的饮水,女性 1500 ml 以上的饮水。
# 

# 定义每次喝水的容量
ML="150 170 170 170 200 170 170 170 170 170"
# 定义每次喝水的时间
TIME="06:30 08:00 10:00 12:00 12:30 14:00 16:00 18:00 20:00 23:24"

# 开始时间循环
while  :; do
    # 获取当前时间
    GET_CURRENT_TIME=$(date "+%H:%M")

    # 获取 "喝水的时间"
    echo "$TIME" |
    # 转换时间的格式
    tr " " "\n" |
    # 每次 读取/处理 一个时间
    while read -r ONE_LINE; do
        # 对比时间
        if [[ "$GET_CURRENT_TIME" == "$ONE_LINE" ]]; then
            # 获取当前对比的时间是在多少行
            GET_NUMBER_OF_ROWS=$(echo "$TIME" | sed "s/ /\n/g" | grep -n "$ONE_LINE" | cut -d ":" -f 1)

            # 获取指定行的喝水容量
            GET_ML=$(echo "$ML" | sed "s/ /\n/g" | sed -n "$GET_NUMBER_OF_ROWS p")

            # 发出通知
            notify-send "喝水时间到啦!现在时间:$ONE_LINE。" "本次你需要喝 $GET_ML ml 的水。" --icon=logo.jpg
        else
            :
        fi
    done

    # 等待 1 min
    sleep 60
done