摸鱼侠极客版

老板:退退退

GitHub 项目地址:moyu-bash

1. 缘起

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

nature system

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

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

2. 出生

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

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

# Author: github@luochang212

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 哦 (・ω< )★