• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    shell批量curl接口脚本的简单实现方法

    前言

    相信大家应该都有所体会,shell脚本可以说作用非常大,在服务器领域,用shell操作事务可比手动点击要方便快捷得多了。虽然只是文字界面,但是其强大的处理功能,会让各种操作超乎想象。而且,也可以将这些习惯移植到日常的工作当中,提升办事效率。

    其实shell语法很简单,基本上就是综合一下在命令行下,一个个的命令集合,然后就组成了shell脚本。当然了,不懂语法的,百度搜索一下就好了嘛,毕竟,重要的是思想而非语法。

    最近,刚接一需求,如下:

    DBA会将一些服务规则的数据导出,然后一条条手动去curl某应用接口,从而完成相应的业务要求。

    那么问题来了,DBA导出的数据是格式化的,要curl的接口也是格式化的,需要的,只是将相应的数据替换成对应的值即可。注意,不保证所有的命令都能执行成功,有可能需要重新跑接口。

    很明显,手动一条条地去写curl命令,然后一条条执行,然后观察结果,做出判断,这对于少数几个数据来说,是可行的。但是假设,数据有几百条、几千条几万条呢,那就不可能人工一条条去搞了吧。因此,shell脚本就该出场了(当然了,有同学说,我用其他语言也可以啊,甚至说我这个功能写到代码里就可以了,然而这些特殊无意义的代码,是不需要长期保留下来的)。

    该shell脚本只要做好三件事就行了:

      1. 读取源数据文件的内容,替换接口的数据格式;

      2. 执行命令,完成业务操作;

      3. 记录完整的日志,以便后期排查对比;

    需求很简单,不懂语法没关系,查一下嘛。参考代码如下:

    #!/bin/bash
    log_file='result.log'
    param_file=$1   # 源数据在命令行中指定
    
    log_cmd="tee -a $log_file"
    i=1
    for line in `cat $param_file`;
    do
     echo "read line" $i ":" $line | tee -a $log_file 
     let "i=$i+1"
     OLD_IFS=$IFS;IFS=",";
     arr=($line)            # 分割数据到数组
     IFS=$OLD_IFS;
     curl_cmd="curl -d 'uId=${arr[0]}bid=${arr[1]}bA=${arr[2]}to=6bP=30fddays=5' http://localhost:8080/mi/api/ss/1.0.1/co/apply"
     echo `date "+%Y-%m-%d %H:%M:%S"` "start ===>> " $curl_cmd | tee -a $log_file
     eval "$curl_cmd 2>1" | tee -a $log_file     # 使用 eval 命令,把错误日志和接口返回结果一并带回,到后续console及日志存储
     echo `date "+%Y-%m-%d %H:%M:%S"` "end ===" $curl_cmd | tee -a $log_file
    done
    
    echo `date "+%Y-%m-%d %H:%M:%S"` "over: end of shell" | tee -a $log_file

    源数据格式参考如下:

    234,201708222394083443,5000
    4211,201782937493274932,3000
    23,201749379583475934,2000

    当读取的文件格式为空格分隔的文件时,该读取将发生异常,换成另一种方式读取行:

    #!/bin/bash
    log_file='result.log'
    param_file=$1
    
    
    log_cmd="tee -a $log_file"
    i=1
    while read line;
    do
     echo "read line" $i ":" $line | tee -a $log_file 
     let "i=$i+1"
     arr=($line)
     curl_cmd="curl -d 'uId=${arr[0]}bid=${arr[1]}bt=${arr[2]}toBorrowType=6borrowPeriod=30fddays=5' http://localhost/mi/c/1.0.1/c/n"
     echo `date "+%Y-%m-%d %H:%M:%S"` "start ===>> " $curl_cmd | tee -a $log_file
     #`$curl_cmd` 2>1 $log_file | tee -a $log_file
     eval "$curl_cmd 2>1" | tee -a $log_file 
     echo `date "+%Y-%m-%d %H:%M:%S"` "end ===" $curl_cmd | tee -a $log_file
    done  $param_file
    
    echo `date "+%Y-%m-%d %H:%M:%S"` "over: end of shell" | tee -a $log_file

    这里有个技巧,即使用tee命令,既在console上显示了访问日志,也往文件里写入了记录。即有人工观察,也有日志存储,以备查看。

    如此,便实现了大家都不用手动敲数据,从而在这上面犯错的可能了。 DBA从数据导出格式化数据,shell脚本直接读取格式化数据,保留记录。这才是程序该干的事。

    一句话,想办法偷个懒,这是我们该干的事。

    但是应该要注意,当一个接口被脚本跑去执行时,你就行考虑并发问题,以服务器的压问题了,也不要太相信代码。做最坏的打算。

    curl的命令请参考:https://curl.haxx.se/docs/manpage.html   (你可以搜简要中文描述,当然)

    总结

    从前觉得1、2G的日志文件处理是个头疼的问题,后来发现 grep, awk, sed, less, salt 等工具组合起来,能让你从几十G甚至更多的千军万马文件中,直取要害。这便是linux的厉害之处。

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • shell中如何批量注释和取消注释
    • shell脚本实现统计文件大小、批量创建用户的示例
    • shell脚本批量复制及执行命令的示例详解
    • 使用Shell脚本批量启停Docker服务
    • shell脚本实现ssh-copy-id批量自动发送公钥到远程主机
    • shell脚本批量删除es索引的方法
    • 详解Shell 命令行批量处理图片文件名的实例
    • 如何使用shell在多服务器上批量操作
    上一篇:ubuntu修改terminal终端的主机名的实现方法
    下一篇:Linux 下载百度网盘大文件的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    shell批量curl接口脚本的简单实现方法 shell,批量,curl,接口,脚本,