老板:退退退
GitHub 项目地址:moyu-bash
1. 缘起
最近刷到一个微信小程序,叫 “摸鱼侠”,它长这样:
这里面有个栏目叫 “今日已摸到”,还挺有意思的,它会计算今日截至当前为止挣到的工资。
我寻思这小程序颜色太过艳丽,容易被老板抓包,便计上心来,打算写个 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 小时 49 分 9 秒
很可爱滴!快来用啊
4. 致用
那么这时候有人要问了:这么可爱的命令行输出,我要怎么才能获得呢?
- 从我的仓库 moyu-bash/moyu.sh 复制代码到本地
- 根据自己的情况,在
moyu.sh文件开头配置好薪资、工时等参数 - 打开 bash_profile:
vim ~/.bash_profile(MacOS or Linux) - 在 bash_profile 里添加一行:
alias moyu="sh [你的路径]/moyu-bash/moyu.sh" - 重启 Terminal
- 这时只要在命令行输入
moyu,即可查看摸鱼进度!
如果你喜欢这个应用,记得给它点一个 star 哦 (・ω< )★