From 7ea398ee4262e88ff64cb7f3f3e2c6ac6ff51207 Mon Sep 17 00:00:00 2001 From: Twinzo1 <44726207+Twinzo1@users.noreply.github.com> Date: Mon, 14 Jun 2021 14:52:08 +0800 Subject: [PATCH] Create run_scripts.sh --- shell/run_scripts.sh | 275 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 shell/run_scripts.sh diff --git a/shell/run_scripts.sh b/shell/run_scripts.sh new file mode 100644 index 00000000..3bddf87c --- /dev/null +++ b/shell/run_scripts.sh @@ -0,0 +1,275 @@ +#!/bin/bash +# Version: v4.7.14 +# sed分隔符可修改 +# 青龙面板task补充 + +## 导入通用变量与函数 +dir_shell=/ql/shell +. $dir_shell/share.sh + +SCRIPT="$1" + +# VIP人数,默认前面的 +VIPS=${JD_SH_VIP:-0} +SCRIPT_NAME=`echo "${SCRIPT}" | awk -F "." '{print $1}'` + +home="/ql" +# 助力码文件目录 +SHCD_DIR="${home}/sharecode" + +# 脚本文件初始目录 +SCRIPT_DIR="${home}/scripts" + +# 推送脚本 +NOTIFY_SCRIPT="${SCRIPT_DIR}/${SCRIPT_NAME}_run_sendNotify.js" +NOTIFY_SCRIPT_SPEC="${SCRIPT_DIR}/${SCRIPT_NAME}_run_sendNotify_spec.js" + +LOG="${SHCD_DIR}/${SCRIPT_NAME}.log" +MSG_DIR="${home}/JDmsg" +NOTIFY_CONF="${MSG_DIR}/${SCRIPT_NAME}_dt.conf" + +# 推送JS +NOTIFY_JS="${SCRIPT_DIR}/${SCRIPT_NAME}_sendNotify.js" +NOTIFY_JS_RETURN="${SCRIPT_DIR}/${SCRIPT_NAME}_return_sendNotify.js" + +[ ! -d ${SHCD_DIR} ] && mkdir ${SHCD_DIR} +[ ! -d ${MSG_DIR} ] && mkdir ${MSG_DIR} + +# 格式化助力码 +autoHelp(){ +# $1 脚本文件,绝对路径 +# $2 助力码文件所在,绝对路径 + sr_file=$1 + sc_file=$2 + sc_list=(`cat "$sc_file" | while read LINE; do echo $LINE; done | awk -F "】" '{print $2}'`) + sc_vip_list=(`echo ${sc_list[*]:0:VIPS}`) + nums_of_user=`echo ${#sc_list[*]}` + sc_normal_list=(`echo ${sc_list[*]:VIPS:nums_of_user}`) + f_shcode="" + IFS=$'\n' + if [ -n `echo "$JD_COOKIE" | grep "&"` ]; then + JK_LIST=(`echo "$JD_COOKIE" | awk -F "&" '{for(i=1;i<=NF;i++) print $i}'`) + else + JK_LIST=(`echo "$JD_COOKIE" | awk -F "$" '{for(i=1;i<=NF;i++){{if(length($i)!=0) print $i}}'`) + fi + if [ -n "$JK_LIST" ]; then + diff=$((${#JK_LIST[*]}-$nums_of_user)) + for e in `seq 1 $diff` + do + sc_list+=(${sc_list[0]}) + unset sc_list[0] + sc_list=(${sc_list[*]}) + f_shcode="$f_shcode""'""`echo ${sc_list[*]:0} | awk '{for(i=1;i<=NF;i++) {if(i==NF) printf $i;else printf $i"@"}}'`""',""\n" + done + fi + # 优先为vip用户助力 + for e in `seq 1 $nums_of_user` + do + if [ $((VIPS-0)) -ge $e ]; then + sc_vip_list+=(${sc_vip_list[0]}) + unset sc_vip_list[0] + sc_vip_list=(${sc_vip_list[*]}) + else + sc_normal_list+=(${sc_normal_list[0]}) + unset sc_normal_list[0] + sc_normal_list=(${sc_normal_list[*]}) + fi + final_sc_list=(`echo ${sc_vip_list[*]} ${sc_normal_list[*]}`) + f_shcode="$f_shcode""'""`echo ${final_sc_list[*]:0} | awk '{for(i=1;i<=NF;i++) {if(i==NF) printf $i;else printf $i"@"}}'`""',""\n" + done + + unset IFS + [ -n "$MY_SHARECODES" ] && f_shcode="$f_shcode""'$MY_SHARECODES',\n" + sed -i "s/let shareCodes = \[/let shareCodes = \[\n${f_shcode}/g" "$sr_file" + sed -i "s/const inviteCodes = \[/const inviteCodes = \[\n${f_shcode}/g" "$sr_file" + sed -i "s/let inviteCodes = \[/let inviteCodes = \[\n${f_shcode}/g" "$sr_file" + # 修改种豆得豆 + if [ "$1" = "jd_plantBean.js" ]; then + sed -i "s/let PlantBeanShareCodes = \[/let PlantBeanShareCodes = \[\n${f_shcode}/g" "${SCRIPT_DIR}/jdPlantBeanShareCodes.js" + fi + # 修改东东萌宠 + if [ "$1" = "jd_pet.js" ]; then + sed -i "s/let PetShareCodes = \[/let PetShareCodes = \[\n${f_shcode}/g" "${SCRIPT_DIR}/jdPetShareCodes.js" + fi + # 修改东东农场 + if [ "$1" = "jd_fruit.js" ]; then + sed -i "s/let FruitShareCodes = \[/let FruitShareCodes = \[\n${f_shcode}/g" "${SCRIPT_DIR}/jdFruitShareCodes.js" + fi + # 修改京喜工厂 + if [ "$1" = "jd_dreamFactory.js" ]; then + sed -i "s/let shareCodes = \[/let shareCodes = \[\n${f_shcode}/g" "${SCRIPT_DIR}/jdDreamFactoryShareCodes.js" + fi + # 修改东东工厂 + if [ "$1" = "jd_jdfactory.js" ]; then + sed -i "s/let shareCodes = \[/let shareCodes = \[\n${f_shcode}/g" "${SCRIPT_DIR}/jdFactoryShareCodes.js" + fi +} + +# 收集助力码 +collectSharecode(){ + echo "${1}:收集新助力码" + code=`sed -n '/'码】'.*/'p ${1}` + if [ -z "$code" ]; then + activity=`sed -n '/配置文件.*/'p "${1}" | awk -F "获取" '{print $2}' | awk -F "配置" '{print $1}'` + name=(`sed -n '/'【京东账号'.*/'p "${1}" | grep "开始" | awk -F "开始" '{print $2}' |sed 's/】/(/g'| awk -v ac="$activity" -F "*" '{print $1")" ac "好友助力码】"}'`) + # 相邻重复去重 + code=(`sed -n '/'您的好友助力码为'.*/'p ${1} | awk '{print $2}' | uniq`) + [ -z "$code" ] && code=(`sed -n '/'好友助力码'.*/'p ${1} | awk -F ":" '{print $2}' | uniq`) + [ -z "$code" ] && return + for i in `seq 0 $((${#name[*]}-1))` + do + [ -n "${code[i]}" ] && echo "${name[i]}""${code[i]}" >> ${LOG} + done + else + echo $code | awk '{for(i=1;i<=NF;i++)print $i}' > ${LOG} + fi +} + +# 清除连续空行为一行和首尾空行 +blank_lines2blank_line(){ + # $1: 文件名 + # 删除连续空行为一行 + cat -s $1 > $1.bk + mv -f $1.bk $1 + #清除文首文末空行 + [ "$(cat $1 | head -n 1)"x = ""x ] && sed -i '1d' $1 + [ "$(cat $1 | tail -n 1)"x = ""x ] && sed -i '$d' $1 +} + +# 判断是否需要特别推送 +specify_send(){ + ret=`cat $1 2>&1 | grep "提醒\|已超时\|已可兑换\|已失效\|重新登录\|已可领取\|未选择商品\|兑换地址\|未继续领养"` + [ -n "$ret" ] && echo 1 || echo 0 +} + +# 传入需要的环境变量 +deliver_env(){ + env_var=(`cat $1 | grep process.env | awk -F "." '{print $3}' | awk '{print $1}' | awk -F ";|)" '{print $1}' | grep "_" | sort -u | uniq`) + for var in ${env_var[*]} + do + val=`eval echo '$'{$var}` + [ -n $val ] && sed -i "s/let $var = ''/let ${var} = '${val}'/g" $1 + done +} + +# 主函数 +main(){ + cd ${SCRIPT_DIR} + + log_time=$(date "+%Y-%m-%d-%H-%M-%S") + log_dir_tmp="${SCRIPT_NAME##*/}" + log_dir="$dir_log/${log_dir_tmp%%.*}" + log_path="$log_dir/$log_time.log.tmp" + make_dir "$log_dir" + + if [[ $SCRIPT == *.py ]]; then + python3 $SCRIPT 2>&1 | tee ${log_path} + if [ "$SCRIPT" == "jd_OpenCard.py" ]; then + strat_end_line_list=(`cat $log_path | grep -n "本次统计\|入会总耗时" | awk -F ':' '{print $1}'`) + TITLE="入会领京豆" + CONTENT=`sed -n "${a},${a[-1]}p" ${log_path}` + python3 -c "import SendMsg;send = SendMsg.SendMsg(\"${DD_BOT_TOKEN}\", \"${DD_BOT_SECRET}\");send.msg(\"${TITLE}\", \"${CONTENT}\")" + fi + rm -f ${log_path} + return + fi + + # 备份 + cp -f ${SCRIPT_DIR}/${SCRIPT} ${SCRIPT_DIR}/${SCRIPT_NAME}_tmp.js + + echo "修改发送方式" + +#修改常规推送 + cat > ${NOTIFY_SCRIPT} < ${NOTIFY_SCRIPT_SPEC} <&1 | tee ${log_path} + + # 整合推送消息 + IFS=$'\n' + for n in `ls ${MSG_DIR} | grep ${SCRIPT_NAME}_dt.conf | grep -v ${SCRIPT_NAME}_dt.confname` + do + echo "正在处理${MSG_DIR}/${n}文本" + if [ $(specify_send ${MSG_DIR}/${n}) -eq 0 ];then + cat ${MSG_DIR}/${n} >> ${NOTIFY_CONF} + else + cat ${MSG_DIR}/${n} >> ${NOTIFY_CONF}spec + fi + # 清空文件 + rm -f ${MSG_DIR}/${n} + done + unset IFS + + echo "推送消息" + sed -i 's/text}\\n\\n/text}\\n/g' ${NOTIFY_JS} + sed -i 's/\\n\\n本脚本/\\n本脚本/g' ${NOTIFY_JS} + sed -i 's/text = text.match/\/\/text = text.match/g' ${NOTIFY_JS} + + # 传递变量 + deliver_env ${NOTIFY_JS} + + if [ -e ${NOTIFY_CONF} -a -n "$(cat ${NOTIFY_CONF} 2>&1 | sed '/^$/d')" ]; then + blank_lines2blank_line ${NOTIFY_CONF} + blank_lines2blank_line ${NOTIFY_CONF}name + cat ${NOTIFY_CONF} + node ${NOTIFY_SCRIPT} + fi + # 特殊推送 + if [ -e ${NOTIFY_CONF}spec -a -n "$(cat ${NOTIFY_CONF}spec 2>&1 | sed '/^$/d')" ]; then + blank_lines2blank_line ${NOTIFY_CONF}spec + blank_lines2blank_line ${NOTIFY_CONF}name + cat ${NOTIFY_CONF}spec + if [ -n "$DD_BOT_TOKEN_SPEC" -a -n "$DD_BOT_SECRET_SPEC" ]; then + sed -i "s/DD_BOT_TOKEN/DD_BOT_TOKEN_SPEC/g" ${NOTIFY_JS} + sed -i "s/DD_BOT_SECRET/DD_BOT_SECRET_SPEC/g" ${NOTIFY_JS} + sed -i "s/let DD_BOT_TOKEN_SPEC/let DD_BOT_TOKEN_SPEC_OLD/g" ${NOTIFY_JS} + sed -i "s/let DD_BOT_SECRET_SPEC/let DD_BOT_SECRET_SPEC_OLD/g" ${NOTIFY_JS} + sed -i "/let DD_BOT_TOKEN_SPEC_OLD/a let DD_BOT_TOKEN_SPEC = '${DD_BOT_TOKEN_SPEC}'" ${NOTIFY_JS} + sed -i "/let DD_BOT_SECRET_SPEC_OLD/a let DD_BOT_SECRET_SPEC = '${DD_BOT_SECRET_SPEC}'" ${NOTIFY_JS} + fi + node ${NOTIFY_SCRIPT_SPEC} + fi + + echo "删除旧文件" + rm -f ${SCRIPT_DIR}/${SCRIPT_NAME}_tmp.js + rm -f ${NOTIFY_JS} + rm -f ${NOTIFY_JS_RETURN} + rm -f ${NOTIFY_SCRIPT} + rm -f ${NOTIFY_SCRIPT_SPEC} + + # 助力码收集 + collectSharecode ${log_path} + rm -f ${log_path} +} +main