这个脚本是写了一天半完成的,就锻炼了一下自己的逻辑能力,其实这个脚本的技术成分不是很高。

注意事项

  • 请输入资源 url 完整的绝对路径,由 http:// 或 https:// 开始。
  • 资源 url 不支持通配符,例如:不支持 http://www.test.com/abc/*.*。
  • 进行目录刷新时,资源 url 需要以 / 结尾,例如:http://www.test.com/abc/。
  • 带参数的 url 刷新,根据其域名缓存配置是否忽略参数缓存决定刷新结果。如果配置了时间戳防盗链的资源 url 提交时刷新需要去掉 sign 和 t 参数。

代码

#!/usr/bin/env bash
echo "******************cdn刷新查询 脚本*******************
1、cdn单文件刷新
2、cdn单目录刷新
3、cdn配置文件刷新
4、刷新进度查询
*****************************************************
"
read -p "选择您想要的功能:" num
ak=$1
sk=$2
if [ -f "~/.cdn_log" ];then
    touch ~/.cdn_log
fi

fresh_url(){
    read -p "请输入您要刷新的url:" url
    scheme=$(echo $url | awk -F '://' '{print $1}')
        while [ "$url" == "" ]
        do
        read -p "输入为空,请重新输入:" url
        done
        while [ "$scheme" != "http" ]&&[ "$scheme" != "https" ]
        do
        read -p "输入不合法,url需带上http或者https,请重新输入:" url
        scheme=$(echo $url | awk -F '://' '{print $1}')
        done
        without_Backslash=`echo ${url%?}`
        Backslash=`echo ${url##$without_Backslash}`
        while [ "$Backslash" == '/' ]
        do
        read -p "需输入为刷新的文件非目录,请重新输入:" url
        without_Backslash=`echo ${url%?}`
        Backslash=`echo ${url##$without_Backslash}`
        done
    token=$(echo "/v2/tune/refresh" |openssl dgst -binary -hmac "$sk" -sha1 |base64 | tr + - | tr / _ )
    final=`curl -X POST -H "Authorization: QBox $ak:$token" http://fusion.qiniuapi.com/v2/tune/refresh -d "{\"urls\":[\"$url\"]}" -H 'Content-Type: application/json'`
    code=$(echo $final| awk -F ',' '{print $1}' | awk -F ':' '{print $2}')
    requestID=$(echo $final| awk -F ',' '{print $3}' | awk -F ':' '{print $2}' )
    urlSurplusDay=$(echo $final | awk -F ',' '{print $8}' | awk -F ':' '{print $2}')
    if [ "$code" == "200" ];then
    echo 状态码: $code
    echo requestID: $requestID
    echo 刷新的url:$url
    echo 管理凭证: $token
    echo 每日文件剩余刷新次数: $urlSurplusDay
    else
    echo 错误状态: $final
    fi
    echo -e `date`:$final\ >> ~/.cdn_log
}

fresh_dir(){
    read -p "请输入您要刷新的目录:" dir
    scheme=$(echo $dir | awk -F '://' '{print $1}')
       while [ "$dir" == "" ]
        do
        read -p "输入为空,请重新输入:" dir
        done
        while [ "$scheme" != "http" ]&&[ "$scheme" != "https" ]
        do
        read -p "输入不合法,url需带上http或者https,请重新输入:" dir
        scheme=$(echo $url | awk -F '://' '{print $1}')
        done
        without_Backslash=`echo ${dir%?}`
        Backslash=`echo ${dir##$without_Backslash}`
        while [ "$Backslash" == '/' ]
        do
        read -p "需输入为刷新的目录非文件,请重新输入:" dir
        without_Backslash=`echo ${dir%?}`
        Backslash=`echo ${dir##$without_Backslash}`
        done
    token=$(echo "/v2/tune/refresh" |openssl dgst -binary -hmac "$sk" -sha1 |base64 | tr + - | tr / _ )
    final=`curl -X POST -H "Authorization: QBox $ak:$token" http://fusion.qiniuapi.com/v2/tune/refresh -d "{\"dirs\":[\"$dir\"]}" -H 'Content-Type: application/json'`
    code=$(echo $final| awk -F ',' '{print $1}' | awk -F ':' '{print $2}')
    requestID=$(echo $final| awk -F ',' '{print $3}' | awk -F ':' '{print $2}' )
    dirSurplusDay=$(echo $final | awk -F ',' '{print $10}' | awk -F ':' '{print $2}')
    if [ "$code" == "200" ];then
    echo 状态码: $code
    echo requestID: $requestID
    echo 刷新的目录:$dir
    echo 管理凭证: $token
    echo 每日目录剩余刷新次数: $dirSurplusDay
    else
    echo 错误状态: $final
    fi
    echo -e `date`:$final\ >> ~/.cdn_log
}

fresh_conf(){
    read -p "请输入您的配置文件绝对地址:" local_file
        while [ "$local_file" == "" ]|| [ ! -f "$local_file" ] 
        do
        read -p "输入的本地配置文件为空或不存在,请重新输入:" local_file
        done
        while [ -d "$local_file" ]
        do 
        read -p "输入的不是文件,请重新输入:" local_file
        done
    final_file=$(cat $local_file | awk -F ',' '{print $1}' | xargs echo )
    without_Backslash=`echo ${final_file%?}`
    Backslash=`echo ${final_file##$without_Backslash}`
    echo $Backslash
    token=$(echo "/v2/tune/refresh" |openssl dgst -binary -hmac "$sk" -sha1 |base64 | tr + - | tr / _ )
    if [ "$Backslash" != '/' ];then
    final=`curl -X POST -H "Authorization: QBox $ak:$token" http://fusion.qiniuapi.com/v2/tune/refresh -d "{\"urls\":[$(cat $local_file)]}" -H 'Content-Type: application/json'`
    code=$(echo $final| awk -F ',' '{print $1}' | awk -F ':' '{print $2}')
    requestID=$(echo $final| awk -F ',' '{print $3}' | awk -F ':' '{print $2}' )
    urlSurplusDay=$(echo $final | awk -F '}' '{print $2}' | awk -F ':' '{print $5}'| awk -F ',' '{print $1}')
    if [ "$code" == "200" ];then
    echo 状态码: $code
    echo requestID: $requestID
    echo 刷新的文件:`cat $local_file`
    echo 管理凭证: $token
    echo 每日文件剩余刷新次数: $urlSurplusDay
    else  
    echo 错误状态: $final 
    fi
    echo -e `date`:$final\ >> ~/.cdn_log
    else
    final=`curl -X POST -H "Authorization: QBox $ak:$token" http://fusion.qiniuapi.com/v2/tune/refresh -d "{\"dirs\":[$(cat $local_file)]}" -H 'Content-Type: application/json'`
    code=$(echo $final| awk -F ',' '{print $1}' | awk -F ':' '{print $2}')
    requestID=$(echo $final| awk -F ',' '{print $3}' | awk -F ':' '{print $2}' )
    dirSurplusDay=$(echo $final | awk -F '}' '{print $2}' | awk -F ':' '{print $7}'| awk -F '}' '{print $1}')
    if [ "$code" == "200" ];then
    echo 状态码: $code
    echo requestID: $requestID
    echo 刷新的目录:`cat $local_file`
    echo 管理凭证: $token
    echo 每日目录剩余刷新次数: $dirSurplusDay
    else 
    echo 错误状态: $final
    fi
    echo -e `date`:$final\ >> ~/.cdn_log
    fi
}

get_fresh(){
    read -p "请输入您的配置文件绝对地址:" local_file
        while [ "$local_file" == "" ]|| [ ! -f "$local_file" ] 
        do
        read -p "输入的本地配置文件为空或不存在,请重新输入:" local_file
        done
        while [ -d "$local_file" ]
        do 
        read -p "输入的不是文件,请重新输入:" local_file
        done
    token=$(echo "/v2/tune/refresh/list" |openssl dgst -binary -hmac "$sk" -sha1 |base64 | tr + - | tr / _ )
    final=`curl -X POST -H "Authorization: QBox $ak:$token" http://fusion.qiniuapi.com/v2/tune/refresh/list -d "{$(cat $local_file)}" -H 'Content-Type: application/json'`
    echo 返回状态: $final
}


choose(){
case "$num" in
1)
fresh_url
;;
2)
fresh_dir
;;
3)
fresh_conf
;;
4)
get_fresh
;;
*)
read -p "非法输入,请输入正确的数字[1-4]:" num
choose
;;
esac
}
choose

使用方法

  • ./qcdn ak sk
    用户的ak和sk可以通过在七牛控制台找到
    qcdn1
  • 脚本中牵涉到的根据配置文件刷新,仿照我例子给出的形式进行填写,文件和目录需分离,不能一个配置文件既写文件又写目录
    qcdn2
    目录的效果类似,就是必须以/结尾
  • 刷新查询,配置文件按照缓存查询文件格式这个文档中的填写,这里我给出一般例子。
    qcdn3
  • 本地日志格式存放在 ~/.cdn_log,可以查看刷新日志。
  • 可能存在很多bug,ψ(`∇´)ψ

使用效果

查询效果:

qcdn4

刷新效果:

qcdn5

查看日志效果:

qcdn6
其实可能没什么人会用吧,反正我写的挺开心的~

下载链接

GitHub stars

版权声明:本文为原创文章,版权归 heroyf 所有
本文链接:https://heroyf.club/2018/08/qcdn/


“苹果是给那些为了爱选择死亡的人的奖励”