1 2 3

摸鱼侠极客版

老板:退退退

GitHub项目地址:moyu-bash

1. 缘起

最近刷到一个微信小程序,叫 “摸鱼侠”,它长这样:

nature system

这里面有个栏目叫 “今日已摸到”,还挺有意思的,它会计算今日截至当前为止挣到的工资。

我寻思这小程序颜色太过艳丽,容易被老板抓包,便计上心来,打算写个 bash 版摸鱼侠。和生产环境融为一体,纯键盘操控,老板来了一个 ctrl c 便能毁尸灭迹,大大滴方便。

2. 出生

这要实现起来也不难,只要把 (工作秒数 - 休息秒数) * 每秒工资 就好嘛。

我纯纯的 bash 新手,不对之处大家批评。

# Author: [email protected]

work_start=10:00:00    # 上班时间
lunch_start=12:00:00    # 午饭开始
lunch_end=13:00:00    # 午饭结束
dinner_start=18:00:00    # 晚饭开始
dinner_end=19:00:00    # 晚饭结束
work_end=20:00:00    # 下班时间
salary=40000    # 月薪
day=22    # 每月工作天数


CURRENT_TIME=$(date +"%T")
EMOJI_ARRAY=("(・▽ < )★" "─=≡Σ((( つ•̀ 3 •́)つ" "┗|`O′|┛" "_(┐「ε:)_" "ヽ( ˘ω˘ )ゝ")

get_second() {
    read -r h m s <<< $(echo $1 | tr ':' ' ')
    echo $(((10#$h*60*60)+(10#$m*60)+10#$s))
}

calc_duration() {
    local start=$(get_second $1)
    local end=$(get_second $2)
    echo $((end-start))
}

calc_work_time() {
    local lunch_time=$(calc_duration $lunch_start $lunch_end)
    local dinner_time=$(calc_duration $dinner_start $dinner_end)
    if [ $(calc_duration $CURRENT_TIME $work_start) -gt 0 ]; then
        echo 0
    elif [ $(calc_duration $CURRENT_TIME $lunch_start) -gt 0 ]; then
        echo $(calc_duration $work_start $CURRENT_TIME)
    elif [ $(calc_duration $CURRENT_TIME $lunch_end) -gt 0 ]; then
        echo $(calc_duration $work_start $lunch_start)
    elif [ $(calc_duration $CURRENT_TIME $dinner_start) -gt 0 ]; then
        echo $(($(calc_duration $work_start $CURRENT_TIME) - lunch_time))
    elif [ $(calc_duration $CURRENT_TIME $dinner_end) -gt 0 ]; then
        echo $(($(calc_duration $work_start $dinner_start) - lunch_time))
    elif [ $(calc_duration $CURRENT_TIME $work_end) -gt 0 ]; then
        echo $(($(calc_duration $work_start $CURRENT_TIME) - lunch_time - dinner_time))
    else
        echo $(($(calc_duration $work_start $work_end) - lunch_time - dinner_time))
    fi
}

show_work_time() {
    local work_sec=$(calc_work_time)
    echo "$(($work_sec / 3600)) hours and $(($work_sec % 3600 / 60)) minutes and $(($work_sec % 60)) seconds"
}

calc_money() {
    local lunch_time=$(calc_duration $lunch_start $lunch_end)
    local dinner_time=$(calc_duration $dinner_start $dinner_end)
    local mnt=$((($(calc_duration $work_start $work_end) - lunch_time - dinner_time) / 60))
    local salary_per_mnt=$(($salary * 100000000 / $day / $mnt))
    local work_sec=$(calc_work_time)
    local money=$((salary_per_mnt * (work_sec / 60) / 1000000))
    echo $money
}

show_money() {
    local money=$(calc_money)
    echo "已挣到:$(($money / 100)).$(($money % 100)) 元"
}

calc_work_end() {
    if [ $(calc_duration $CURRENT_TIME $work_start) -gt 0 ]; then
        echo "距离下班还有:[还没开始上班]"
    elif [ $(calc_duration $CURRENT_TIME $work_end) -gt 0 ]; then
        local time_left=$(calc_duration $CURRENT_TIME $work_end)
        echo "距离下班还有:$(($time_left / 3600)) 小时 $(($time_left % 3600 / 60)) 分钟 $(($time_left % 60)) 秒"
    else
        echo "距离下班还有:[下班啦]"
    fi
}

random_emoji() {
    local len=${#EMOJI_ARRAY[*]}
    echo ${EMOJI_ARRAY[RANDOM % $len]}
}


random_emoji
show_money
calc_work_end

Note: 为了让界面可爱一点,我用颜文字润色了一下!

如果你还想添加其他颜文字,可以逛逛我的颜文字库 emoticon-dict

3. 显形

bash 版摸鱼侠的成品效果大概是这样:

> moyu
ヽ( ˘ω˘ )ゝ
已挣到:265.15 元
距离下班还有:1 小时 499

很可爱滴!快来用啊

4. 致用

那么这时候有人要问了:这么可爱的命令行输出,我要怎么才能获得呢?

  1. 从我的仓库 moyu-bash/moyu.sh 复制代码到本地
  2. 根据自己的情况,在 moyu.sh 文件开头配置好薪资、工时等参数
  3. 打开 bash_profile:vim ~/.bash_profile (MacOS or Linux)
  4. 在 bash_profile 里添加一行:alias moyu="sh [你的路径]/moyu-bash/moyu.sh"
  5. 重启 Terminal
  6. 这时只要在命令行输入 moyu,即可查看摸鱼进度!

如果你喜欢这个应用,记得给它点一个 star 哦 (・ω< )★