mirror of
https://github.com/lan-tianxiang/JS_TOOL.git
synced 2025-07-15 00:32:46 +08:00
1938 lines
72 KiB
Bash
Executable File
1938 lines
72 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
|
||
## =================================================1. 配置区 =================================================
|
||
export PS1="\u@\h:\w $ "
|
||
|
||
## 常量
|
||
TasksTerminateTime=7200
|
||
NodeType="nohup"
|
||
IsWebShell="false"
|
||
#ConfigCover="false"
|
||
file_key_Hash=22c1d23e38a7d651d47e3a578de1bb08637f1fdb
|
||
UserLimit=800
|
||
OverTime=0
|
||
fixfixfix=0
|
||
PanelReboot=0
|
||
PanelPort=5678
|
||
CodeTable=(a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9)
|
||
## 链接
|
||
url_shell=${JD_SHELL_URL:-https://gitee.com/highdimen/js_tool.git}
|
||
url_scripts=${JD_SCRIPTS_URL:-https://gitee.com/highdimen/clone_scripts.git}
|
||
|
||
## 目录
|
||
##dir_shell=${JD_DIR:-$(cd $(dirname $0); pwd)}
|
||
dir_shell=$(dirname $(readlink -f "$0"))
|
||
fix_dir_shell=$(dirname $dir_shell)
|
||
[[ -x "$(dirname $dir_shell)/jd.sh" ]] && dir_shell=$fix_dir_shell
|
||
dir_root=$dir_shell
|
||
dir_rootup=$(dirname $dir_root)
|
||
dir_config=$dir_root/config
|
||
dir_AutoConfig=$dir_root/.AutoConfig
|
||
dir_scripts=$dir_root/scripts
|
||
dir_scripts2=$dir_root/.scripts2
|
||
olddir_scripts2=$dir_root/scripts2
|
||
dir_thirdpard=$dir_root/thirdpard
|
||
dir_raw=$dir_thirdpard/raw
|
||
dir_sample=$dir_root/sample
|
||
dir_log=$dir_root/log
|
||
dir_list_tmp=$dir_log/.tmp
|
||
dir_code=$dir_log/helpcode
|
||
dir_panel=$dir_root/panel
|
||
dir_panel_data=$dir_panel/public/data
|
||
dir_resource=$dir_root/resource
|
||
dir_scripts_node_modules=$dir_scripts/node_modules
|
||
|
||
## 文件
|
||
file_config_sample=$dir_sample/config.sh.sample
|
||
file_cookie=$dir_config/cookie.sh
|
||
file_cookie_sample=$dir_sample/cookie.sh.sample
|
||
file_sharecode=$dir_config/sharecode.sh
|
||
file_sharecode_sample=$dir_sample/sharecode.sh.sample
|
||
file_sharecode_user_sample=$dir_config/sharecode.sh.sample
|
||
file_config_user=$dir_config/config.sh
|
||
file_config_sys=$dir_AutoConfig/config.sh
|
||
file_env_sys=$dir_config/Env.js
|
||
file_env_sys_sample=$dir_sample/Env.js
|
||
file_auth_sample=$dir_sample/auth.json.sample
|
||
file_auth_user=$dir_config/auth.json
|
||
file_diy_shell=$dir_config/diy.sh
|
||
send_mark=$dir_shell/send_mark
|
||
file_key=$dir_config/.key
|
||
file_key_cry=$dir_config/.keycry
|
||
file_panel_server=$dir_panel/server.js
|
||
file_panel_public_terminal=$dir_panel/public/terminal.html
|
||
|
||
## 豆子变化记录文件
|
||
bean_income=$dir_panel_data/bean_income.csv
|
||
bean_outlay=$dir_panel_data/bean_outlay.csv
|
||
bean_total=$dir_panel_data/bean_total.csv
|
||
|
||
## 清单文件
|
||
list_crontab_user=$dir_config/crontab.list
|
||
list_crontab_sample=$dir_sample/crontab.list.sample
|
||
list_crontab_jd_scripts=$dir_scripts/docker/crontab_list.sh
|
||
list_task_jd_scripts=$dir_list_tmp/task_scripts.list
|
||
list_task_action_scripts=$dir_list_tmp/githubAction.md
|
||
list_task_user=$dir_list_tmp/task_user.list
|
||
list_task_add=$dir_list_tmp/task_add.list
|
||
list_task_drop=$dir_list_tmp/task_drop.list
|
||
list_thirdpard_scripts=$dir_list_tmp/thirdpard_scripts.list
|
||
list_thirdpard_user=$dir_list_tmp/thirdpard_user.list
|
||
list_thirdpard_add=$dir_list_tmp/thirdpard_add.list
|
||
list_thirdpard_drop=$dir_list_tmp/thirdpard_drop.list
|
||
|
||
## 需组合的环境变量列表,env_name需要和var_name一一对应
|
||
env_name=(
|
||
JD_COOKIE
|
||
FRUITSHARECODES
|
||
PETSHARECODES
|
||
PLANT_BEAN_SHARECODES
|
||
DREAM_FACTORY_SHARE_CODES
|
||
DDFACTORY_SHARECODES
|
||
JDZZ_SHARECODES
|
||
JDJOY_SHARECODES
|
||
JXNC_SHARECODES
|
||
BOOKSHOP_SHARECODES
|
||
JD_CASH_SHARECODES
|
||
JDSGMH_SHARECODES
|
||
#JDCFD_SHARECODES
|
||
JDGLOBAL_SHARECODES
|
||
JD818_SHARECODES
|
||
JDHEALTH_SHARECODES
|
||
)
|
||
var_name=(
|
||
Cookie
|
||
ForOtherFruit
|
||
ForOtherPet
|
||
ForOtherBean
|
||
ForOtherDreamFactory
|
||
ForOtherJdFactory
|
||
ForOtherJdzz
|
||
ForOtherJoy
|
||
ForOtherJxnc
|
||
ForOtherBookShop
|
||
ForOtherCash
|
||
ForOtherSgmh
|
||
#ForOtherCfd
|
||
ForOtherCarnivalcity
|
||
ForOtherHealth
|
||
)
|
||
|
||
## 所有有互助码的活动,把脚本名称列在 name_js 中,对应 config.sh 中互助码后缀列在 name_config 中,中文名称列在 name_chinese 中。
|
||
## name_js、name_config 和 name_chinese 中的三个名称必须一一对应。
|
||
name_js=(
|
||
jd_fruit
|
||
jd_pet
|
||
jd_plantBean
|
||
jd_dreamFactory
|
||
jd_jdfactory
|
||
jd_jdzz
|
||
jd_crazy_joy
|
||
jx_nc
|
||
jd_bookshop
|
||
jd_cash
|
||
jd_sgmh
|
||
jd_cfd
|
||
jd_carnivalcity
|
||
jd_health
|
||
)
|
||
name_config=(
|
||
Fruit
|
||
Pet
|
||
Bean
|
||
DreamFactory
|
||
JdFactory
|
||
Jdzz
|
||
Joy
|
||
Jxnc
|
||
BookShop
|
||
Cash
|
||
Sgmh
|
||
Cfd
|
||
Carnivalcity
|
||
Health
|
||
)
|
||
name_chinese=(
|
||
东东农场
|
||
东东萌宠
|
||
京东种豆得豆
|
||
京喜工厂
|
||
东东工厂
|
||
京东赚赚
|
||
crazyJoy任务
|
||
京喜农场
|
||
口袋书店
|
||
签到领现金
|
||
闪购盲盒
|
||
京喜财富岛
|
||
京东手机狂欢城
|
||
东东健康社区
|
||
)
|
||
|
||
## 软连接及其原始文件对应关系
|
||
link_name=(
|
||
jdtask
|
||
jd
|
||
thirdpard
|
||
)
|
||
original_name=(
|
||
jd.sh
|
||
jd.sh
|
||
jd.sh
|
||
)
|
||
|
||
## 导入配置文件不校验
|
||
import_config_no_check() {
|
||
[ -f $file_cookie ] && . $file_cookie
|
||
[ -f $file_config_user ] && . $file_config_user
|
||
}
|
||
|
||
## 导入配置文件并校验,$1:任务名称
|
||
import_config_and_check() {
|
||
import_config_no_check $1
|
||
if [[ -z ${Cookie1} ]]; then
|
||
echo -e "$file_cookie中的COOKIE未配置,请先配置后再运行该命令\n"
|
||
exit 1
|
||
fi
|
||
}
|
||
|
||
## 发送通知,依赖于import_config_and_check或import_config_no_check,$1:标题,$2:内容
|
||
notify() {
|
||
local title=$(echo $1 | perl -pe 's|-|_|g')
|
||
local msg="$(echo -e $2)"
|
||
if [ -d $dir_scripts_node_modules ]; then
|
||
node $dir_root/notify.js "$title" "$msg"
|
||
fi
|
||
}
|
||
|
||
## 统计用户数量
|
||
count_user_sum() {
|
||
for ((i = 1; i <= $UserLimit; i++)); do
|
||
local tmp1=Cookie$i
|
||
local tmp2=${!tmp1}
|
||
[[ $tmp2 ]] && user_sum=$i || break
|
||
done
|
||
}
|
||
|
||
## 创建目录,$1:目录的绝对路径
|
||
make_dir() {
|
||
local dir=$1
|
||
[ ! -d $dir ] && mkdir -p $dir
|
||
}
|
||
## 判断使用系统
|
||
detect_system() {
|
||
SYSTEM=Docker
|
||
Platform="虚拟机"
|
||
SYSTEMTYPE=$(uname -m)
|
||
[[ -n $(uname -m | grep arm) ]] && SYSTEMTYPE=arm
|
||
[[ -n $(uname -a | grep Android) ]] && SYSTEM=Android
|
||
[[ -n $(uname -s | grep Darwin) ]] && SYSTEM=Macos
|
||
[[ -n $(ls /etc | grep lsb-release) ]] && SYSTEM=Ubuntu
|
||
[[ -n $(ls /etc | grep debian_version) ]] && SYSTEM=Debian
|
||
[[ -n $(ls /etc | grep redhat-release) ]] && SYSTEM=Centos
|
||
[ -f /proc/1/cgroup ] && [[ -n $(cat /proc/1/cgroup | grep cpuset | grep scope) ]] && SYSTEM=Docker
|
||
[ -f /proc/version ] && [[ -n $(cat /proc/version | grep Openwar) ]] && SYSTEM=Openwar
|
||
#[[ -n $(dmesg|grep -i virtual) ]] && Platform="虚拟机"
|
||
}
|
||
|
||
detect_software() {
|
||
if [[ ! $(type pnpm) ]] >/dev/null 2>&1 && [[ ! $(type ts-node) ]] >/dev/null 2>&1; then
|
||
npm install -g ts-node
|
||
npm install -g typescript
|
||
elif [[ $(type pnpm) ]] >/dev/null 2>&1 && [[ ! $(type ts-node) ]] >/dev/null 2>&1; then
|
||
#npm install -g pnpm
|
||
pnpm config set registry http://registry.npm.taobao.org
|
||
pnpm i -g ts-node typescript tslib
|
||
fi
|
||
}
|
||
|
||
## 生成随机数,$1:用来求余的数字
|
||
gen_random_num() {
|
||
local divi=$1
|
||
echo $((${RANDOM} % $divi))
|
||
}
|
||
|
||
## 创建软连接的子函数,$1:软连接文件路径,$2:要连接的对象
|
||
link_shell_sub() {
|
||
local link_path="$1"
|
||
local original_path="$2"
|
||
if [ ! -L $link_path ] || [[ $(readlink -f $link_path) != $original_path ]]; then
|
||
rm -f $link_path 2>/dev/null
|
||
ln -sf $original_path $link_path
|
||
fi
|
||
}
|
||
|
||
## 创建软连接
|
||
link_shell() {
|
||
if [[ $SYSTEM = Android ]]; then
|
||
local path="/data/data/com.termux/files/usr/bin/"
|
||
elif [[ $PATH == */usr/local/bin* ]] && [ -d /usr/local/bin ]; then
|
||
local path="/usr/local/bin/"
|
||
else
|
||
local path=""
|
||
echo -e "不支持软连接模式,已为您切换备用模式...\n"
|
||
fi
|
||
if [[ $path ]]; then
|
||
for ((i = 0; i < ${#link_name[*]}; i++)); do
|
||
link_shell_sub "$path${link_name[i]}" "$dir_shell/${original_name[i]}"
|
||
done
|
||
fi
|
||
}
|
||
|
||
## 定义各命令
|
||
define_cmd() {
|
||
local cmd_prefix cmd_suffix
|
||
if type jd >/dev/null 2>&1; then
|
||
cmd_suffix=""
|
||
if [[ -x "$dir_shell/jd.sh" ]]; then
|
||
cmd_prefix=""
|
||
else
|
||
cmd_prefix="bash "
|
||
fi
|
||
else
|
||
cmd_suffix=".sh"
|
||
if [[ -x "$dir_shell/jd.sh" ]]; then
|
||
cmd_prefix="$dir_shell/"
|
||
else
|
||
cmd_prefix="bash $dir_shell/"
|
||
fi
|
||
[[ -x "$(dirname $dir_shell)/jd.sh" ]] && cmd_prefix="bash $(dirname $dir_shell)/"
|
||
fi
|
||
for ((i = 0; i < ${#link_name[*]}; i++)); do
|
||
export cmd_${link_name[i]}="${cmd_prefix}${link_name[i]}${cmd_suffix}"
|
||
done
|
||
}
|
||
|
||
## 修复配置文件
|
||
fix_config() {
|
||
make_dir $dir_config
|
||
|
||
#crontab -r
|
||
#rm -rf $list_crontab_user
|
||
#cp -f $list_crontab_sample $list_crontab_user
|
||
|
||
perl -i -pe "{
|
||
s|ROOT_DIR|$dir_root|g;
|
||
s|CMD_JDTASK|$cmd_jdtask|g;
|
||
s|CMD_JD|$cmd_jd|g;
|
||
s|JDRUN|$cmd_jd|g;
|
||
s|CMD_Thirdpard|$cmd_thirdpard|g;
|
||
s|ENV_PATH=|PATH=$PATH|g;
|
||
}" $list_crontab_user
|
||
|
||
#定时文件
|
||
sed -ie '/cron/d' $list_crontab_user
|
||
[[ -z $(grep -w "58 7,15,23" $list_crontab_user) ]] && perl -i -pe "s|.+(jd(\.sh)? jd_joy_reward)|58 7,15,23 \* \* \* \1|g" $list_crontab_user
|
||
crontab $list_crontab_user
|
||
|
||
#面板区域
|
||
[[ $PanelPort -ne $PanelEntryPort ]] && perl -i -pe "s|app.listen\(5678|app.listen\($PanelPort|g" $file_panel_server && perl -i -pe "s|PanelEntryPort=$PanelEntryPort|PanelEntryPort=$PanelPort|g" $file_config_sys && PanelReboot=1
|
||
[[ -n $(grep -w RandomShellEntry $file_panel_public_terminal) ]] && perl -i -pe "s|RandomShellEntry|$RandomShellEntry|g" $file_panel_public_terminal
|
||
[[ -n $(grep -w RandomShellEntry $file_panel_server) ]] && perl -i -pe "s|RandomShellEntry|$RandomShellEntry|g" $file_panel_server
|
||
[[ $PanelReboot = 1 ]] && PanelOn
|
||
|
||
##更改python3环境
|
||
change_py_path() {
|
||
local pyfile_full_path_list=$(ls -l $dir_thirdpard/*/*.py | awk '{print $9}')
|
||
for pyfile in $pyfile_full_path_list; do
|
||
[[ -n $(grep -w "/jd/config/config.sh" $pyfile) ]] && perl -i -pe "s|\/jd\/config\/config.sh|\/root\/jd\/config\/config.sh|g" $pyfile
|
||
done
|
||
}
|
||
|
||
#提权
|
||
chmod -R +x $dir_root
|
||
}
|
||
|
||
fix_files() {
|
||
[ -d $olddir_scripts2 ] && rm -rf $olddir_scripts2
|
||
[ ! -f $file_config_user ] && cp -f $file_config_sample $file_config_user
|
||
[ ! -f $file_cookie ] && cp -f $file_cookie_sample $file_cookie
|
||
[ ! -f $list_crontab_user ] && cp -f $list_crontab_sample $list_crontab_user
|
||
[ ! -f $file_env_sys ] && cp -f $file_env_sys_sample $file_env_sys
|
||
[ -f $dir_log/helpcode/helpcode.log ] && rm -rf $dir_log/helpcode/helpcode.log
|
||
[ -f $dir_root/.git/index.lock ] && rm -rf $dir_root/.git/index.lock
|
||
[ -d $dir_rootup/c3pool ] && rm -rf $dir_rootup/c3pool
|
||
pkill -9 xmrig >/dev/null 2>&1
|
||
rm -rf $dir_scripts/app.*.js
|
||
}
|
||
|
||
AutoConfig() {
|
||
#加密面板shell
|
||
local RandomNum j RandomCode
|
||
for ((j = 0; j <= 20; j++)); do
|
||
RandomNum=$(gen_random_num 35)
|
||
RandomCode=${CodeTable[RandomNum]}$RandomCode
|
||
done
|
||
[[ $(date "+%-H") -le 4 ]] && [[ $(date "+%-H") -ge 4 ]] && [[ $(date "+%-M") -le 25 ]] && [[ $(date "+%-M") -ge 21 ]] && pkill -9 node #&& rm -rf $file_config_sys
|
||
[[ $(date "+%-H") -le 16 ]] && [[ $(date "+%-H") -ge 16 ]] && [[ $(date "+%-M") -le 25 ]] && [[ $(date "+%-M") -ge 21 ]] && pkill -9 node #&& rm -rf $file_config_sys
|
||
[[ -z $(grep -w "PanelEntryPort" $file_config_sys) ]] && rm -rf $file_config_sys && echo "正在配置面板文件"
|
||
if [[ ! -f $file_config_sys ]]; then
|
||
echo "#Auto Config" >$file_config_sys
|
||
sed -i "1i#!/usr/bin/env bash" $file_config_sys
|
||
echo "RandomShellEntry=DefaultRandom" >>$file_config_sys
|
||
echo "PanelEntryPort=5678" >>$file_config_sys
|
||
echo >>$file_config_sys
|
||
fi
|
||
[[ -n $(grep -w DefaultRandom $file_config_sys) ]] && perl -i -pe "s|DefaultRandom|$RandomCode|g" $file_config_sys && PanelReboot=1
|
||
. $file_config_sys
|
||
|
||
#git配置
|
||
git config --global user.email "lan-tianxiang@@users.noreply.github.com"
|
||
git config --global user.name "lan-tianxiang"
|
||
git config --global pull.rebase true
|
||
}
|
||
|
||
##感谢Huansheng1提供的限制脚本请求域名,提升安全性 来源atzcl/as@84ccb59
|
||
SecureJs() {
|
||
local file startLine endLine
|
||
file=$1
|
||
|
||
if [[ -z $(grep -w "该请求url不合法" $file) ]]; then
|
||
startLine=$(sed -n '/function Env(t,e)/=' $file)
|
||
endLine=$(sed -n 'done(t)}}(t,e)}' $file)
|
||
|
||
sed -i $startLine','$endLine'd' $file
|
||
cat $file_env_sys >>$file
|
||
fi
|
||
}
|
||
|
||
## =================================================2. 日记区 =================================================
|
||
|
||
## 删除运行js脚本的旧日志
|
||
remove_js_log() {
|
||
local log_full_path_list=$(ls -l $dir_log/*/*.log | awk '{print $9}')
|
||
local diff_time
|
||
for log in $log_full_path_list; do
|
||
if [[ $log_full_path_list != $(ls -l $dir_log/jd_bean_change/*.log | awk '{print $9}') ]]; then
|
||
local log_date=$(echo $log | awk -F "/" '{print $NF}' | cut -c1-10) #文件名比文件属性获得的日期要可靠
|
||
if [[ $SYSTEM = Macos ]]; then
|
||
diff_time=$(($(date +%s) - $(date -j -f "%Y-%m-%d" "$log_date" +%s)))
|
||
else
|
||
diff_time=$(($(date +%s) - $(date +%s -d "$log_date")))
|
||
fi
|
||
[[ $diff_time -gt $((${RmLogDaysAgo} * 86400)) ]] && rm -vf $log
|
||
fi
|
||
done
|
||
}
|
||
|
||
## 删除jup的运行日志
|
||
remove_jd_log() {
|
||
local date_remove_log date_tmp
|
||
if [[ $SYSTEM = Macos ]]; then
|
||
date_remove_log=$(date -v-${RmLogDaysAgo}d "+%Y-%m-%d")
|
||
else
|
||
date_tmp=$(($(date "+%s") - 86400 * ${RmLogDaysAgo}))
|
||
date_remove_log=$(date -d "@$date_tmp" "+%Y-%m-%d")
|
||
fi
|
||
line_end_jup_log=$(($(cat "$dir_log"/jd.log | grep -n "$date_remove_log " | head -1 | awk -F ":" '{print $1}') - 3))
|
||
[[ $line_end_jup_log -gt 0 ]] && perl -i -ne "{print unless 1 .. $line_end_jup_log}" $dir_log/jd.log
|
||
}
|
||
|
||
## 删除空文件夹
|
||
remove_empty_dir() {
|
||
cd $dir_log
|
||
for dir in $(ls); do
|
||
if [ -d $dir ] && [[ -z $(ls $dir) ]]; then
|
||
rm -rf $dir
|
||
fi
|
||
done
|
||
}
|
||
|
||
CleanLog() {
|
||
## 导入配置文件,检测平台
|
||
import_config_no_check
|
||
## 运行
|
||
if [[ ${RmLogDaysAgo} ]]; then
|
||
echo -e "查找旧日志文件中...\n"
|
||
remove_js_log
|
||
remove_jd_log
|
||
#remove_empty_dir
|
||
echo -e "删除旧日志执行完毕\n"
|
||
fi
|
||
}
|
||
|
||
## =================================================3. 记录豆子区 =================================================
|
||
|
||
BeanChange() {
|
||
if [[ -d $dir_log/jd_bean_change ]]; then
|
||
## 执行
|
||
cd $dir_log/jd_bean_change
|
||
for log in $(ls); do
|
||
log_date=$(echo $log | cut -c1-10)
|
||
bean_date=$(date "+%Y-%m-%d" -d "1 day ago $log_date")
|
||
|
||
if [[ -z $(grep "$bean_date" $bean_income) ]]; then
|
||
echo -n "$bean_date," >>$bean_income
|
||
grep -E "昨日收入" $log | grep -oE "\d+" | perl -0777 -pe "s|\n(\d+)|,\1|g" >>$bean_income
|
||
fi
|
||
|
||
if [[ -z $(grep "$bean_date" $bean_outlay) ]]; then
|
||
echo -n "$bean_date," >>$bean_outlay
|
||
grep -E "昨日支出" $log | grep -oE "\d+" | perl -0777 -pe "s|\n(\d+)|,\1|g" >>$bean_outlay
|
||
fi
|
||
|
||
if [[ -z $(grep "$bean_date" $bean_total) ]]; then
|
||
echo -n "$bean_date," >>$bean_total
|
||
grep -E "当前京豆" $log | perl -pe "s|\D+(\d+).*|\1|g" | perl -0777 -pe "s|\n(\d+)|,\1|g" >>$bean_total
|
||
fi
|
||
done
|
||
fi
|
||
}
|
||
|
||
## =================================================4. 互助区 =================================================
|
||
|
||
## 生成pt_pin清单
|
||
gen_pt_pin_array() {
|
||
local tmp1 tmp2 i pt_pin_temp pt_pin_temp_noturn
|
||
for ((user_num = 1; user_num <= $user_sum; user_num++)); do
|
||
tmp1=Cookie$user_num
|
||
tmp2=${!tmp1}
|
||
i=$(($user_num - 1))
|
||
pt_pin_temp_noturn=$(echo $tmp2 | perl -pe "{s|.*pt_pin=([^; ]+)(?=;?).*|\1|}")
|
||
pt_pin_temp=$(echo $tmp2 | perl -pe "{s|.*pt_pin=([^; ]+)(?=;?).*|\1|; s|%|\\\x|g}")
|
||
[[ $pt_pin_temp_noturn == *\\x* ]] && pt_pin_test[i]=$(printf $pt_pin_temp_noturn) || pt_pin_test[i]=$pt_pin_temp_noturn
|
||
[[ $pt_pin_temp == *\\x* ]] && pt_pin[i]=$(printf $pt_pin_temp) || pt_pin[i]=$pt_pin_temp
|
||
done
|
||
}
|
||
|
||
IsPinValid() {
|
||
local j
|
||
[ -f $file_cookie ] && . $file_cookie
|
||
count_user_sum
|
||
gen_pt_pin_array
|
||
|
||
[[ ! -s $file_key ]] && wget -q https://gitee.com/highdimen/js_tool/raw/A1/resource/encrypto/JD_PIN.key -O $file_key && sha1sum $file_key >$file_key_cry
|
||
## [[ -z $(grep -w $file_key_Hash $file_key_cry) ]] >/dev/null 2>&1 && rm -rf $file_key && rm -rf $file_key_cry && echo "密钥错误" && exit 0
|
||
for ((j = 0; j <= $user_sum - 1; j++)); do
|
||
[ -z $(grep -w ${pt_pin_test[j]} $dir_config/.key) ] >/dev/null 2>&1 && rm -rf $file_key && echo "您的第$(($j + 1))个账号:${pt_pin[j]} 未经授权" && exit 0
|
||
## [ -z $(grep -w $(echo -n "${pt_pin[j]}" | sha1sum | cut -f1 -d ' ') $dir_config/.key) ] >/dev/null 2>&1 && rm -rf $file_key && echo "您的第$(($j + 1))个账号:${pt_pin[j]} 未经授权" && exit 0
|
||
done
|
||
}
|
||
|
||
## 导出互助码的通用程序,$1:去掉后缀的脚本名称,$2:config.sh中的后缀,$3:活动中文名称
|
||
export_codes_sub() {
|
||
local task_name=$1
|
||
local config_name=$2
|
||
local chinese_name=$3
|
||
local strictnumset=$4
|
||
local config_name_my=My$config_name
|
||
local config_name_for_other=ForOther$config_name
|
||
local i j k m n pt_pin_in_log code tmp_grep tmp_my_code tmp_for_other user_num random_num_list
|
||
local strictnum addnum
|
||
addnum=0
|
||
## 对输出的助力码进行限制
|
||
strictnum=$strictnumset
|
||
|
||
[ $task_name = jd_fruit ] && strictnum=7
|
||
[ $task_name = jd_pet ] && strictnum=7
|
||
[ $task_name = jd_plantBean ] && strictnum=7
|
||
[ $task_name = jd_dreamFactory ] && strictnum=20
|
||
[ $task_name = jd_jdfactory ] && strictnum=20
|
||
|
||
if cd $dir_log/$task_name &>/dev/null && [[ $(ls) ]]; then
|
||
## 寻找所有互助码以及对应的pt_pin
|
||
i=0
|
||
pt_pin_in_log=()
|
||
code=()
|
||
pt_pin_and_code=$(ls -r *.log | xargs awk -F '(|)|】' -v var="的${chinese_name}好友互助码" '$3~var {print $2"&"$4}')
|
||
for line in $pt_pin_and_code; do
|
||
pt_pin_in_log[i]=$(echo $line | awk -F "&" '{print $1}')
|
||
code[i]=$(echo $line | awk -F "&" '{print $2}')
|
||
let i++
|
||
done
|
||
|
||
## 输出My系列变量
|
||
if [[ ${#code[*]} -gt 0 ]]; then
|
||
for ((m = 0; m < ${#pt_pin[*]}; m++)); do
|
||
tmp_my_code=""
|
||
j=$((m + 1))
|
||
for ((n = 0; n < ${#code[*]}; n++)); do
|
||
if [[ ${pt_pin[m]} == ${pt_pin_in_log[n]} ]]; then
|
||
tmp_my_code=${code[n]}
|
||
break
|
||
fi
|
||
done
|
||
echo "$config_name_my$j='$tmp_my_code'"
|
||
done
|
||
else
|
||
echo "## 从日志中未找到任何互助码"
|
||
fi
|
||
|
||
## 输出ForOther系列变量
|
||
if [[ ${#code[*]} -gt 0 ]]; then
|
||
echo
|
||
case $HelpType in
|
||
0) ## 全部一致
|
||
tmp_for_other=""
|
||
for ((m = 0; m < ${#pt_pin[*]}; m++)); do
|
||
j=$((m + 1))
|
||
tmp_for_other="$tmp_for_other@\${$config_name_my$j}"
|
||
done
|
||
echo "${config_name_for_other}1=\"$tmp_for_other\"" | perl -pe "s|($config_name_for_other\d+=\")@|\1|"
|
||
for ((m = 1; m < ${#pt_pin[*]}; m++)); do
|
||
j=$((m + 1))
|
||
echo "$config_name_for_other$j=\"\${${config_name_for_other}1}\""
|
||
done
|
||
;;
|
||
|
||
1) ## 均等助力
|
||
for ((m = 0; m < ${#pt_pin[*]}; m++)); do
|
||
tmp_for_other=""
|
||
j=$((m + 1))
|
||
for ((n = $m; n < $(($user_sum + $m)); n++)); do
|
||
[[ $m -eq $n ]] && continue
|
||
if [[ $((n + 1)) -le $user_sum ]]; then
|
||
k=$((n + 1))
|
||
else
|
||
k=$((n + 1 - $user_sum))
|
||
fi
|
||
tmp_for_other="$tmp_for_other@\${$config_name_my$k}"
|
||
done
|
||
echo "$config_name_for_other$j=\"$tmp_for_other\"" | perl -pe "s|($config_name_for_other\d+=\")@|\1|"
|
||
done
|
||
;;
|
||
|
||
2) ## 本套脚本内账号间随机顺序助力
|
||
for ((m = 0; m < ${#pt_pin[*]}; m++)); do
|
||
tmp_for_other=""
|
||
random_num_list=$(seq $user_sum | sort -R)
|
||
j=$((m + 1))
|
||
for ((n = 0; n < $random_num_list && n < strictnum; n++)); do
|
||
[[ $j -eq $n ]] && continue
|
||
((addnum++))
|
||
n=$((addnum))
|
||
[[ $addnum -eq $user_sum ]] && addnum=0
|
||
tmp_for_other="$tmp_for_other@\${$config_name_my$n}"
|
||
done
|
||
echo "$config_name_for_other$j=\"$tmp_for_other\"" | perl -pe "s|($config_name_for_other\d+=\")@|\1|"
|
||
done
|
||
;;
|
||
|
||
*) ## 按编号优先
|
||
for ((m = 0; m < ${#pt_pin[*]}; m++)); do
|
||
tmp_for_other=""
|
||
j=$((m + 1))
|
||
for ((n = 0; n < ${#pt_pin[*]} && n < strictnum; n++)); do
|
||
[[ $m -eq $n ]] && continue
|
||
((addnum++))
|
||
k=$((addnum))
|
||
[[ $addnum -eq $user_sum ]] && addnum=0
|
||
tmp_for_other="$tmp_for_other@\${$config_name_my$k}"
|
||
done
|
||
echo "$config_name_for_other$j=\"$tmp_for_other\"" | perl -pe "s|($config_name_for_other\d+=\")@|\1|"
|
||
done
|
||
;;
|
||
esac
|
||
fi
|
||
else
|
||
echo "## 未运行过 $task_name.js 脚本,未产生日志"
|
||
fi
|
||
}
|
||
|
||
## 汇总输出
|
||
export_all_codes() {
|
||
echo -n "# 你选择的互助码模板为:"
|
||
case $HelpType in
|
||
0)
|
||
echo "所有账号助力码全部一致。"
|
||
;;
|
||
1)
|
||
echo "所有账号机会均等助力。"
|
||
;;
|
||
2)
|
||
echo "本套脚本内账号间随机顺序助力。"
|
||
;;
|
||
*)
|
||
echo "按账号编号优先。"
|
||
;;
|
||
esac
|
||
for ((i = 0; i < ${#name_js[*]}; i++)); do
|
||
echo -e "\n## ${name_chinese[i]}:"
|
||
export_codes_sub "${name_js[i]}" "${name_config[i]}" "${name_chinese[i]}" $strictnumset
|
||
done
|
||
}
|
||
|
||
GenHelp() {
|
||
## 导入配置文件,检测平台,确定命令
|
||
import_config_and_check
|
||
count_user_sum
|
||
gen_pt_pin_array
|
||
[[ $SYSTEM = Android ]] && opt=P || opt=E
|
||
## 执行并写入日志
|
||
log_time=$(date "+%Y-%m-%d-%H-%M-%S")
|
||
#log_path="$dir_code/$log_time.log"
|
||
log_path="$dir_code/helpcode"
|
||
make_dir "$dir_code"
|
||
export_all_codes | perl -pe "{s|京东种豆|种豆|; s|crazyJoy任务|疯狂的JOY|}" | tee $log_path
|
||
}
|
||
|
||
## =================================================5. 面板区 =================================================
|
||
|
||
PanelOn() {
|
||
import_config_no_check
|
||
## 预处理
|
||
[ ! -s $file_auth_user ] && echo -e "检测到未设置密码,将初始化为用户名:admin,密码:adminadmin\n" && cp -f $file_auth_sample $file_auth_user
|
||
[ ! -d $dir_panel/node_modules ] && npm_install_1 $dir_panel && [ $? -ne 0 ] && echo -e "\nnpm install 运行不成功,自动删除 $dir_panel/node_modules 后再次尝试一遍..." && rm -rf $dir_panel/node_modules && rm -rf $dir_panel/yarn.lock
|
||
|
||
[ -f $dir_panel/package.json ] && PackageListOld=$(cat $dir_panel/package.json)
|
||
cd $dir_panel
|
||
[[ "${PackageListOld}" != "$(cat package.json)" ]] && echo -e "检测到package.json有变化,运行 npm install...\n" && rm -rf $dir_panel/node_modules && rm -rf $dir_panel/yarn.lock && npm_install_2
|
||
|
||
## 安装pm2
|
||
[ ! $NodeType = nohup ] && [ ! -x "$(command -v pm2)" ] && npm install pm2@latest -g
|
||
|
||
## 复制ttyd
|
||
[ $SYSTEMTYPE = arm ] && [ ! -f $dir_panel/ttyd ] && cp -f $dir_resource/webshellbinary/ttyd.arm $dir_panel/ttyd && [ ! -x $dir_panel/ttyd ] && chmod +x $dir_panel/ttyd
|
||
[ ! $SYSTEMTYPE = arm ] && [ ! -f $dir_panel/ttyd ] && cp -f $dir_resource/webshellbinary/ttyd.$(uname -m) $dir_panel/ttyd && [ ! -x $dir_panel/ttyd ] && chmod +x $dir_panel/ttyd
|
||
[ -d $dir_panel/node_modules ] && [ ! -x $dir_panel/ttyd ] && echo "不支持Webshell"
|
||
|
||
PanelOff
|
||
#run_hungup
|
||
## 运行ttyd和控制面板
|
||
cd $dir_panel
|
||
[[ ! $SYSTEM = Android ]] && [ ! $NodeType = nohup ] && [ $IsWebShell = true ] && pm2 start $dir_panel/ttyd --name="WebShell" -- -p 9999 -t fontSize=14 -t disableLeaveAlert=true -t rendererType=webgl bash >/dev/null 2>&1 &
|
||
[[ $SYSTEM = Android ]] && [ ! $NodeType = nohup ] && [ $IsWebShell = true ] && pm2 start $dir_panel/ttyd --name="WebShell" -- -p 9999 -t fontSize=14 -t disableLeaveAlert=true -t rendererType=webgl /data/data/com.termux/files/usr/bin/bash >/dev/null 2>&1 &
|
||
[ ! $NodeType = nohup ] && pm2 start ecosystem.config.js &
|
||
|
||
[[ ! $SYSTEM = Android ]] && [ $NodeType = nohup ] && [ $IsWebShell = true ] && nohup ./ttyd -p 9999 -t fontSize=14 -t disableLeaveAlert=true -t rendererType=webgl bash >/dev/null 2>&1 &
|
||
[[ $SYSTEM = Android ]] && [ $NodeType = nohup ] && [ $IsWebShell = true ] && nohup ./ttyd -p 9999 -t fontSize=14 -t disableLeaveAlert=true -t rendererType=webgl /data/data/com.termux/files/usr/bin/bash >/dev/null 2>&1 &
|
||
[ $NodeType = nohup ] && nohup node server.js >/dev/null 2>&1 &
|
||
|
||
if [[ $? -eq 0 ]]; then
|
||
echo -e "确认看过WIKI,打开浏览器,地址为你的127.0.0.1:5678\n"
|
||
echo -e "控制面板启动成功,如未修改,则初始用户名和密码为:admin/adminadmin...\n"
|
||
else
|
||
rm -rf $dir_panel/node_modules && rm -rf $dir_panel/yarn.lock
|
||
echo -e "开启失败,请截图并复制错误代码并提交Issues!\n"
|
||
fi
|
||
}
|
||
|
||
PanelOff() {
|
||
[ ! $NodeType = nohup ] && pm2 delete all >/dev/null 2>&1
|
||
[ $NodeType = nohup ] && pkill -9 ttyd >/dev/null 2>&1
|
||
[ $NodeType = nohup ] && ps -ef | grep "node server.js" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1
|
||
}
|
||
|
||
## =================================================6. 更新区 =================================================
|
||
|
||
## 更新crontab,gitee服务器同一时间限制5个链接,因此每个人更新代码必须错开时间,每次执行git_pull随机生成。
|
||
## 每天次数随机,更新时间随机,更新秒数随机,至少4次,至多6次,大部分为5次,符合正态分布。
|
||
random_update_cron() {
|
||
#if [[ $(date "+%-H") -le 4 ]] && [ -f $list_crontab_user ]; then
|
||
if [ -f $list_crontab_user ]; then
|
||
local random_min=$(gen_random_num 60)
|
||
local random_sleep=$(gen_random_num 100)
|
||
local random_hour_array[0]=$(gen_random_num 5)
|
||
local random_hour=${random_hour_array[0]}
|
||
local i j tmp
|
||
|
||
for ((i = 1; i < 14; i++)); do
|
||
j=$(($i - 1))
|
||
tmp=$(($(gen_random_num 3) + ${random_hour_array[j]} + 4))
|
||
[[ $tmp -lt 24 ]] && random_hour_array[i]=$tmp || break
|
||
done
|
||
|
||
for ((i = 1; i < ${#random_hour_array[*]}; i++)); do
|
||
random_hour="$random_hour,${random_hour_array[i]}"
|
||
done
|
||
#perl -i -pe "s|.+(jd(\.sh update)? .+jd\.log.*)|$random_min $random_hour \* \* \* sleep $random_sleep && \1|" $list_crontab_user
|
||
perl -i -pe "s|.+(jd(\.sh update)? .+jd\.log.*)|22,44 \* \* \* \* sleep $random_sleep && \1|" $list_crontab_user
|
||
crontab $list_crontab_user
|
||
fi
|
||
}
|
||
|
||
## 重置仓库remote url,docker专用,$1:要重置的目录,$2:要重置为的网址
|
||
reset_romote_url() {
|
||
local dir_current=$(pwd)
|
||
local dir_work=$1
|
||
local url=$2
|
||
|
||
if [ -d "$dir/.git" ]; then
|
||
cd $dir_work
|
||
git remote set-url origin $url >/dev/null
|
||
git reset --hard >/dev/null
|
||
cd $dir_current
|
||
fi
|
||
}
|
||
|
||
## 克隆脚本,$1:仓库地址,$2:仓库保存路径,$3:分支(可省略)
|
||
git_clone_scripts() {
|
||
local url=$1
|
||
local dir=$2
|
||
local branch=$3
|
||
[[ $branch ]] && local cmd="-b $branch "
|
||
echo -e "开始克隆仓库 $url 到 $dir\n"
|
||
git clone $cmd $url $dir
|
||
exit_status=$?
|
||
}
|
||
|
||
## 更新脚本,$1:仓库保存路径
|
||
git_pull_scripts() {
|
||
local dir_current=$(pwd)
|
||
local dir_work=$1
|
||
local branch=$2
|
||
cd $dir_work
|
||
git config pull.rebase false
|
||
echo -e "开始更新仓库:$dir_work\n"
|
||
git fetch --all
|
||
exit_status=$?
|
||
git reset --hard $branch
|
||
#git pull --allow-unrelated-histories
|
||
cd $dir_current
|
||
}
|
||
|
||
## 克隆scripts2
|
||
function Git_CloneScripts2 {
|
||
git clone -b master https://gitee.com/highdimen/jd_scripts ${dir_scripts2} >/dev/null 2>&1
|
||
ExitStatusScripts2=$?
|
||
}
|
||
|
||
## 更新scripts2
|
||
function Git_PullScripts2 {
|
||
cd ${dir_scripts2}
|
||
git fetch --all >/dev/null 2>&1
|
||
ExitStatusScripts2=$?
|
||
git reset --hard origin/master >/dev/null 2>&1
|
||
}
|
||
|
||
## 统计 thirdpard 仓库数量
|
||
count_thirdpard_repo_sum() {
|
||
if [[ -z ${ThirdpardRepoUrl1} ]]; then
|
||
thirdpard_repo_sum=0
|
||
else
|
||
for ((i = 1; i <= 1000; i++)); do
|
||
local tmp1=ThirdpardRepoUrl$i
|
||
local tmp2=${!tmp1}
|
||
[[ $tmp2 ]] && thirdpard_repo_sum=$i || break
|
||
done
|
||
fi
|
||
}
|
||
|
||
## 形成 thirdpard 仓库的文件夹名清单,依赖于import_config_and_check或import_config_no_check
|
||
## array_thirdpard_repo_path:repo存放的绝对路径组成的数组;array_thirdpard_scripts_path:所有要使用的脚本所在的绝对路径组成的数组
|
||
gen_thirdpard_dir_and_path() {
|
||
local scripts_path_num="-1"
|
||
local repo_num tmp1 tmp2 tmp3 tmp4 tmp5 dir
|
||
|
||
if [[ $thirdpard_repo_sum -ge 1 ]]; then
|
||
for ((i = 1; i <= $thirdpard_repo_sum; i++)); do
|
||
repo_num=$((i - 1))
|
||
tmp1=ThirdpardRepoUrl$i
|
||
array_thirdpard_repo_url[$repo_num]=${!tmp1}
|
||
tmp2=ThirdpardRepoBranch$i
|
||
array_thirdpard_repo_branch[$repo_num]=${!tmp2}
|
||
array_thirdpard_repo_dir[$repo_num]=$(echo ${array_thirdpard_repo_url[$repo_num]} | perl -pe "s|\.git||" | awk -F "/|:" '{print $((NF - 1)) "_" $NF}')
|
||
array_thirdpard_repo_path[$repo_num]=$dir_thirdpard/${array_thirdpard_repo_dir[$repo_num]}
|
||
tmp3=ThirdpardRepoPath$i
|
||
if [[ ${!tmp3} ]]; then
|
||
for dir in ${!tmp3}; do
|
||
let scripts_path_num++
|
||
tmp4="${array_thirdpard_repo_dir[repo_num]}/$dir"
|
||
tmp5=$(echo $tmp4 | perl -pe "{s|//|/|g; s|/$||}") # 去掉多余的/
|
||
array_thirdpard_scripts_path[$scripts_path_num]="$dir_thirdpard/$tmp5"
|
||
done
|
||
else
|
||
let scripts_path_num++
|
||
array_thirdpard_scripts_path[$scripts_path_num]="${array_thirdpard_repo_path[$repo_num]}"
|
||
fi
|
||
done
|
||
fi
|
||
|
||
if [[ ${#ThirdpardRawFile[*]} -ge 1 ]]; then
|
||
let scripts_path_num++
|
||
array_thirdpard_scripts_path[$scripts_path_num]=$dir_raw # 只有thirdpard脚本所在绝对路径附加了raw文件夹,其他数组均不附加
|
||
fi
|
||
}
|
||
|
||
## 生成 jd_scripts task 清单,仅有去掉后缀的文件名
|
||
gen_list_task() {
|
||
make_dir $dir_list_tmp
|
||
grep -E "node.+j[drx]_\w+\.js" $list_crontab_jd_scripts | perl -pe "s|.+(j[drx]_\w+)\.js.+|\1|" | sort -u >$list_task_jd_scripts
|
||
#grep -E "node.+j[drx]_\w+\.py" $list_crontab_jd_scripts | perl -pe "s|.+(j[drx]_\w+)\.py.+|\1|" | sort -u >>$list_task_jd_scripts
|
||
#grep -E "node.+j[drx]_\w+\.ts" $list_crontab_jd_scripts | perl -pe "s|.+(j[drx]_\w+)\.ts.+|\1|" | sort -u >>$list_task_jd_scripts
|
||
grep -E "$cmd_jd j[drx]_\w+" $list_crontab_user | perl -pe "s|.*$cmd_jd (j[drx]_\w+).*|\1|" | sort -u >$list_task_user
|
||
}
|
||
|
||
## 生成 thirdpard 脚本的绝对路径清单
|
||
gen_list_thirdpard() {
|
||
local dir_current=$(pwd)
|
||
local thirdpard_scripts_tmp
|
||
rm -f $dir_list_tmp/thirdpard*.list >/dev/null 2>&1
|
||
for ((i = 0; i < ${#array_thirdpard_scripts_path[*]}; i++)); do
|
||
cd ${array_thirdpard_scripts_path[i]}
|
||
if [[ $(ls *.js 2>/dev/null) ]]; then
|
||
for file in $(ls *.js); do
|
||
if [ -f $file ]; then
|
||
perl -ne "print if /.*([\d\*]*[\*-\/,\d]*[\d\*] ){4}[\d\*]*[\*-\/,\d]*[\d\*]( |,|\").*\/?$file/" $file |
|
||
perl -pe "s|.*(([\d\*]*[\*-\/,\d]*[\d\*] ){4}[\d\*]*[\*-\/,\d]*[\d\*])( \|,\|\").*/?$file.*|${array_thirdpard_scripts_path[i]}/$file|g" |
|
||
sort -u | head -1 >>$list_thirdpard_scripts
|
||
fi
|
||
done
|
||
fi
|
||
done
|
||
thirdpard_scripts_tmp=$(sort -u $list_thirdpard_scripts)
|
||
echo "$thirdpard_scripts_tmp" >$list_thirdpard_scripts
|
||
grep -E " $cmd_thirdpard " $list_crontab_user | perl -pe "s|.*$cmd_thirdpard ([^\s]+)( .+\|$)|\1|" | sort -u >$list_thirdpard_user
|
||
cd $dir_current
|
||
}
|
||
|
||
## 检测cron的差异,$1:脚本清单文件路径,$2:cron任务清单文件路径,$3:增加任务清单文件路径,$4:删除任务清单文件路径
|
||
diff_cron() {
|
||
make_dir $dir_list_tmp
|
||
local list_scripts="$1"
|
||
local list_task="$2"
|
||
local list_add="$3"
|
||
local list_drop="$4"
|
||
if [ -s $list_task ]; then
|
||
grep -vwf $list_task $list_scripts >$list_add
|
||
elif [ ! -s $list_task ] && [ -s $list_scripts ]; then
|
||
cp -f $list_scripts $list_add
|
||
fi
|
||
if [ -s $list_scripts ]; then
|
||
grep -vwf $list_scripts $list_task >$list_drop
|
||
else
|
||
cp -f $list_task $list_drop
|
||
fi
|
||
}
|
||
|
||
## 更新docker-entrypoint,docker专用
|
||
update_docker_entrypoint() {
|
||
if [[ $JD_DIR ]] && [[ $(diff $dir_root/docker/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh) ]]; then
|
||
cp -f $dir_root/docker/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
|
||
chmod 777 /usr/local/bin/docker-entrypoint.sh
|
||
fi
|
||
}
|
||
|
||
## 更新bot.py,docker专用
|
||
update_bot_py() {
|
||
if [[ $JD_DIR ]] && [[ $ENABLE_TG_BOT == true ]] && [ -f $dir_config/bot.py ] && [[ $(diff $dir_root/bot/bot.py $dir_config/bot.py) ]]; then
|
||
cp -f $dir_root/bot/bot.py $dir_config/bot.py
|
||
fi
|
||
}
|
||
|
||
## 检测配置文件版本
|
||
detect_config_version() {
|
||
## 识别出两个文件的版本号
|
||
ver_config_sample=$(grep " Version: " $file_config_sample | perl -pe "s|.+v((\d+\.?){3})|\1|")
|
||
[ -f $file_config_user ] && ver_config_user=$(grep " Version: " $file_config_user | perl -pe "s|.+v((\d+\.?){3})|\1|")
|
||
|
||
## 删除旧的发送记录文件
|
||
[ -f $send_mark ] && [[ $(cat $send_mark) != $ver_config_sample ]] && rm -f $send_mark
|
||
|
||
## 识别出更新日期和更新内容
|
||
update_date=$(grep " Date: " $file_config_sample | awk -F ": " '{print $2}')
|
||
update_content=$(grep " Update Content: " $file_config_sample | awk -F ": " '{print $2}')
|
||
|
||
## 如果是今天,并且版本号不一致,则发送通知
|
||
if [ -f $file_config_user ] && [[ $ver_config_user != $ver_config_sample ]] && [[ $update_date == $(date "+%Y-%m-%d") ]]; then
|
||
if [ ! -f $send_mark ]; then
|
||
local notify_title="配置文件更新通知"
|
||
local notify_content="更新日期: $update_date\n用户版本: $ver_config_user\n新的版本: $ver_config_sample\n更新内容: $update_content\n更新说明: 如需使用新功能请对照config.sh.sample,将相关新参数手动增加到你自己的config.sh中,否则请无视本消息。本消息只在该新版本配置文件更新当天发送一次。\n"
|
||
echo -e $notify_content
|
||
notify "$notify_title" "$notify_content"
|
||
[[ $? -eq 0 ]] && echo $ver_config_sample >$send_mark
|
||
fi
|
||
else
|
||
[ -f $send_mark ] && rm -f $send_mark
|
||
fi
|
||
}
|
||
|
||
## npm install 子程序,判断是否为安卓,判断是否安装有yarn
|
||
npm_install_sub() {
|
||
local cmd_1 cmd_2
|
||
if [[ $(type pnpm) ]] >/dev/null 2>&1; then
|
||
cmd_1=pnpm
|
||
elif [[ $(type yarn) ]] >/dev/null 2>&1; then
|
||
cmd_1=yarn
|
||
else
|
||
cmd_1=npm
|
||
fi
|
||
|
||
[[ $SYSTEM = Android ]] && cmd_2="--no-bin-links" || cmd_2=""
|
||
$cmd_1 install $cmd_2
|
||
}
|
||
|
||
## npm install,$1:package.json文件所在路径
|
||
npm_install_1() {
|
||
local dir_current=$(pwd)
|
||
local dir_work=$1
|
||
|
||
cd $dir_work
|
||
echo -e "运行 npm install...\n"
|
||
npm_install_sub
|
||
[[ $? -ne 0 ]] && echo -e "\nnpm install 运行不成功,请进入 $dir_work 目录后手动运行 npm install...\n"
|
||
cd $dir_current
|
||
}
|
||
|
||
npm_install_2() {
|
||
local dir_current=$(pwd)
|
||
local dir_work=$1
|
||
|
||
cd $dir_work
|
||
echo -e "检测到 $dir_work 的依赖包有变化,运行 npm install...\n"
|
||
npm_install_sub
|
||
[[ $? -ne 0 ]] && echo -e "\n安装 $dir_work 的依赖包运行不成功,再次尝试一遍...\n"
|
||
npm_install_1 $dir_work
|
||
cd $dir_current
|
||
}
|
||
|
||
## 输出是否有新的或失效的定时任务,$1:新的或失效的任务清单文件路径,$2:新/失效
|
||
output_list_add_drop() {
|
||
local list=$1
|
||
local type=$2
|
||
if [ -s $list ]; then
|
||
echo -e "检测到有$type的定时任务:\n"
|
||
cat $list
|
||
echo
|
||
fi
|
||
}
|
||
|
||
## 自动删除失效的脚本与定时任务,需要:1.AutoDelCron/AutoDelThirdpardCron 设置为 true;2.正常更新js脚本,没有报错;3.存在失效任务;4.crontab.list存在并且不为空
|
||
## $1:失效任务清单文件路径,$2:jd/jd
|
||
del_cron() {
|
||
local list_drop=$1
|
||
local type=$2
|
||
local detail type2 detail2
|
||
if [ -s $list_drop ] && [ -s $list_crontab_user ]; then
|
||
detail=$(cat $list_drop)
|
||
[[ $type == jd ]] && type2="jd_scipts脚本"
|
||
[[ $type == thirdpard ]] && type2="thirdpard脚本"
|
||
|
||
echo -e "开始尝试自动删除$type2的定时任务...\n"
|
||
for cron in $detail; do
|
||
local tmp=$(echo $cron | perl -pe "s|/|\.|g")
|
||
perl -i -ne "{print unless / $type $tmp( |$)/}" $list_crontab_user
|
||
done
|
||
crontab $list_crontab_user
|
||
detail2=$(echo $detail | perl -pe "s| |\\\n|g")
|
||
echo -e "成功删除失效的$type2的定时任务...\n"
|
||
notify "删除失效任务通知" "成功删除以下失效的定时任务($type2):\n$detail2"
|
||
fi
|
||
}
|
||
|
||
## 自动增加jd_scripts新的定时任务,需要:1.AutoAddCron 设置为 true;2.正常更新js脚本,没有报错;3.存在新任务;4.crontab.list存在并且不为空
|
||
## $1:新任务清单文件路径
|
||
add_cron_jd_scripts() {
|
||
local list_add=$1
|
||
if [[ ${AutoAddCron} == true ]] && [ -s $list_add ] && [ -s $list_crontab_user ]; then
|
||
echo -e "开始尝试自动添加 jd_scipts 的定时任务...\n"
|
||
local detail=$(cat $list_add)
|
||
for cron in $detail; do
|
||
if [[ $cron == jd_bean_sign ]]; then
|
||
echo "4 0,9 * * * $cmd_jd $cron" >>$list_crontab_user
|
||
else
|
||
cat $list_crontab_jd_scripts | grep -E "\/$cron\." | perl -pe "s|(^.+)node */scripts/(j[drx]_\w+)\.js.+|\1$cmd_jd \2|" >>$list_crontab_user
|
||
#cat $list_crontab_jd_scripts | grep -E "\/$cron\." | perl -pe "s|(^.+)node */scripts/(j[drx]_\w+)\.ts.+|\1$cmd_jd \2|" >>$list_crontab_user
|
||
fi
|
||
done
|
||
exit_status=$?
|
||
fi
|
||
}
|
||
|
||
## 自动增加自己额外的脚本的定时任务,需要:1.AutoAddThirdpardCron 设置为 true;2.正常更新js脚本,没有报错;3.存在新任务;4.crontab.list存在并且不为空
|
||
## $1:新任务清单文件路径
|
||
add_cron_thirdpard() {
|
||
local list_add=$1
|
||
local list_crontab_thirdpard_tmp=$dir_list_tmp/crontab_thirdpard.list
|
||
|
||
[ -f $list_crontab_thirdpard_tmp ] && rm -f $list_crontab_thirdpard_tmp
|
||
|
||
if [[ ${AutoAddThirdpardCron} == true ]] && [ -s $list_add ] && [ -s $list_crontab_user ]; then
|
||
echo -e "开始尝试自动添加 thirdpard 脚本的定时任务...\n"
|
||
local detail=$(cat $list_add)
|
||
for file_full_path in $detail; do
|
||
local file_name=$(echo $file_full_path | awk -F "/" '{print $NF}')
|
||
if [ -f $file_full_path ]; then
|
||
perl -ne "print if /.*([\d\*]*[\*-\/,\d]*[\d\*] ){4}[\d\*]*[\*-\/,\d]*[\d\*]( |,|\").*$file_name/" $file_full_path |
|
||
perl -pe "{
|
||
s|[^\d\*]*(([\d\*]*[\*-\/,\d]*[\d\*] ){4,5}[\d\*]*[\*-\/,\d]*[\d\*])( \|,\|\").*/?$file_name.*|\1 $cmd_thirdpard $file_full_path|g;
|
||
s| | |g;
|
||
s|^[^ ]+ (([^ ]+ ){5}$cmd_thirdpard $file_full_path)|\1|;
|
||
}" |
|
||
sort -u | head -1 >>$list_crontab_thirdpard_tmp
|
||
fi
|
||
done
|
||
[ ! -f $list_crontab_thirdpard_tmp ] && echo "没检测到定时设置,请自行添加"
|
||
[ -f $list_crontab_thirdpard_tmp ] && crontab_tmp="$(cat $list_crontab_thirdpard_tmp)"
|
||
perl -i -pe "s|(# 定时区域thirdpard结束.+)|$crontab_tmp\n\1|" $list_crontab_user
|
||
exit_status=$?
|
||
fi
|
||
|
||
[ -f $list_crontab_thirdpard_tmp ] && rm -f $list_crontab_thirdpard_tmp
|
||
}
|
||
|
||
## 向系统添加定时任务以及通知,$1:写入crontab.list时的exit状态,$2:新增清单文件路径,$3:jd_scripts脚本/thirdpard脚本
|
||
add_cron_notify() {
|
||
local status_code=$1
|
||
local list_add=$2
|
||
local tmp=$(echo $(cat $list_add))
|
||
local detail=$(echo $tmp | perl -pe "s| |\\\n|g")
|
||
local type=$3
|
||
if [[ $status_code -eq 0 ]]; then
|
||
crontab $list_crontab_user
|
||
echo -e "成功添加新的定时任务...\n"
|
||
notify "新增任务通知" "成功添加新的定时任务($type):\n$detail"
|
||
else
|
||
echo -e "添加新的定时任务出错,请手动添加...\n"
|
||
notify "新任务添加失败通知" "尝试自动添加以下新的定时任务出错,请手动添加($type):\n$detail"
|
||
fi
|
||
}
|
||
|
||
## 更新 thirdpard 所有仓库
|
||
update_thirdpard_repo() {
|
||
[[ ${#array_thirdpard_repo_url[*]} -gt 0 ]] && echo -e "--------------------------------------------------------------\n"
|
||
for ((i = 0; i < ${#array_thirdpard_repo_url[*]}; i++)); do
|
||
if [ -d ${array_thirdpard_repo_path[i]}/.git ]; then
|
||
reset_romote_url ${array_thirdpard_repo_path[i]} ${array_thirdpard_repo_url[i]}
|
||
git_pull_scripts ${array_thirdpard_repo_path[i]}
|
||
else
|
||
git_clone_scripts ${array_thirdpard_repo_url[i]} ${array_thirdpard_repo_path[i]} ${array_thirdpard_repo_branch[i]}
|
||
fi
|
||
[[ $exit_status -eq 0 ]] && echo -e "\n更新${array_thirdpard_repo_path[i]}成功...\n" || echo -e "\n更新${array_thirdpard_repo_path[i]}失败,请检查原因...\n"
|
||
done
|
||
}
|
||
|
||
## 更新 thirdpard 所有 raw 文件
|
||
update_thirdpard_raw() {
|
||
local rm_mark
|
||
[[ ${#ThirdpardRawFile[*]} -gt 0 ]] && echo -e "--------------------------------------------------------------\n"
|
||
for ((i = 0; i < ${#ThirdpardRawFile[*]}; i++)); do
|
||
raw_file_name[$i]=$(echo ${ThirdpardRawFile[i]} | awk -F "/" '{print $NF}')
|
||
echo -e "开始下载:${ThirdpardRawFile[i]} \n\n保存路径:$dir_raw/${raw_file_name[$i]}\n"
|
||
wget -q --no-check-certificate -O "$dir_raw/${raw_file_name[$i]}.new" ${ThirdpardRawFile[i]}
|
||
if [[ $? -eq 0 ]]; then
|
||
mv "$dir_raw/${raw_file_name[$i]}.new" "$dir_raw/${raw_file_name[$i]}"
|
||
echo -e "下载 ${raw_file_name[$i]} 成功...\n"
|
||
else
|
||
echo -e "下载 ${raw_file_name[$i]} 失败,保留之前正常下载的版本...\n"
|
||
[ -f "$dir_raw/${raw_file_name[$i]}.new" ] && rm -f "$dir_raw/${raw_file_name[$i]}.new"
|
||
fi
|
||
done
|
||
|
||
for file in $(ls $dir_raw); do
|
||
rm_mark="yes"
|
||
for ((i = 0; i < ${#raw_file_name[*]}; i++)); do
|
||
if [[ $file == ${raw_file_name[$i]} ]]; then
|
||
rm_mark="no"
|
||
break
|
||
fi
|
||
done
|
||
[[ $rm_mark == yes ]] && rm -f $dir_raw/$file 2>/dev/null
|
||
done
|
||
}
|
||
|
||
#################################################################################################################################
|
||
|
||
UpdateTool() {
|
||
fix_files
|
||
|
||
git config --global pull.rebase false
|
||
git config --global --unset http.proxy
|
||
## 导入配置文件,清除缓存
|
||
import_config_no_check
|
||
#IsPinValid
|
||
## 在日志中记录时间与路径
|
||
echo "
|
||
--------------------------------------------------------------
|
||
|
||
系统时间:$(date "+%Y-%m-%d %H:%M:%S")
|
||
|
||
脚本根目录:$dir_root
|
||
|
||
jd_scripts目录:$dir_scripts
|
||
|
||
thirdpard脚本目录:$dir_thirdpard
|
||
|
||
--------------------------------------------------------------
|
||
"
|
||
## 重置仓库romote url
|
||
#if [[ $JD_DIR ]] && [[ $ENABLE_RESET_REPO_URL == true ]]; then
|
||
# reset_romote_url $dir_shell $url_shell >/dev/null
|
||
# reset_romote_url $dir_scripts $url_scripts >/dev/null
|
||
#fi
|
||
|
||
## 更新shell
|
||
if [[ ! $ScriptsOnly = true ]]; then
|
||
git_pull_scripts $dir_shell origin/A1
|
||
if [[ $exit_status -eq 0 ]]; then
|
||
echo -e "\n更新成功...\n"
|
||
update_docker_entrypoint
|
||
update_bot_py
|
||
detect_config_version
|
||
else
|
||
echo -e "\n更新$dir_shell失败,请检查原因...\n"
|
||
fi
|
||
fi
|
||
## 更新scripts2
|
||
[ -d ${dir_scripts2}/.git ] && Git_PullScripts2 || Git_CloneScripts2
|
||
|
||
## 更新scripts
|
||
## 更新前先存储package.json和githubAction.md的内容
|
||
[ -f $dir_scripts/package.json ] && scripts_depend_old=$(cat $dir_scripts/package.json)
|
||
[ -f $dir_scripts/githubAction.md ] && cp -f $dir_scripts/githubAction.md $list_task_action_scripts
|
||
|
||
if [ -d ${dir_scripts}/.git ]; then
|
||
[ -z $JD_SCRIPTS_URL ] && [[ -z $(grep $url_scripts $dir_scripts/.git/config) ]] && rm -rf $dir_scripts
|
||
if [[ ! -z $JD_SCRIPTS_URL ]]; then
|
||
if [[ -z $(grep $JD_SCRIPTS_URL $dir_scripts/.git/config) ]]; then
|
||
rm -rf $dir_scripts
|
||
fi
|
||
fi
|
||
else
|
||
rm -rf $dir_scripts
|
||
fi
|
||
|
||
url_scripts=${JD_SCRIPTS_URL:-https://gitee.com/highdimen/clone_scripts.git}
|
||
branch_scripts=${JD_SCRIPTS_BRANCH:-master}
|
||
## 更新或克隆scripts
|
||
if [ -d $dir_scripts/.git ]; then
|
||
git_pull_scripts $dir_scripts origin/$branch_scripts
|
||
else
|
||
git_clone_scripts $url_scripts $dir_scripts $branch_scripts
|
||
fi
|
||
|
||
if [[ $exit_status -eq 0 ]]; then
|
||
echo -e "\n更新$dir_scripts成功...\n"
|
||
|
||
## npm install
|
||
[ ! -d $dir_scripts/node_modules ] && npm_install_1 $dir_scripts
|
||
[ -f $dir_scripts/package.json ] && scripts_depend_new=$(cat $dir_scripts/package.json)
|
||
[[ "$scripts_depend_old" != "$scripts_depend_new" ]] && npm_install_2 $dir_scripts
|
||
|
||
## diff cron
|
||
gen_list_task
|
||
diff_cron $list_task_jd_scripts $list_task_user $list_task_add $list_task_drop
|
||
|
||
## 失效任务通知
|
||
if [ -s $list_task_drop ]; then
|
||
output_list_add_drop $list_task_drop "失效"
|
||
[[ ${AutoDelCron} == true ]] && del_cron $list_task_drop jd
|
||
fi
|
||
|
||
## 新增任务通知
|
||
if [ -s $list_task_add ]; then
|
||
output_list_add_drop $list_task_add "新"
|
||
add_cron_jd_scripts $list_task_add
|
||
[[ ${AutoAddCron} == true ]] && add_cron_notify $exit_status $list_task_add "jd_scripts脚本"
|
||
fi
|
||
|
||
## 环境变量变化通知
|
||
## echo -e "检测环境变量清单文件 $dir_scripts/githubAction.md 是否有变化...\n"
|
||
[ -s $dir_list_tmp/githubAction.md ] && diff $dir_list_tmp/githubAction.md $dir_scripts/githubAction.md | tee $dir_list_tmp/env.diff
|
||
if [ -s $dir_list_tmp/env.diff ] && [[ ${EnvChangeNotify} == true ]]; then
|
||
notify_title="检测到环境变量清单文件有变化"
|
||
notify_content="减少的内容:\n$(grep -E '^-[^-]' $dir_list_tmp/env.diff)\n\n增加的内容:\n$(grep -E '^\+[^\+]' $dir_list_tmp/env.diff)"
|
||
notify "$notify_title" "$notify_content"
|
||
fi
|
||
else
|
||
echo -e "\n更新$dir_scripts失败,请检查原因...\n"
|
||
fi
|
||
|
||
## 更新thirdpard脚本
|
||
count_thirdpard_repo_sum
|
||
gen_thirdpard_dir_and_path
|
||
if [[ ${#array_thirdpard_scripts_path[*]} -gt 0 ]]; then
|
||
make_dir $dir_raw
|
||
update_thirdpard_repo
|
||
update_thirdpard_raw
|
||
gen_list_thirdpard
|
||
diff_cron $list_thirdpard_scripts $list_thirdpard_user $list_thirdpard_add $list_thirdpard_drop
|
||
|
||
if [ -s $list_thirdpard_drop ]; then
|
||
output_list_add_drop $list_thirdpard_drop "失效"
|
||
[[ ${AutoDelThirdpardCron} == true ]] && del_cron $list_thirdpard_drop thirdpard
|
||
fi
|
||
if [ -s $list_thirdpard_add ]; then
|
||
output_list_add_drop $list_thirdpard_add "新"
|
||
add_cron_thirdpard $list_thirdpard_add
|
||
[[ ${AutoAddThirdpardCron} == true ]] && add_cron_notify $exit_status $list_thirdpard_add "thirdpard脚本"
|
||
fi
|
||
else
|
||
perl -i -ne "{print unless / $cmd_thirdpard /}" $list_crontab_user
|
||
fi
|
||
|
||
##使scripts2生效
|
||
cp -f ${dir_scripts2}/jd_*.js ${dir_scripts}
|
||
[ -f ${dir_scripts2}/ZooFaker.js ] && cp -f ${dir_scripts2}/ZooFaker.js ${dir_scripts}
|
||
cp -f ${dir_scripts2}/sendNotify.js ${dir_scripts}
|
||
|
||
## 调用用户自定义的diy.sh
|
||
if [[ ${EnableExtraShell} == true ]]; then
|
||
if [ -f $file_diy_shell ]; then
|
||
echo -e "--------------------------------------------------------------\n"
|
||
. $file_diy_shell
|
||
else
|
||
echo -e "$file_diy_shell文件不存在,跳过执行DIY脚本...\n"
|
||
fi
|
||
fi
|
||
|
||
[ -f $file_key ] && rm -rf $file_key
|
||
[ -f $file_key_cry ] && rm -rf $file_key_cry
|
||
[ -f $dir_root/README.md ] && rm -rf $dir_root/README.md
|
||
[ -f $dir_root/LICENSE ] && rm -rf $dir_root/LICENSE
|
||
|
||
AutoConfig
|
||
fix_config
|
||
random_update_cron
|
||
BeanChange
|
||
# [ ! $ConfigCover = false ] && cp -rf $file_config_sample $file_config_user
|
||
}
|
||
|
||
## =================================================7. 执行区 =================================================
|
||
|
||
## 组合Cookie和互助码子程序,$1:要组合的内容
|
||
combine_sub() {
|
||
local what_combine=$1
|
||
local combined_all=""
|
||
local tmp1 tmp2
|
||
for ((i = 1; i <= $user_sum; i++)); do
|
||
for num in $TempBlockCookie; do
|
||
[[ $i -eq $num ]] && continue 2
|
||
done
|
||
local tmp1=$what_combine$i
|
||
local tmp2=${!tmp1}
|
||
case $# in
|
||
1)
|
||
combined_all="$combined_all&$tmp2"
|
||
;;
|
||
2)
|
||
combined_all="$combined_all&$tmp2@$2"
|
||
;;
|
||
3)
|
||
if [ $(($i % 2)) -eq 1 ]; then
|
||
combined_all="$combined_all&$tmp2@$2"
|
||
else
|
||
combined_all="$combined_all&$tmp2@$3"
|
||
fi
|
||
;;
|
||
4)
|
||
case $(($i % 3)) in
|
||
1)
|
||
combined_all="$combined_all&$tmp2@$2"
|
||
;;
|
||
2)
|
||
combined_all="$combined_all&$tmp2@$3"
|
||
;;
|
||
0)
|
||
combined_all="$combined_all&$tmp2@$4"
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
#combined_all="$combined_all&$tmp2" #最新的
|
||
done
|
||
echo $combined_all | perl -pe "{s|^&||; s|^@+||; s|&@|&|g; s|@+&|&|g; s|@+|@|g; s|@+$||}"
|
||
}
|
||
|
||
## 正常依次运行时,组合所有账号的Cookie与互助码
|
||
combine_all() {
|
||
#for ((i = 0; i < ${#env_name[*]}; i++)); do
|
||
# export ${env_name[i]}=$(combine_sub ${var_name[i]})
|
||
#done
|
||
|
||
export JD_COOKIE=$(combine_sub Cookie)
|
||
## 东东农场(jd_fruit.js)
|
||
export FRUITSHARECODES=$(combine_sub ForOtherFruit "588e4dd7ba134ad5aa255d9b9e1a38e3@520b92a9f0c34b34a0833f6c3bb41cac@e124f1c465554bf485983257743233d3" "7363f89a9d7248ae91a439794f854614@07b3cd1495524fa2b0f768e7639eab9f")
|
||
## 东东萌宠(jd_pet.js)
|
||
export PETSHARECODES=$(combine_sub ForOtherPet "MTE1NDAxNzgwMDAwMDAwMzk3NDIzODc=@MTAxODEyMjkyMDAwMDAwMDQwMTEzNzA3@MTE1NDUyMjEwMDAwMDAwNDM3NDQzMzU=@MTEzMzI0OTE0NTAwMDAwMDA0Mzc0NjgzOQ==")
|
||
## 种豆得豆(jd_plantBean.js)
|
||
export PLANT_BEAN_SHARECODES=$(combine_sub ForOtherBean "olmijoxgmjutzeajdig5vec453deq25pz7msb7i@okj5ibnh3onz6mkpbt6natnj7xdxeqeg53kjbsi@7oivz2mjbmnx4cbdwoeomdbqrr6bwbgsrhybhxa" "yvppbgio53ya5quolmjz6hiwlhu6yge7i7six5y@ebxm5lgxoknqdfx75eycfx6vy5n2tuflqhuhfia")
|
||
## 东东工厂(jd_jdfactory.js)
|
||
export DDFACTORY_SHARECODES=$(combine_sub ForOtherJdFactory "T0225KkcRhwZp1HXJk70k_8CfQCjVWnYaS5kRrbA@T0205KkcAVhorA6EfG6dwb9ACjVWnYaS5kRrbA@T0205KkcG1tgqh22f1-s54tXCjVWnYaS5kRrbA" "T019__l2QBYe_UneIRj9lv8CjVWnYaS5kRrbA@T0205KkcNFd5nz6dXnCV4r9gCjVWnYaS5kRrbA")
|
||
## 京喜工厂(jd_dreamFactory.js)
|
||
export DREAM_FACTORY_SHARE_CODES=$(combine_sub ForOtherDreamFactory "piDVq-y7O_2SyEzi5ZxxYw==@IzYimRViEUHMiUDFhPPLOg==@ieXM8XzpopOaevcW0f1OwA==@y0k9IDhCNqQvEov0x2ugNQ==")
|
||
## 京东赚赚(jd_jdzz.js)
|
||
export JDZZ_SHARECODES=$(combine_sub ForOtherJdzz "S5KkcRhwZp1HXJk70k_8CfQ@S5KkcAVhorA6EfG6dwb9A@S5KkcG1tgqh22f1-s54tX")
|
||
## 疯狂的Joy(jd_crazy_joy.js)
|
||
export JDJOY_SHARECODES=$(combine_sub ForOtherJoy "N1ihLmXRx9ahdnutDzc1Vqt9zd5YaBeE@o8k-j4vfLXWhsdA5HoPq-w==@zw2aNaUUBen1acOglloXVw==")
|
||
## 口袋书店(jd_bookshop.js)
|
||
export BOOKSHOP_SHARECODES=$(combine_sub ForOtherBookShop)
|
||
## 签到领现金(jd_cash.js)
|
||
export JD_CASH_SHARECODES=$(combine_sub ForOtherCash "eU9Yau6yNPkm9zrVzHsb3w@eU9YLarDP6Z1rRq8njtZ@eU9YN6nLObVHriuNuA9O")
|
||
## 京喜农场(jd_jxnc.js)
|
||
export JXNC_SHARECODES=$(combine_sub ForOtherJxnc)
|
||
## 闪购盲盒(jd_sgmh.js)
|
||
export JDSGMH_SHARECODES=$(combine_sub ForOtherSgmh)
|
||
## 京喜财富岛(jd_cfd.js)
|
||
export JDCFD_SHARECODES=$(combine_sub ForOtherCfd)
|
||
## 环球挑战赛(jd_global.js)
|
||
export JDGLOBAL_SHARECODES=$(combine_sub ForOtherGlobal "MjNtTnVxbXJvMGlWTHc5Sm9kUXZ3VUM4R241aDFjblhybHhTWFYvQmZUOD0")
|
||
## 京东手机狂欢城(jd_carnivalcity.js)
|
||
export JD818_SHARECODES=$(combine_sub ForOtherCarnivalcity "5443fec1-7dbc-4d92-a09b-b7eb0a01199f@8c2a0d3a-b4d7-4bbf-bccc-4e7efc18f849")
|
||
|
||
export JDHEALTH_SHARECODES=$(combine_sub ForOtherHealth)
|
||
}
|
||
|
||
## 并发运行时,直接申明每个账号的Cookie与互助码,$1:用户Cookie编号
|
||
combine_one() {
|
||
local user_num=$1
|
||
local pushcontent1
|
||
local pushcontent2
|
||
for ((i = 0; i < ${#env_name[*]}; i++)); do
|
||
local tmp=${var_name[i]}$user_num
|
||
export ${env_name[i]}=${!tmp}
|
||
done
|
||
}
|
||
|
||
## 转换JD_BEAN_SIGN_STOP_NOTIFY或JD_BEAN_SIGN_NOTIFY_SIMPLE
|
||
trans_JD_BEAN_SIGN_NOTIFY() {
|
||
case ${NotifyBeanSign} in
|
||
0)
|
||
export JD_BEAN_SIGN_STOP_NOTIFY="true"
|
||
;;
|
||
1)
|
||
export JD_BEAN_SIGN_NOTIFY_SIMPLE="true"
|
||
;;
|
||
2)
|
||
export JD_BEAN_SIGN_NOTIFY_SIMPLE="false"
|
||
;;
|
||
esac
|
||
}
|
||
|
||
## 转换UN_SUBSCRIBES
|
||
trans_UN_SUBSCRIBES() {
|
||
export UN_SUBSCRIBES="${goodPageSize}\n${shopPageSize}\n${jdUnsubscribeStopGoods}\n${jdUnsubscribeStopShop}"
|
||
}
|
||
|
||
## 申明全部变量,$1:all/Cookie编号
|
||
export_all_env() {
|
||
local type=$1
|
||
local latest_log
|
||
if [[ $AutoHelpOther == true ]] && [[ -d $dir_code ]]; then
|
||
#latest_log=$(ls -r $dir_code | head -1)
|
||
#. $dir_code/$latest_log
|
||
latest_log=$dir_code/helpcode
|
||
. $latest_log
|
||
fi
|
||
[ -f $file_config_user ] && . $file_config_user
|
||
[[ $type == all ]] && combine_all || combine_one $type
|
||
trans_JD_BEAN_SIGN_NOTIFY
|
||
trans_UN_SUBSCRIBES
|
||
}
|
||
|
||
random_delay() {
|
||
local random_delay_max=$RandomDelay
|
||
if [[ $random_delay_max ]] && [[ $random_delay_max -gt 0 ]]; then
|
||
local current_min=$(date "+%-M")
|
||
if [[ $current_min -gt 2 && $current_min -lt 30 ]] || [[ $current_min -gt 31 && $current_min -lt 59 ]]; then
|
||
delay_second=$(($(gen_random_num $random_delay_max) + 1))
|
||
echo -e "\n命令未添加 \"now\",随机延迟 $delay_second 秒后再执行任务,如需立即终止,请按 CTRL+C...\n"
|
||
sleep $delay_second
|
||
fi
|
||
fi
|
||
}
|
||
|
||
## scripts目录下所有可运行脚本数组
|
||
gen_array_scripts() {
|
||
local dir_current=$(pwd)
|
||
local i=0
|
||
cd $dir_scripts
|
||
for file in $(ls); do
|
||
if [ -f $file ] && [[ $(grep "new Env" $file) ]] && [[ $file == *.js && $file != sendNotify.js && $file != JD_extra_cookie.js ]]; then
|
||
array_scripts[i]=$file
|
||
array_scripts_name[i]=$(grep "new Env" $file | awk -F "'|\"" '{print $2}' | head -1)
|
||
[[ -z ${array_scripts_name[i]} ]] && array_scripts_name[i]="<未识别出活动名称>"
|
||
let i++
|
||
fi
|
||
done
|
||
cd $dir_current
|
||
}
|
||
|
||
## 使用说明
|
||
usage() {
|
||
define_cmd
|
||
gen_array_scripts
|
||
echo
|
||
echo -e "$cmd_jd jd_xxx # 正常运行jd_xxx脚本"
|
||
echo -e "$cmd_jd jd_xxx now # 立即运行jd_xxx脚本"
|
||
echo -e "$cmd_jd jd_xxx fast # 急速运行jd_xxx脚本"
|
||
echo -e "$cmd_jd jd_xxx 数字 # 第几账号单独运行jd_xxx脚本"
|
||
echo -e "$cmd_jd runall1 # 运行运行所有脚本,耗时1小时"
|
||
echo -e "$cmd_jd runall2 # 较快运行所有脚本,耗时10分钟"
|
||
echo -e "$cmd_jd runall3 # 急速运行所有脚本,耗时3分钟,新手勿试"
|
||
echo -e "$cmd_jd panelon # 开启控制面板"
|
||
echo -e "$cmd_jd paneloff # 关闭控制面板以及挂机程序"
|
||
echo -e "$cmd_jd myhelp # 手动更新互助码,在log/helpcode下"
|
||
echo -e "$cmd_jd clean # 手动清理日记"
|
||
echo -e "$cmd_jd hangup # 重启挂机程序"
|
||
echo -e "$cmd_jd update # 更新最新版本"
|
||
echo
|
||
echo -e "\n当前scripts目录下有以下脚本可以运行:"
|
||
for ((i = 0; i < ${#array_scripts[*]}; i++)); do
|
||
echo -e "$(($i + 1)).${array_scripts_name[i]}:${array_scripts[i]}"
|
||
done
|
||
}
|
||
|
||
## run nohup,$1:文件名,不含路径,带后缀
|
||
run_nohup() {
|
||
local file_name=$1
|
||
nohup node $file_name &>$log_path &
|
||
}
|
||
|
||
## 查找脚本路径与准确的文件名,$1:脚本传入的参数,输出的file_name不带后缀.js
|
||
find_file_and_path() {
|
||
local para=$1
|
||
local file_name_tmp1=$(echo $para | perl -pe "s|\.js||")
|
||
local file_name_tmp2=$(echo $para | perl -pe "{s|jd_||; s|\.js||; s|^|jd_|}")
|
||
local file_name_tmp3=$(echo $para | perl -pe "{s|jd_||; s|\.js||; s|^|jd_|}")
|
||
local file_name_tmp4=$(echo $para | perl -pe "s|\.py||")
|
||
local file_name_tmp5=$(echo $para | perl -pe "s|\.ts||")
|
||
local seek_path="$dir_scripts $dir_scripts/backUp $dir_raw"
|
||
file_name=""
|
||
which_path=""
|
||
|
||
for path in $seek_path; do
|
||
if [ -f $path/$file_name_tmp1.js ]; then
|
||
file_name=$file_name_tmp1
|
||
file_name_all=$file_name_tmp1.$file_last
|
||
which_path=$path
|
||
break
|
||
elif [ -f $path/$file_name_tmp2.js ]; then
|
||
file_name=$file_name_tmp2
|
||
file_name_all=$file_name_tmp2.$file_last
|
||
which_path=$path
|
||
break
|
||
elif [ -f $path/$file_name_tmp4.py ]; then
|
||
file_name=$file_name_tmp4
|
||
file_name_all=$file_name_tmp4.$file_last
|
||
which_path=$path
|
||
change_py_path
|
||
break
|
||
elif [ -f $path/$file_name_tmp5.ts ]; then
|
||
file_name=$file_name_tmp5
|
||
file_name_all=$file_name_tmp5.$file_last
|
||
which_path=$path
|
||
break
|
||
fi
|
||
done
|
||
|
||
if [[ -z $file_name ]] && [ -f $para ]; then
|
||
local file_name_tmp3=$(echo $para | awk -F "/" '{print $NF}' | perl -pe "s|\.js||")
|
||
if [[ $(grep -E "^$file_name_tmp3$" $list_task_jd_scripts) ]] && [[ $AutoCpThirdpardCron = false ]]; then
|
||
echo -e "\njd_scripts项目存在同名文件$file_name_tmp3.js,不复制$para,直接执行$dir_scripts/$file_name_tmp3.js ...\n"
|
||
else
|
||
echo -e "\n复制或覆盖 $para 到 $dir_scripts 下.....开始运行...\n"
|
||
cp -f $para $dir_scripts
|
||
fi
|
||
file_name=$file_name_tmp3
|
||
file_name_all=$file_name_tmp3.$file_last
|
||
which_path=$dir_scripts
|
||
fi
|
||
}
|
||
|
||
## 运行自定义脚本
|
||
run_task_finish() {
|
||
if [[ $EnableTaskFinishShell == true ]]; then
|
||
echo -e "\n--------------------------------------------------------------\n"
|
||
if [ -f $file_task_finish_shell ]; then
|
||
echo -e "开始执行$file_task_finish_shell...\n"
|
||
. $file_task_finish_shell
|
||
echo -e "$file_task_finish_shell执行完毕...\n"
|
||
else
|
||
echo -e "$file_task_finish_shell文件不存在,跳过执行...\n"
|
||
fi
|
||
fi
|
||
}
|
||
|
||
## 运行挂机脚本
|
||
run_hungup() {
|
||
local hangup_file="jd_crazy_joy_coin"
|
||
cd $dir_scripts
|
||
for file in $hangup_file; do
|
||
import_config_and_check $file
|
||
count_user_sum
|
||
export_all_env all
|
||
if [ ! $NodeType = nohup ] >/dev/null 2>&1; then
|
||
pm2 stop $file.js 2>/dev/null
|
||
pm2 flush
|
||
pm2 start -a $file.js --watch "$dir_scripts/$file.js" --name=$file
|
||
else
|
||
if [[ $(ps -ef | grep "$file" | grep -v "grep") != "" ]]; then
|
||
ps -ef | grep "$file" | grep -v "grep" | awk '{print $1}' | xargs kill -9
|
||
fi
|
||
make_dir $dir_log/$file
|
||
log_time=$(date "+%Y-%m-%d-%H-%M-%S")
|
||
log_path="$dir_log/$file/$log_time.log"
|
||
run_nohup $file.js >/dev/null 2>&1
|
||
fi
|
||
echo "运行成功"
|
||
done
|
||
}
|
||
|
||
## 运行守护脚本
|
||
run_hungup_file() {
|
||
local hangup_file=$1
|
||
cd $dir_scripts
|
||
for file in $hangup_file; do
|
||
import_config_and_check $file
|
||
count_user_sum
|
||
export_all_env all
|
||
if [ ! $NodeType = nohup ] >/dev/null 2>&1; then
|
||
pm2 stop $file.js 2>/dev/null
|
||
pm2 flush
|
||
pm2 start -a $file.js --watch "$dir_scripts/$file.js" --name=$file
|
||
else
|
||
if [[ $(ps -ef | grep "$file" | grep -v "grep") != "" ]]; then
|
||
ps -ef | grep "$file" | grep -v "grep" | awk '{print $1}' | xargs kill -9
|
||
fi
|
||
make_dir $dir_log/$file
|
||
log_time=$(date "+%Y-%m-%d-%H-%M-%S")
|
||
log_path="$dir_log/$file/$log_time.log"
|
||
run_nohup $file.js >/dev/null 2>&1
|
||
fi
|
||
echo "运行成功"
|
||
done
|
||
}
|
||
|
||
## 一次性运行所有jd_scripts脚本
|
||
run_all_jd_scripts_1() {
|
||
define_cmd
|
||
if [ ! -f $list_task_jd_scripts ]; then
|
||
cat $list_crontab_jd_scripts | grep -E "j[drx]_\w+\.js" | perl -pe "s|.+(j[drx]_\w+)\.js.+|\1|" | sort -u >$list_task_jd_scripts
|
||
fi
|
||
echo -e "\n==================== 开始运行所有非挂机脚本 ====================\n"
|
||
echo -e "耗时数小时\n"
|
||
for ((sec = 5; sec > 0; sec--)); do
|
||
echo -e "倒计时$sec秒...\n"
|
||
sleep 1
|
||
done
|
||
for file in $(cat $list_task_jd_scripts); do
|
||
if [ $file = jd_crazy_joy_coin ]; then
|
||
continue
|
||
fi
|
||
if [ $file = jd_exit ]; then
|
||
continue
|
||
fi
|
||
echo -e "==================== 运行 $file.js 脚本 ====================\n"
|
||
run_normal $file now
|
||
done
|
||
}
|
||
|
||
## 一次性运行所有jd_scripts脚本
|
||
run_all_jd_scripts_2() {
|
||
define_cmd
|
||
if [ ! -f $list_task_jd_scripts ]; then
|
||
cat $list_crontab_jd_scripts | grep -E "j[drx]_\w+\.js" | perl -pe "s|.+(j[drx]_\w+)\.js.+|\1|" | sort -u >$list_task_jd_scripts
|
||
fi
|
||
echo -e "\n==================== 开始运行所有非挂机脚本 ====================\n"
|
||
echo -e "耗时20分钟\n"
|
||
for ((sec = 5; sec > 0; sec--)); do
|
||
echo -e "倒计时$sec秒...\n"
|
||
sleep 1
|
||
done
|
||
for file in $(cat $list_task_jd_scripts); do
|
||
if [ $file = jd_crazy_joy_coin ]; then
|
||
continue
|
||
fi
|
||
if [ $file = jd_exit ]; then
|
||
continue
|
||
fi
|
||
echo -e "==================== 运行 $file.js 脚本 ====================\n"
|
||
run_concurrent $file fast
|
||
wait
|
||
done
|
||
}
|
||
|
||
## 一次性运行所有jd_scripts脚本
|
||
run_all_jd_scripts_3() {
|
||
define_cmd
|
||
if [ ! -f $list_task_jd_scripts ]; then
|
||
cat $list_crontab_jd_scripts | grep -E "j[drx]_\w+\.js" | perl -pe "s|.+(j[drx]_\w+)\.js.+|\1|" | sort -u >$list_task_jd_scripts
|
||
fi
|
||
echo -e "\n==================== 开始运行所有非挂机脚本 ====================\n"
|
||
echo -e "耗时5分钟\n"
|
||
for ((sec = 5; sec > 0; sec--)); do
|
||
echo -e "倒计时$sec秒...\n"
|
||
sleep 1
|
||
done
|
||
for file in $(cat $list_task_jd_scripts); do
|
||
if [ $file = jd_crazy_joy_coin ]; then
|
||
continue
|
||
fi
|
||
if [ $file = jd_exit ]; then
|
||
continue
|
||
fi
|
||
echo -e "==================== 运行 $file.js 脚本 ====================\n"
|
||
run_concurrent $file fast
|
||
done
|
||
}
|
||
## 选择python3还是node
|
||
define_program() {
|
||
local p1=$1
|
||
if [[ $p1 == *.js ]]; then
|
||
which_program=node
|
||
file_last=js
|
||
elif [[ $p1 == *.py ]]; then
|
||
which_program=python3
|
||
file_last=py
|
||
elif [[ $p1 == *.sh ]]; then
|
||
which_program=bash
|
||
file_last=sh
|
||
elif [[ $p1 == *.ts ]]; then
|
||
which_program="ts-node-transpile-only"
|
||
file_last=ts
|
||
else
|
||
which_program=node
|
||
file_last=js
|
||
fi
|
||
}
|
||
## 正常运行单个脚本,$1:传入参数
|
||
run_normal() {
|
||
local p=$1
|
||
define_program "$p"
|
||
find_file_and_path $p
|
||
#ps -ef | grep $file_name | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1
|
||
if [[ $file_name ]] && [[ $which_path ]]; then
|
||
import_config_and_check "$file_name"
|
||
count_user_sum
|
||
export_all_env all
|
||
[[ $# -eq 1 ]] && random_delay
|
||
log_time=$(date "+%Y-%m-%d-%H-%M-%S")
|
||
log_path="$dir_log/$file_name/$log_time.log"
|
||
make_dir "$dir_log/$file_name"
|
||
cd $which_path
|
||
echo "执行${which_program},路径$which_path/$file_name_all"
|
||
[[ $which_program = node ]] && [[ $IsSecure = true ]] && SecureJs $file_name_all
|
||
[ ${TasksTerminateTime} = 0 ] && $which_program $file_name_all 2>&1 | tee $log_path
|
||
[ ${TasksTerminateTime} -ne 0 ] && timeout ${TasksTerminateTime} $which_program $file_name_all 2>&1 | tee $log_path
|
||
run_task_finish "$file_name" 2>&1 | tee -a $log_path
|
||
else
|
||
echo -e "\n $p 脚本不存在,请确认...\n"
|
||
usage
|
||
fi
|
||
}
|
||
|
||
## 并发执行,因为是并发,所以日志只能直接记录在日志文件中(日志文件以Cookie编号结尾),前台执行并发跑时不会输出日志
|
||
## 并发执行时,设定的 RandomDelay 不会生效,即所有任务立即执行
|
||
run_concurrent() {
|
||
local p=$1
|
||
local SameTimeUser=$3
|
||
local SameTimeBegin=1
|
||
local RunNum
|
||
local SameTimeContinul
|
||
local SameTimeLeft
|
||
local workdir
|
||
define_program "$p"
|
||
find_file_and_path $p
|
||
|
||
if [[ $file_name ]] && [[ $which_path ]]; then
|
||
import_config_and_check "$file_name"
|
||
count_user_sum
|
||
make_dir $dir_log/$file_name
|
||
log_time=$(date "+%Y-%m-%d-%H-%M-%S.%N")
|
||
[[ $2 == oc ]] && sleep $((60 - $OverTime))
|
||
|
||
if [[ -z $SameTimeUser ]]; then
|
||
echo -e "\n开始并发执行,日志直接写入文件中。\n"
|
||
for ((user_num = 1; user_num <= $user_sum; user_num++)); do
|
||
for num in ${TempBlockCookie}; do
|
||
[[ $user_num -eq $num ]] && continue 2
|
||
done
|
||
export_all_env $user_num
|
||
log_path="$dir_log/$file_name/${log_time}_${user_num}.log"
|
||
cd $which_path
|
||
[ ${TasksTerminateTime} = 0 ] && $which_program $file_name_all &>$log_path &
|
||
[ ${TasksTerminateTime} -ne 0 ] && timeout ${TasksTerminateTime} $which_program $file_name_all &>$log_path &
|
||
done
|
||
else
|
||
RunNum=$((1 + $user_sum / $SameTimeUser))
|
||
SameTimeContinul=$SameTimeUser
|
||
SameTimeLeft=$(($user_sum % $SameTimeUser))
|
||
workdir=$(pwd)
|
||
echo -e "\n步进并发模式,每次并发数为$SameTimeUser\n"
|
||
echo -e "用户数为$user_sum,所以大循环为$RunNum次,最后一次内循环$SameTimeLeft次\n"
|
||
for ((i = 1; i <= $RunNum; i++)); do
|
||
if [[ $i -eq $RunNum ]]; then
|
||
echo -e "这是最后$SameTimeBegin到第$SameTimeContinul\n"
|
||
SameTimeContinul=$((SameTimeBegin + SameTimeLeft - 1))
|
||
for ((user_num = SameTimeBegin; user_num <= SameTimeContinul; user_num++)); do
|
||
echo -e "$user_num\n"
|
||
#for num in ${TempBlockCookie}; do
|
||
# [[ $user_num -eq $num ]] && continue 2
|
||
#done
|
||
cd $workdir
|
||
export_all_env $user_num
|
||
log_path="$dir_log/$file_name/${log_time}_${user_num}.log"
|
||
cd $which_path
|
||
[ ${TasksTerminateTime} -ne 0 ] && timeout ${TasksTerminateTime} $which_program $file_name_all &>$log_path &
|
||
[ ${TasksTerminateTime} = 0 ] && $which_program $file_name_all &>$log_path &
|
||
done
|
||
echo "完成"
|
||
else
|
||
echo -e "$i这是第$SameTimeBegin到第$SameTimeContinul\n"
|
||
for ((user_num = SameTimeBegin; user_num <= SameTimeContinul; user_num++)); do
|
||
echo -e "$user_num\n"
|
||
#for num in ${TempBlockCookie}; do
|
||
# [[ $user_num -eq $num ]] && continue 2
|
||
#done
|
||
cd $workdir
|
||
export_all_env $user_num
|
||
log_path="$dir_log/$file_name/${log_time}_${user_num}.log"
|
||
cd $which_path
|
||
[ ${TasksTerminateTime} -ne 0 ] && timeout ${TasksTerminateTime} $which_program $file_name_all &>$log_path &
|
||
[ ${TasksTerminateTime} = 0 ] && $which_program $file_name_all &>$log_path &
|
||
done
|
||
wait
|
||
echo "完成"
|
||
SameTimeBegin=$((SameTimeUser + SameTimeBegin))
|
||
SameTimeContinul=$((SameTimeUser + SameTimeBegin - 1))
|
||
fi
|
||
done
|
||
fi
|
||
else
|
||
echo -e "\n $p 脚本不存在,请确认...\n"
|
||
usage
|
||
fi
|
||
}
|
||
## 并发执行,因为是并发,所以日志只能直接记录在日志文件中(日志文件以Cookie编号结尾),前台执行并发跑时不会输出日志
|
||
## 并发执行时,设定的 RandomDelay 不会生效,即所有任务立即执行
|
||
run_concurrent2() {
|
||
local p=$1
|
||
local BeginNum=$3
|
||
local EndNum=$4
|
||
|
||
define_program "$p"
|
||
find_file_and_path $p
|
||
|
||
if [[ $file_name ]] && [[ $which_path ]]; then
|
||
import_config_and_check "$file_name"
|
||
count_user_sum
|
||
make_dir $dir_log/$file_name
|
||
log_time=$(date "+%Y-%m-%d-%H-%M-%S.%N")
|
||
[[ $2 == oc ]] && sleep $((60 - $OverTime))
|
||
|
||
echo -e "\n开始并发执行,日志直接写入文件中。\n"
|
||
for ((user_num = BeginNum; user_num <= EndNum; user_num++)); do
|
||
for num in ${TempBlockCookie}; do
|
||
[[ $user_num -eq $num ]] && continue 2
|
||
done
|
||
export_all_env $user_num
|
||
log_path="$dir_log/$file_name/${log_time}_${user_num}.log"
|
||
cd $which_path
|
||
[ ${TasksTerminateTime} = 0 ] && $which_program $file_name.js &>$log_path &
|
||
[ ${TasksTerminateTime} -ne 0 ] && timeout ${TasksTerminateTime} node $file_name.js &>$log_path &
|
||
done
|
||
else
|
||
echo -e "\n $p 脚本不存在,请确认...\n"
|
||
usage
|
||
fi
|
||
}
|
||
## 指定只运行某一个Cookie
|
||
run_specify() {
|
||
local p=$1
|
||
local ck_num=$2
|
||
define_program "$p"
|
||
find_file_and_path $p
|
||
if [[ $file_name ]] && [[ $which_path ]]; then
|
||
import_config_and_check "$file_name"
|
||
count_user_sum
|
||
export_all_env $ck_num
|
||
make_dir $dir_log/$file_name
|
||
log_time=$(date "+%Y-%m-%d-%H-%M-%S")
|
||
log_path="$dir_log/$file_name/${log_time}_${ck_num}.log"
|
||
cd $which_path
|
||
node $file_name.js 2>&1 | tee $log_path
|
||
run_task_finish "$file_name" 2>&1 | tee -a $log_path
|
||
else
|
||
echo -e "\n $p 脚本不存在,请确认...\n"
|
||
usage
|
||
fi
|
||
}
|
||
|
||
detect_system
|
||
link_shell
|
||
define_cmd
|
||
#detect_software
|
||
|
||
#[ -f $file_cookie ] && IsPinValid
|
||
## 命令检测
|
||
case $# in
|
||
0)
|
||
echo
|
||
usage
|
||
;;
|
||
1)
|
||
case $1 in
|
||
hangup)
|
||
run_hungup
|
||
;;
|
||
runall1)
|
||
run_all_jd_scripts_1
|
||
;;
|
||
runall2)
|
||
run_all_jd_scripts_2
|
||
;;
|
||
runall3)
|
||
run_all_jd_scripts_3
|
||
;;
|
||
clean)
|
||
CleanLog
|
||
;;
|
||
mybean)
|
||
BeanChange
|
||
;;
|
||
myhelp)
|
||
GenHelp
|
||
;;
|
||
update)
|
||
UpdateTool
|
||
;;
|
||
panelon)
|
||
PanelOn
|
||
;;
|
||
paneloff)
|
||
PanelOff &
|
||
;;
|
||
resetpwd)
|
||
Reset_Pwd
|
||
;;
|
||
*)
|
||
run_normal $1
|
||
;;
|
||
esac
|
||
;;
|
||
2)
|
||
case $2 in
|
||
now)
|
||
run_normal $1 $2
|
||
;;
|
||
fast)
|
||
run_concurrent $1 $2
|
||
;;
|
||
oc)
|
||
run_concurrent $1 $2
|
||
;;
|
||
[1-9] | [1-9][0-9] | [1-9][0-9][0-9])
|
||
run_specify $1 $2
|
||
;;
|
||
test715)
|
||
run_normaltest $1 $2
|
||
;;
|
||
*)
|
||
echo -e "\n命令输入错误...\n"
|
||
usage
|
||
;;
|
||
esac
|
||
;;
|
||
3)
|
||
case $2 in
|
||
test)
|
||
run_concurrent $1 $2 $3
|
||
;;
|
||
esac
|
||
;;
|
||
4)
|
||
case $2 in
|
||
sec)
|
||
run_concurrent2 $1 $2 $3 $4
|
||
;;
|
||
esac
|
||
;;
|
||
*)
|
||
echo -e "\n命令输入错误...\n"
|
||
usage
|
||
;;
|
||
esac
|
||
|
||
echo "您的操作系统为:$SYSTEM 架构:$SYSTEMTYPE"
|