Shell脚本实现数据库查询、更新并根据查询结果调用服务接口
#!/bin/bash
DB_HOST="数据库的 IP 地址"
DB_PORT="数据库的端口号"
DB_USER="数据库的用户名"
DB_PASSWORD="数据库的密码"
DB_NAME="数据库的名称"
LOG_PATH="日志输出地址,也可以直接打印控制台"
query="SELECT auth_no, corp_id FROM mode WHERE (auth_no, gmt_create) IN (SELECT auth_no, MAX(gmt_create) FROM mode GROUP BY auth_no)"
results=$(mysql -u $DB_USER -p$DB_PASSWORD -D $DB_NAME-N -B -e "$query" | tail -n+2)
initNum=400168
while read -r line; do
corpId=$(echo "$line" | awk '{print $2}')
authNo=$(echo "$line" | awk '{print $1}')
mysql -u $DB_USER-p$DB_PASSWORD -D $DB_NAME-e "UPDATE mode SET auth = $aaa WHERE corp_id = '$corpId' AND auth_no = '$authNo'"
if [[ -n $corpId ]]; then
json='{"ctrlData":{"corpId":"'${corpId}'"}}'
response=$(curl -X POST -H "Content-Type: application/json" -d "$json" http://your-api-url.com)
" = "00000000" ]; then
# echo "调用成功" >> "$LOG_PATH"
#else
# echo "调用失败,错误信息:$message" >> "$LOG_PATH"
#fi
if [ $? -eq 0 ]; then
echo "调用成功" >> "$LOG_PATH"
else
echo "调用失败,corp_id: $corpId" >> "$LOG_PATH"
fi
fi
# initNum自增 1
((initNum++))
done <<< "$results"
同理:也可以从本地文件读取内容,执行数据库更新和接口调用
#!/bin/bash
DB_HOST="数据库的 IP 地址"
DB_PORT="数据库的端口号"
DB_USER="数据库的用户名"
DB_PASSWORD="数据库的密码"
DB_NAME="数据库的名称"
FILE_PATH="文件全路径"
LOG_PATH="日志输出地址,也可以直接打印控制台"
initNum=123
while read line; do
if [ -n $corpId ] && [ -n $authNo]; then
corpId=$(echo "$line" | cut -d "=" -f 1)
authNo=$(echo "$line" | cut -d "=" -f 2)
mysql -u username -p'password' -D database -e "UPDATE mode SET auth = $aaa WHERE corp_id = '$corpId' AND auth_no = '$authNo'"
json='{"ctrlData":{"corpId":"'${corpId}'"}}'
response=$(curl -s -X POST -H "Content-Type: application/json" -d "$json" http://your-api-url.com)
if [ $? -eq 0 ]; then
echo "调用成功" >> "$LOG_PATH"
else
echo "调用失败,corp_id: $corp_id " >> "$LOG_PATH"
fi
((initNum++))
fi
done < "$FILE_PATH"