#!/usr/bin/env bash ## Build 20211214-002-test name_js=( jd_fruit jd_pet jd_plantBean jd_dreamFactory jd_jdfactory jd_crazy_joy jd_jdzz jd_jxnc jd_bookshop jd_cash jd_sgmh jd_cfd jd_health jd_carnivalcity jd_city jd_moneyTree jd_cfdtx ) name_config=( Fruit Pet Bean DreamFactory JdFactory Joy Jdzz Jxnc BookShop Cash Sgmh Cfd Health Carni City MoneyTree TokenJxnc ) name_chinese=( 东东农场 东东萌宠 京东种豆得豆 京喜工厂 东东工厂 crazyJoy任务 京东赚赚 京喜农场 口袋书店 签到领现金 闪购盲盒 京喜财富岛 东东健康社区 京东手机狂欢城 城城领现金 摇钱树 京喜token ) env_name=( FRUITSHARECODES ## 1、东东农场互助码 PETSHARECODES ## 2、东东萌宠互助码 PLANT_BEAN_SHARECODES ## 3、种豆得豆互助码 DREAM_FACTORY_SHARE_CODES ## 4、京喜工厂互助码 DDFACTORY_SHARECODES ## 5、东东工厂互助码 JDJOY_SHARECODES ## 6、疯狂的JOY互助码 JDZZ_SHARECODES ## 7、京东赚赚互助码 JXNC_SHARECODES ## 8、京喜农场助力码 BOOKSHOP_SHARECODES ## 9、口袋书店互助码 JD_CASH_SHARECODES ## 10、签到领现金互助码 JDSGMH_SHARECODES ## 11、闪购盲盒互助码 JDCFD_SHARECODES ## 12、京喜财富岛互助码 JDHEALTH_SHARECODES ## 13、东东健康社区互助码 JD818_SHARECODES ## 14、京东手机狂欢城互助码 CITY_SHARECODES ## 15、城城领现金互助码 MONEYTREE_SHARECODES ## 16、摇钱树 JXNCTOKENS ## 17、京喜Token(京喜财富岛提现用) ) var_name=( ForOtherFruit ## 1、东东农场互助规则 ForOtherPet ## 2、东东萌宠互助规则 ForOtherBean ## 3、种豆得豆互助规则 ForOtherDreamFactory ## 4、京喜工厂互助规则 ForOtherJdFactory ## 5、东东工厂互助规则 ForOtherJoy ## 6、疯狂的JOY互助规则 ForOtherJdzz ## 7、京东赚赚互助规则 ForOtherJxnc ## 8、京喜农场助力码 ForOtherBookShop ## 9、口袋书店互助规则 ForOtherCash ## 10、签到领现金互助规则 ForOtherSgmh ## 11、闪购盲盒互助规则 ForOtherCfd ## 12、京喜财富岛互助规则 ForOtherHealth ## 13、东东健康社区互助规则 ForOtherCarni ## 14、京东手机狂欢城互助规则 ForOtherCity ## 15、城城领现金互助规则 ForOtherMoneyTree ## 16、摇钱树 TokenJxnc ## 17、京喜Token(京喜财富岛提现用) ) local_scr=$1 repo_dir="" sub_dir_scripts="$(ls -l $dir_scripts | awk '/^d/ {print $NF}')" if [[ ! $local_scr =~ "/" ]] || [[ $local_scr == $dir_scripts/[^/]* ]]; then local_scr_dir="$dir_scripts" elif [[ $local_scr == */* ]] && [[ ! $local_scr =~ ql ]]; then repo_dir="$(echo $local_scr | awk -F '/' '{print $(NF-1)}')" [[ $sub_dir_scripts[@] =~ $repo_dir ]] && local_scr_dir="$dir_scripts/$repo_dir" else local_scr_dir="" fi ## 生成pt_pin清单 gen_pt_pin_array() { source $file_env ori_jdCookie=$JD_COOKIE ori_envs=$(eval echo "\$ori_jdCookie") ori_array=($(echo $ori_envs | sed 's/&/ /g')) local i j ori_pt_pin_temp for i in "${!ori_array[@]}"; do j=$((i + 1)) ori_pt_pin_temp=$(echo ${ori_array[i]} | perl -pe "{s|.*pt_pin=([^; ]+)(?=;?).*|\1|; s|%|\\\x|g}") ori_remark_name[i]="$(cat $dir_db/env.db | grep ${ori_array[i]} | grep remarks | perl -pe "{s|.*remarks\":\"([^\"]+).*|\1|g}" | tail -1)" [[ ! ${ori_remark_name[i]} ]] && ori_remark_name[i]="未备注" [[ $ori_pt_pin_temp == *\\x* ]] && ori_pt_pin[i]=$(printf $ori_pt_pin_temp) || ori_pt_pin[i]=$ori_pt_pin_temp ori_sn=$j ori_uesr_info[i]="序号 $j. 用户名:${ori_pt_pin[i]} 备注:${ori_remark_name[i]}" done } export_uesr_info() { for i in $@; do for j in "${!ori_array[@]}"; do [[ ${ori_array[j]} == *$i* ]] && echo ${ori_uesr_info[j]} done done } # Cookie 有效性检查 check_jd_ck() { local test_jd_cookie="$(curl -s --connect-timeout 5 --retry 3 --noproxy "*" "https://bean.m.jd.com/bean/signIndex.action" -H "cookie: $1")" [[ "$test_jd_cookie" ]] && return 0 || return 1 } # 移除失效的 Cookie remove_void_ck() { gen_pt_pin_array local tmp_jdCookie i j void_ck_num if [[ $jdCookie_1 ]]; then tmp_jdCookie=$jdCookie_1 else source $file_env tmp_jdCookie=$JD_COOKIE fi local envs=$(eval echo "\$tmp_jdCookie") local array=($(echo $envs | sed 's/&/ /g')) local user_sum=${#array[*]} local test_connect="$(curl -I -s --connect-timeout 5 --retry 3 --noproxy "*" https://bean.m.jd.com/bean/signIndex.action -w %{http_code} | tail -n1)" echo -e "# 开始检测 Cookie 的有效性,可能花费一定时间,请耐心等待 ..." if [ "$test_connect" -eq "302" ]; then echo -e "# 本次一共导入 $user_sum 个 Cookie ,其中:" for ((i = 0; i < $user_sum; i++)); do j=$((i + 1)) check_jd_ck ${array[i]} [[ $? = 0 ]] && echo -e "# $(export_uesr_info ${array[i]}) 状态正常" [[ $? = 1 ]] && echo -e "# $(export_uesr_info ${array[i]}) 已失效" && unset array[i] done jdCookie_2=$(echo ${array[*]} | sed 's/\ /\&/g') [[ $jdCookie_2 ]] && export JD_COOKIE="$jdCookie_2" void_ck_num=$((user_sum - ${#array[*]})) [[ $void_ck_num = 0 ]] && echo -e "# 未检测到失效 Cookie 。" || echo -e "# 已剔除以上 $void_ck_num 个失效的 Cookie 。" else echo -e "# API 连接失败,跳过检测。" fi echo -e "" } ## 临时禁止账号运行活动脚本 TempBlock_CK() { ## 按 Cookie 序号禁止账号 TempBlock_JD_COOKIE() { ## 导入基础 JD_COOKIE 变量 source $file_env local tmp_jdCookie=$JD_COOKIE local envs=$(eval echo "\$tmp_jdCookie") local array=($(echo $envs | sed 's/&/ /g')) local user_sum=${#array[*]} local TempBlockCookie="$(eval echo $(echo $TempBlockCookie | perl -pe "{s|~\|-|_|g; s|\W+\|[A-Za-z]+| |g; s|(\d+)_(\d+)|{\1..\2}|g;}"))" local TempBlockPin="$(echo $TempBlockPin | perl -pe "{s|,| |g;}")" local TempBlockCookieArray=($TempBlockCookie) local TempBlockPinArray=($TempBlockPin) local i j k m jdCookie_3 for ((i = 1; i <= $user_sum; i++)); do j=$((i - 1)) for ((k = 0; k < ${#TempBlockCookieArray[*]}; k++)); do [[ "${TempBlockCookieArray[k]}" = "$i" ]] && unset array[j] done pt_pin_temp=$(echo ${array[j]} | perl -pe "{s|.*pt_pin=([^; ]+)(?=;?).*|\1|; s|%|\\\x|g}") [[ $pt_pin_temp == *\\x* ]] && pt_pin[j]=$(printf $pt_pin_temp) || pt_pin[j]=$pt_pin_temp for ((m = 0; m < ${#TempBlockPinArray[*]}; m++)); do pt_pin_temp_block=$(echo ${TempBlockPinArray[m]} | perl -pe "{s|%|\\\x|g}") [[ $pt_pin_temp_block == *\\x* ]] && pt_pin_block[m]=$(printf $pt_pin_temp_block) || pt_pin_block[m]=$pt_pin_temp_block [[ "${pt_pin[j]}" =~ "${pt_pin_block[m]}" ]] && unset array[j] done done jdCookie_1=$(echo ${array[*]} | sed 's/\ /\&/g') [[ $jdCookie_1 ]] && export JD_COOKIE="$jdCookie_1" user_sum_1=${#array[*]} } local i j k if [[ -n "$(echo $tempblock_ck_envs_num | sed -n "/^[0-9]\+$/p")" ]]; then for ((k = 1; k <= $tempblock_ck_envs_num; k++)); do if [ tempblock_ck_envs$k ]; then local tempblock_ck_array=($(eval echo "\$tempblock_ck_envs$k" | perl -pe "{s|&| |g}")) for i in "${tempblock_ck_array[@]}"; do local tmp_task_array=($(echo $i | perl -pe "{s|@| |g}")) local tmp_script_array=($(echo ${tmp_task_array[0]} | perl -pe "{s/\|/ /g}")) for j in ${tmp_script_array[@]}; do if [[ $local_scr == *$j* ]]; then [[ $(echo ${tmp_task_array[1]} | perl -pe "{s|\D||g;}") ]] && TempBlockCookie=${tmp_task_array[1]} || TempBlockCookie="" TempBlockPin=${tmp_task_array[2]} break fi done done fi done fi if [[ $TempBlockCookie ]] || [[ $TempBlockPin ]]; then TempBlock_JD_COOKIE else export JD_COOKIE="$tmp_jdCookie" fi } ## 重组 CK Recombin_CK() { ## 导入基础 JD_COOKIE 变量 if [[ $jdCookie_2 ]]; then tmp_jdCookie=$jdCookie_2 elif [[ $jdCookie_1 ]]; then tmp_jdCookie=$jdCookie_1 else source $file_env tmp_jdCookie=$JD_COOKIE fi ## JD_COOKIE 基本分析 local envs=$(eval echo "\$tmp_jdCookie") array=($(echo $envs | sed 's/&/ /g')) user_sum=${#array[*]} local jdCookie_4 i j k m n if [[ -n "$(echo $recombin_ck_envs_num | sed -n "/^[0-9]\+$/p")" ]]; then for ((k = 1; k <= $recombin_ck_envs_num; k++)); do if [ recombin_ck_envs$k ]; then local recombin_ck_array=($(eval echo "\$recombin_ck_envs$k" | perl -pe "{s|&| |g}")) for i in "${recombin_ck_array[@]}"; do local tmp_task_array=($(echo $i | perl -pe "{s|@| |g}")) local tmp_script_array=($(echo ${tmp_task_array[0]} | perl -pe "{s/\|/ /g}")) #[[ $DEBUG_MODE = 1 ]] && echo ${tmp_script_array[@]} for j in "${tmp_script_array[@]}"; do if [[ $local_scr == *$j* ]]; then [[ $DEBUG_MODE = 1 ]] && echo -n "${tmp_script_array[@]}" && echo -e "\n" Recombin_CK_Mode="${tmp_task_array[1]}" for ((m = 1; m <= 5; m++)); do n=$((m + 1)) eval Recombin_CK_ARG$m="${tmp_task_array[n]}" [[ $DEBUG_MODE = 1 ]] && eval echo "Recombin_CK_ARG$m : \$Recombin_CK_ARG$m" done local temp_status=1 [[ $Recombin_CK_Mode = 4 || $Recombin_CK_Mode = 5 ]] && Recombin_CK_cal && break 4 || Recombin_CK_cal fi done done fi done fi [[ ! $temp_status ]] && Recombin_CK_cal } ## 重组 CK 计算 Recombin_CK_cal() { ## 随机模式算法 combine_random() { local combined_all ran_sub tmp i echo "# 正在应用 随机Cookie 模式..." [[ -n "$(echo $1 | sed -n "/^[0-9]\+$/p")" && $1 -le $user_sum ]] && ran_num=$1 || ran_num=$user_sum echo -e "# 当前总共 $user_sum 个有效账号,本次随机抽取 $ran_num 个账号按随机顺序参加活动。" ran_sub="$(seq $user_sum | sort -R | head -$ran_num)" for i in $ran_sub; do j=$((i - 1)) tmp="${array[j]}" combined_all="$combined_all&$tmp" done jdCookie_4=$(echo $combined_all | sed 's/^&//g') [[ $jdCookie_4 ]] && export JD_COOKIE="$jdCookie_4" #[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4 } ## 优先模式算法 combine_priority() { local combined_all ran_sub jdCookie_priority jdCookie_random m n if [ $1 ]; then # 固定区账号数量 [[ -n "$(echo $1 | sed -n "/^[0-9]\+$/p")" ]] && fixed_num=$1 || fixed_num="0" if [[ $fixed_num -ge $user_sum ]]; then echo "# 固定账号数量不得大于或等于有效账号总量,切换回正常 Cookie 模式..." export JD_COOKIE="$tmp_jdCookie" elif [[ $fixed_num -eq 0 ]]; then echo "# 未设定固定账号数量,切换回正常 Cookie 模式..." export JD_COOKIE="$tmp_jdCookie" else echo "# 正在应用 优先Cookie 模式..." echo -e "# 当前总共 $user_sum 个有效账号,其中前 $fixed_num 个账号为固定顺序。\n# 本次从第 $((fixed_num + 1)) 个账号开始按随机顺序参加活动。" ran_sub=$(seq $fixed_num $user_sum | sort -R) for ((m = 0; m < $fixed_num; m++)); do tmp="${array[m]}" jdCookie_priority="$jdCookie_priority&$tmp" done for n in $ran_sub; do tmp="${array[n]}" jdCookie_random="$jdCookie_random&$tmp" done combined_all="$jdCookie_priority$jdCookie_random" jdCookie_4=$(echo $combined_all | perl -pe "{s|^&||; s|&&|&|; s|&$||}") [[ $jdCookie_4 ]] && export JD_COOKIE="$jdCookie_4" #[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4 fi else echo "# 由于参数缺失,切换回正常 Cookie 模式..." export JD_COOKIE="$tmp_jdCookie" fi } ## 轮换模式算法 combine_rotation() { # 当月总天数 local total_days=$(cal | grep ^[0-9] | tail -1 | awk -F " " '{print $NF}') # 今天几号 local today_day=$(date +%-d) local combined_all rot_num rot_start_num jdCookie_priority jdCookie_rot_head jdCookie_rot_mid tmp_1 tmp_2 tmp_3 a b c # 固定区账号数量 [[ -n "$(echo $1 | sed -n "/^[0-9]\+$/p")" ]] && fixed_num=$1 || fixed_num="0" if [[ $fixed_num -ge $user_sum ]]; then echo "# 固定账号数量不得大于或等于有效账号总量,切换回正常 Cookie 模式..." export JD_COOKIE="$tmp_jdCookie" elif [[ $today_day -gt 1 ]]; then echo "# 正在应用 轮换Cookie 模式..." local rot_total_num=$((user_sum - $fixed_num)) if [[ $rot_total_num -gt 2 ]]; then # 轮换区的账号数量 rot_num=$2 [[ -z "$(echo $rot_num | sed -n "/^[0-9]\+$/p")" || ! $rot_num || $rot_num -lt 1 || $rot_total_num -lt $rot_num ]] && rot_num=$(((rot_total_num + total_days - 1) / total_days)) && [[ $rot_num -lt 1 ]] && rot_num="1" rot_start_num=$((fixed_num + rot_num * ((today_day - 1)))) while [[ $user_sum -lt $((rot_start_num + 1)) ]]; do rot_start_num=$((rot_start_num - rot_total_num)); done echo -n "# 当前总共 $user_sum 个有效账号" [[ $fixed_num -gt 0 ]] && echo -e ",其中前 $fixed_num 个账号为固定顺序。" || echo -e ",所有账号参与轮换。" echo -e "# 今天从第 $((rot_start_num + 1)) 个账号开始轮换,轮换频次为:$rot_num 个账号/天。" for ((a = 0; a < fixed_num; a++)); do tmp_1="${array[a]}" jdCookie_priority="$jdCookie_priority&$tmp_1" done for ((b = $rot_start_num; b < $user_sum; b++)); do tmp_2="${array[b]}" jdCookie_rot_head="$jdCookie_rot_head&$tmp_2" done for ((c = $fixed_num; c < $((rot_start_num)); c++)); do tmp_3="${array[c]}" jdCookie_rot_mid="$jdCookie_rot_mid&$tmp_3" done combined_all="$jdCookie_priority$jdCookie_rot_head$jdCookie_rot_mid" jdCookie_4=$(echo $combined_all | perl -pe "{s|^&||; s|&$||}") [[ $jdCookie_4 ]] && export JD_COOKIE="$jdCookie_4" #[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4 else echo "# 由于参加轮换的账号数量不足 2 个,切换回正常 Cookie 模式..." export JD_COOKIE="$tmp_jdCookie" fi elif [[ $today_day -eq 1 ]]; then echo "# 今天是 1 号,不应用轮换模式,全部 Cookie 按正常顺序参加活动..." export JD_COOKIE="$tmp_jdCookie" fi } ## 组队模式算法 combine_team() { team_ck() { local tmp combined_tmp combined_all i j k m n for ((i = 0; i < $team_num_total; i++)); do #当前队伍是第几组 j=$((i + 1)) #发起组队的账号在Cookie数组中的序号 k=$((i / team_num)) tmp="" combined_tmp="" combined_all="" if [ $i -ne $team_num ]; then for ((m = 1; m < $teamer_num; m++)); do #当前组队的第二账号所在Cookie数组的序号 n=$(((teamer_num - 1) * i + m)) && [[ $n -ge $user_sum ]] && continue tmp="${array[n]}" combined_tmp="$combined_tmp&$tmp" done combined_all="${array[k]}$combined_tmp" elif [ $i -eq $team_num ]; then for ((m = 1; m < $((teamer_num - 1)); m++)); do #第二账号发起的第一支组队,该队伍中的第三账号所在Cookie数组的序号 n=$(((teamer_num - 1) * i + m)) && [[ $n -ge $user_sum ]] && continue tmp="${array[n]}" combined_tmp="$combined_tmp&$tmp" done combined_all="${array[k]}&${array[0]}$combined_tmp" fi jdCookie_4=$combined_all if [[ $jdCookie_4 ]]; then export JD_COOKIE="$jdCookie_4" #[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4 if [[ $local_scr == *.js ]]; then echo -e "\n# 本次提交的是第 $j 组账号。" if [ $temp_status = 3 ]; then node /ql/scripts/$local_scr [[ $interval_time != "0" ]] && echo -e "# 等待 $interval_time 秒后开始进行下一组队任务 ..." sleep $interval_time else node /ql/scripts/$local_scr & sleep $delay_time fi fi fi done exit } run_js_in_team() { if [[ $teamer_num -ge $user_sum ]]; then echo "# 每组队伍的成员数量不得大于或等于有效账号总数量,切换回正常 Cookie 模式..." export JD_COOKIE="$tmp_jdCookie" elif [[ $((teamer_num * team_num)) -ge $user_sum ]]; then echo "# 参与组队的总成员数量不得大于或等于有效账号总数量,切换回正常 Cookie 模式..." export JD_COOKIE="$tmp_jdCookie" else echo "# 正在应用 组队Cookie 模式..." #总组队数量 team_num_total=$(((user_sum + teamer_num - 2) / (teamer_num - 1))) #前几个账号发起组队 team_num_launch=$(((team_num_total + team_num - 1) / team_num)) [[ $team_num -ge $team_num_total ]] && team_num=$team_num_total && [[ $team_num -lt 1 ]] && team_num=1 echo -n "# 当前总共 $user_sum 个有效账号,其中前 $team_num_launch 个账号发起组队,每个账号最多可以发起 $team_num 次组队,一共组 $team_num_total 队,每支队伍最多包含 $teamer_num 个账号。" if [[ -n "$(echo $1 | perl -pe "{s|\.\|s\|m\|h\|d||g}" | sed -n "/^[0-9]\+$/p")" ]]; then temp_status="1" local delay_time="$(echo $1 | perl -pe "{s|([a-z])(\d)+|\1 \2|g;}")" echo -e "各支队伍启动脚本的延隔时间为$(format_time $1)。" elif [[ $1 = 0 ]]; then temp_status="2" local delay_time="0" echo -e "所有队伍并发启动脚本,可能会占用较高的系统资源导致卡顿。" elif [[ $1 = "-" ]] && [[ -n "$(echo $2 | perl -pe "{s|\.\|s\|m\|h\|d||g}" | sed -n "/^[0-9]\+$/p")" ]]; then temp_status="3" local interval_time="$(echo $2 | perl -pe "{s|([a-z])(\d)|\1 \2|g;}")" echo -e "各支队伍启动脚本的间隔时间为$(format_time $2)。" else temp_status="3" delay_time="0" interval_time="0" echo -e "" fi team_ck fi } local p q if [[ $1 ]] && [[ $2 ]]; then if [[ $1 = "-" ]] && [[ $2 = "-" ]] && [[ -n "$(echo $5 | sed -n "/^[0-9]\+$/p")" ]]; then if [[ $5 = 0 ]]; then for p in ${activity_env[@]}; do activity_array=($(echo $p | perl -pe "{s|@| |g}")) teamer_num=${activity_array[0]} team_num=${activity_array[1]} export jd_zdjr_activityId=${activity_array[2]} export jd_zdjr_activityUrl=${activity_array[3]} echo -e "活动 ID (activityId) : $jd_zdjr_activityId" echo -e "活动链接(activityUrl): $jd_zdjr_activityUrl" run_js_in_team $3 $4 done elif [[ $5 -gt 0 ]]; then q=$(($5 - 1)) activity_array=($(echo ${activity_env[q]} | perl -pe "{s|@| |g}")) teamer_num=${activity_array[0]} team_num=${activity_array[1]} export jd_zdjr_activityId=${activity_array[2]} export jd_zdjr_activityUrl=${activity_array[3]} echo -e "活动 ID (activityId) : $jd_zdjr_activityId" echo -e "活动链接(activityUrl): $jd_zdjr_activityUrl" run_js_in_team $3 $4 fi elif [[ -n "$(echo $1 | sed -n "/^[0-9]\+$/p")" ]] && [[ -n "$(echo $2 | sed -n "/^[0-9]\+$/p")" ]]; then # 每组队伍的成员数量 teamer_num=$1 # 单个账号最多发起的组队数量 team_num=$2 else # 每组队伍的成员数量 teamer_num=$user_sum # 单个账号最多发起的组队数量 team_num=1 fi run_js_in_team $3 $4 else echo "# 由于参数缺失,切换回 正常 Cookie 模式..." export JD_COOKIE="$tmp_jdCookie" fi } ## 分段模式算法 combine_segmentation() { local delay_time="$3" local interval_time="$4" local jdCookie_priority jdCookie_team_part i j k m n if [[ $1 ]] && [[ $2 ]]; then # 固定区账号数量 [[ -n "$(echo $1 | sed -n "/^[0-9]\+$/p")" ]] && fixed_num=$1 || fixed_num="0" # 每段账号总数量 [[ -n "$(echo $2 | sed -n "/^[0-9]\+$/p")" ]] && teamer_total_num=$2 || teamer_total_num=$user_sum if [[ $fixed_num -ge $teamer_total_num ]]; then echo "# 固定账号数量不得大于或等于每段账号总数量,切换回正常 Cookie 模式..." export JD_COOKIE="$tmp_jdCookie" elif [[ $teamer_total_num -ge $user_sum ]]; then echo "# 分段账号数量不得大于或等于有效账号总数量,切换回正常 Cookie 模式..." export JD_COOKIE="$tmp_jdCookie" elif [[ $fixed_num -lt $teamer_total_num ]]; then echo "# 正在应用 分段Cookie 模式..." local teamer_num="$((teamer_total_num - fixed_num))" local team_total_num=$(((user_sum - fixed_num + teamer_num - 1) / teamer_num)) && [[ $team_total_num -lt 1 ]] && team_total_num=1 echo -n "# 当前总共 $user_sum 个有效账号" [[ $fixed_num -ne 0 ]] && echo -n ",其中前 $fixed_num 个账号为固定顺序" echo -n "。每 $teamer_total_num 个账号分一段,一共分 $team_total_num 段。" if [[ -n "$(echo $3 | perl -pe "{s|\.\|s\|m\|h\|d||g}" | sed -n "/^[0-9]\+$/p")" ]]; then temp_status="1" local delay_time="$(echo $3 | perl -pe "{s|([a-z])(\d)+|\1 \2|g;}")" echo -e "各分段启动脚本的延隔时间为$(format_time $3)。" echo -e "# 注意:如果每段的运行时间较长且延隔时间设定较短,运行日志可能会显示混乱,此为正常现象。" elif [[ $3 = 0 ]]; then temp_status="2" local delay_time="0" echo -e "所有分段并发启动脚本,可能会占用较高的系统资源导致卡顿。" echo -e "# 注意:运行日志会显示混乱,此为正常现象。" elif [[ $3 = "-" ]] && [[ -n "$(echo $4 | perl -pe "{s|\.\|s\|m\|h\|d||g}" | sed -n "/^[0-9]\+$/p")" ]]; then temp_status="3" local interval_time="$(echo $4 | perl -pe "{s|([a-z])(\d)|\1 \2|g;}")" echo -e "" else temp_status="3" delay_time="0" interval_time="0" echo -e "" fi for ((m = 0; m < $fixed_num; m++)); do tmp="${array[m]}" jdCookie_priority="$jdCookie_priority&$tmp" done for ((i = 0; i < $team_total_num; i++)); do j=$((i + 1)) m=$((teamer_num * i + fixed_num)) n=$((teamer_num * j + fixed_num)) t=$n && [[ $user_sum -lt $t ]] && t=$user_sum jdCookie_team_part="" for ((k = m; k < $n; k++)); do tmp="${array[k]}" jdCookie_team_part="$jdCookie_team_part&$tmp" done jdCookie_4=$(echo $jdCookie_priority$jdCookie_team_part | perl -pe "{s|^&+\|&+$||g}") if [[ $jdCookie_4 ]]; then export JD_COOKIE="$jdCookie_4" #[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4 if [[ $local_scr == *.js ]]; then [[ $fixed_num -ne 0 ]] && echo -e "\n# 本次提交的是前 $fixed_num 位账号及第 $((m + 1)) - $n 位账号。" || echo -e "\n# 本次提交的是第 $((m + 1)) - $n 位账号。" if [ $temp_status = 3 ]; then node /ql/scripts/$local_scr [[ $interval_time != "0" ]] && echo -e "# 等待$(format_time $interval_time)后开始进行下一段任务 ..." sleep $interval_time else node /ql/scripts/$local_scr & sleep $delay_time fi fi fi done exit fi else echo "# 由于参数缺失,切换回正常 Cookie 模式..." export JD_COOKIE="$tmp_jdCookie" fi } # 格式化时间 format_time() { for i in $@; do if [[ -n "$(echo $i | perl -pe "{s|\.||g}" | sed -n "/^[0-9]\+$/p")" ]]; then time_text=" $i 秒" elif [[ -n "$(echo $i | perl -pe "{s|\.\|s\|m\|h\|d||g}" | sed -n "/^[0-9]\+$/p")" ]]; then time_text="$(echo $i | perl -pe "{s|([a-z])(\d)+|\1 \2|g; s|s| 秒|g; s|m| 分|g; s|h| 小时|g; s|d| 天|g; s|^| |g; s|(\d+)$|\1 秒|g;}")" fi echo -n "$time_text" done } # Cookie 环境变量迭代导入 [[ $jdCookie_4 ]] && array=($(echo $jdCookie_4 | sed 's/&/ /g')) && user_sum=${#array[*]} ## 移除无效 Cookie [[ $Recombin_CK_Mode ]] && [[ $Remove_Void_CK = 1 ]] && remove_void_ck case $Recombin_CK_Mode in 1) combine_random $Recombin_CK_ARG1 ;; 2) combine_priority $Recombin_CK_ARG1 ;; 3) combine_rotation $Recombin_CK_ARG1 $Recombin_CK_ARG2 ;; 4) combine_team $Recombin_CK_ARG1 $Recombin_CK_ARG2 $Recombin_CK_ARG3 $Recombin_CK_ARG4 $Recombin_CK_ARG5 ;; 5) combine_segmentation $Recombin_CK_ARG1 $Recombin_CK_ARG2 $Recombin_CK_ARG3 $Recombin_CK_ARG4 ;; *) export JD_COOKIE="$tmp_jdCookie" ;; esac } ## 组合互助码格式化为全局变量的函数 combine_sub() { source $file_env local what_combine=$1 local combined_all="" local tmp1 tmp2 local TempBlockCookieInterval="$(echo $TempBlockCookie | perl -pe "{s|~|-|; s|_|-|}" | sed 's/\(\d\+\)-\(\d\+\)/{\1..\2}/g')" local TempBlockCookieArray=($(eval echo $TempBlockCookieInterval)) local envs=$(eval echo "\$JD_COOKIE") local array=($(echo $envs | sed 's/&/ /g')) local user_sum=${#array[*]} local a b i j t sum combined_all for ((i = 1; i <= $user_sum; i++)); do local tmp1=$what_combine$i local tmp2=${!tmp1} [[ ${tmp2} ]] && sum=$i || break done [[ ! $sum ]] && sum=$user_sum for ((j = 1; j <= $sum; j++)); do a=$temp_user_sum b=$sum if [[ $a -ne $b ]]; then for ((t = 0; t < ${#TempBlockCookieArray[*]}; t++)); do [[ "${TempBlockCookieArray[t]}" = "$j" ]] && continue 2 done fi local tmp1=$what_combine$j local tmp2=${!tmp1} combined_all="$combined_all&$tmp2" done echo $combined_all | perl -pe "{s|^&||; s|^@+||; s|&@|&|g; s|@+&|&|g; s|@+|@|g; s|@+$||}" } ## 正常依次运行时,组合互助码格式化为全局变量 combine_all() { for ((i = 0; i < ${#env_name[*]}; i++)); do result=$(combine_sub ${var_name[i]}) if [[ $result ]]; then export ${env_name[i]}="$result" fi done } ## 正常依次运行时,组合互助码格式化为全局变量 combine_only() { for ((i = 0; i < ${#env_name[*]}; i++)); do case $local_scr in *${name_js[i]}*.js | *${name_js[i]}*.ts) if [[ -f $dir_log/.ShareCode/${name_config[i]}.log ]]; then . $dir_log/.ShareCode/${name_config[i]}.log result=$(combine_sub ${var_name[i]}) if [[ $result ]]; then export ShareCodeConfigChineseName=${name_chinese[i]} export ShareCodeConfigName=${name_config[i]} export ShareCodeEnvName=${env_name[i]} fi fi ;; *) export ${env_name[i]}="" ;; esac done } ## 提前替换js基础依赖 JS_Deps_Replace() { if [ $js_deps_replace_envs ]; then local js_deps_replace_array=($(echo $js_deps_replace_envs | perl -pe "{s|&| |g}")) for i in "${js_deps_replace_array[@]}"; do local tmp_task_array=($(echo $i | perl -pe "{s|@| |g}")) local tmp_script_array=($(echo ${tmp_task_array[0]} | perl -pe "{s/\|/ /g}")) local tmp_skip_repo=($(echo ${tmp_task_array[1]} | perl -pe "{s/\|/ /g}")) for j in "${tmp_script_array[@]}"; do [[ ! $repo_dir ]] || [[ $repo_dir && ! ${tmp_skip_repo[@]} =~ $repo_dir ]] && [[ -f $dir_config/$j.js && $local_scr_dir ]] && cp -rvf $dir_config/$j.js $local_scr_dir/$j.js done done fi } [[ -f $dir_config/jdCookie.js && $local_scr_dir ]] && cp -rvf $dir_config/jdCookie.js $local_scr_dir/jdCookie.js JS_Deps_Replace TempBlock_CK Recombin_CK combine_only #if [[ $(ls $dir_code) ]]; then # latest_log=$(ls -r $dir_code | head -1) # . $dir_code/$latest_log # combine_all #fi