老板:退退退
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 哦 (・ω< )★