seaswalker / posts

0 stars 0 forks source link

Bash钉钉周报提醒(每周最后一个工作日发送) #52

Open seaswalker opened 3 years ago

seaswalker commented 3 years ago
#!/bin/bash

queryDayType() {
    response=`curl -s http://timor.tech/api/holiday/info/$1`
    echo "工作日API查询结果: ${response}"

    code=`echo ${response} | jq .code`
    if [[ "${code}" -ne 0  ]]
    then
        echo '查询节假日出错'
        exit 0
    fi

    type=`echo ${response} | jq .type.type`
    # bash的函数返回值只能是数字
    return $((type))
}

# 检查今天是否是工作日
today=`date +%Y-%m-%d`
queryDayType ${today}
type=$?
if [[ "${type}" -ne 0  ]]
then
    echo "${today}不是工作日, 类型: ${type}, 不需要发送周报提醒."
    exit 0
fi

# 检查明天是否是假期
tomorrow=`date -d next-day +%Y-%m-%d`
queryDayType ${tomorrow}
type=$?
if [[ "${type}" -eq 0  ]]
then
    echo "明天: ${tomorrow}是工作日, 类型: ${type}, 不需要发送周报提醒."
    exit 0
fi

message='测试消息'
mobiles=''
exec < /home/dev/script/mobiles_week_report
while read line
do
    mobiles="${mobiles}${line},"
done

mobiles=${mobiles%?}

response=`curl -s --request POST --url 'https://oapi.dingtalk.com/robot/send?access_token=xxx' --header 'Content-Type: application/json' --data "{'msgtype': 'text','at': {'isAtAll': false, 'atMobiles': [${mobiles}]},'text': {'content': \"${message}\"}}"`
echo "请求钉钉返回: $response"

注意钉钉请求URL里的content,两个转义双引号是必不可少的,不然钉钉会找不到参数json. mobiles_week_report文件内是需要被@的手机号,一行一个。