前段時間網上有個提醒喝水的表情包很火。

表情包
表情包

閒得無聊用 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