【shell】用shell脚本,实现提醒小组成员值班
需求拆分
- 有一个值班人员的数组,可以随时进行调整里面的人员名单
- 一个人的值班周期为每周1到每周6(别问为什么是周6,因为周日在系统里都算下一周了,date +%U)
- 每天上班时间提醒一次,发送消息到钉钉
- 遍历数组,人员轮流值班
实现代码
#!/bin/bash
# 值班成员数组,可以根据需要调整
on_duty_members=("X" "X" "X" )
# 获取当前周数
current_week=$(date +%U)
# 计算值班成员的索引
on_duty_index=$(($current_week % ${#on_duty_members[@]}))
# 获取值班成员
on_duty_member=${on_duty_members[$on_duty_index]}
# 发送消息给值班成员
#echo "本周值班成员:$on_duty_member, 请注意值班安排。"
#获取当前日期
curday=$(date +%F)
curl 'https://oapi.dingtalk.com/robot/send?access_token=ecd19ab97XXXXX87dd20b54772d9ff7' \
-H 'Content-Type: application/json' \
-d '{
"text": {
"content":" '"${curday}"' 值班情况如下:
【项目组】值班人:@'"${on_duty_member}"' 请注意值班安排。
记录好线上问题,无需提Bug,但需要汇总!"
},
"msgtype":"text"
}
'
这个脚本是一个 Bash 脚本,用于根据当前日期和周数来确定值班成员,并通过钉钉机器人发送消息给对应的值班成员。
以下是脚本的详细解析:
-
on_duty_members=("X" "X" "X" )
:定义一个数组on_duty_members
,存储值班成员的姓名。你可以根据需要调整成员的数量和姓名。 -
current_week=$(date +%U)
:使用date
命令获取当前周数,并将结果保存在变量current_week
中。 -
on_duty_index=$(($current_week % ${#on_duty_members[@]}))
:计算值班成员数组的索引。通过取余运算符%
将当前周数与值班成员数量取余,得到的结果就是值班成员数组的索引。 -
on_duty_member=${on_duty_members[$on_duty_index]}
:根据计算得到的索引,从值班成员数组中获取对应的值班成员姓名,并将其保存在变量on_duty_member
中。 -
curday=$(date +%F)
:使用date
命令获取当前日期,并将结果保存在变量curday
中。 -
curl 'https://oapi.dingtalk.com/robot/send?access_token=ecd19ab97XXXXX87dd20b54772d9ff7' \
:使用curl
命令发送 HTTP POST 请求给钉钉机器人。其中access_token
是你钉钉机器人的访问令牌,需要替换成你自己的。 -
-H 'Content-Type: application/json' \
:设置请求头的 Content-Type 为 application/json。 -
-d '{ "text": { "content":" '"${curday}"' 值班情况如下:\n【项目组】值班人:@'"${on_duty_member}"' 请注意值班安排。 记录好线上问题,无需提Bug,但需要汇总!" }, "msgtype":"text" }'
:设置请求体,包含要发送的消息内容。消息内容中使用了变量curday
和on_duty_member
,分别代表当前日期和值班成员姓名。
最后,脚本通过 }
结束 curl
命令的调用,完成消息发送。
添加定时任务
配置好定时任务就行,配置每天上午10点10分发送消息。
输入crontab -e ,新增定时任务:10 10 * * * bash "你的脚本完全路径"。