`

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=6&bP=30&fddays=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=6&borrowPeriod=30&fddays=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批量curl接口脚本的简单实现方法

    在本文中,我们将探讨如何使用Shell脚本批量调用cURL接口。这在处理大量数据时,例如DBA需要将规则导入服务时,可以大大提高工作效率。以下是一个简单的Shell脚本实现,它完成了读取源数据文件,执行cURL命令以及...

    shell命令调用http接口(curl方式)

    简单介绍一下通过shell命令调用http接口(curl方式)先上样例样例介绍参数详解 先上样例 1、curl -H Content-Length:0 -X GET http://127.0.0.1:8080 2、curl -H Content-Type: application/json -H connection:Keep...

    shell脚本-大数据

    例如,通过`hadoop jar`命令运行MapReduce作业,或者用`spark-submit`启动Spark应用,这样可以利用shell脚本实现任务的批量执行和调度。 再者,shell脚本也可以与NoSQL数据库如HBase、Cassandra集成。通过shell命令...

    【nexus二进制库Jar包批量上传脚本工具】

    标题中的“nexus二进制库Jar包批量上传脚本工具”是指用于自动化上传Java的JAR文件到Nexus仓库的脚本程序。Nexus是一个流行的仓库管理器,广泛应用于软件开发环境中,尤其是Java生态系统,它能管理和分发各种类型的...

    shell脚本批量删除es索引的方法

    总结起来,通过编写shell脚本,我们可以有效地管理和维护Elasticsearch集群中的索引,自动化执行批量删除任务,提高运维效率。这样的脚本适用于定期清理旧数据,释放资源,保持集群健康运行。在实际应用中,一定要...

    linux服务器中批量运行脚本文件的方法

    在Linux服务器环境中,批量执行脚本文件是一种常见的任务,尤其对于需要进行大量计算或自动化运维的场景,如在本文提到的Abaqus作业。Abaqus是一款强大的有限元分析软件,常常用于工程模拟和计算。在Windows系统中,...

    Shell脚本实现批量下载网络图片代码分享

    在这个场景中,我们讨论的是如何使用Shell脚本来批量下载网络图片。批量下载图片在处理大量数据时非常有用,例如,当需要从特定网站抓取一系列图片时,如Yahoo天气图标。 Yahoo天气图标的URL遵循一定的规律,以...

    shell 批量处理 字符串指令行

    例如,以下是一个简单的示例脚本,它读取`curl-test.txt`文件,将所有URL中的`http`替换为`https`: ```bash #!/bin/bash while read -r line; do url=$(echo "$line" | sed 's/http/https/') echo "Transformed...

    Shell+Curl网站状态检查脚本 抓出无法访问的站点

    【Shell+Curl网站状态检查脚本】是一种利用Unix/Linux shell脚本语言和cURL命令行工具来批量检查网站状态的方法。此脚本主要用于自动化监测多个网站的可访问性,识别那些返回非200状态码(通常表示请求未成功)的...

    linux shell 脚本攻略里用来下载链接图片的脚本,附上整本书脚本打包

    在这个特定的案例中,`img_downloader.sh` 是一个用于批量下载网页中链接的图片的shell脚本,这在处理需要大量图片资源的项目时非常有用。下面我们将深入探讨这个脚本可能包含的知识点,并解释如何使用它。 首先,`...

    shell 脚本的基本使用

    Shell脚本可以实现自动化运维、批量处理文件等任务,是系统管理员和开发人员必备的一项技能。 #### 二、Shell脚本基本元素 - **变量**: 在Shell脚本中,变量用于存储数据,如文件名、路径或数字等。定义变量时无需...

    域名批量归属查询

    再添加一个shell脚本,执行shell脚本就可以了。代码如下: awk '{print "curl http://www.ip.cn/index.php?ip="$1}' ip1.txt&gt;ip.txt python belongip.py&gt;iprr.txt awk '/IP/{print RT$0}' iprr.txt&gt;last1.txt

    curl-master.zip_curl_curl-master_curlconfig-d

    7. **脚本化和批处理**:curl可以与shell脚本结合,实现批量操作,例如,连续请求多个URL或自动化测试。 8. **进度条和速率限制**:curl可以显示下载进度,并通过`--limit-rate`选项限制传输速率,这对于管理网络...

    shell精品教程shell精品教程shell精品教程

    在Linux世界里,掌握Shell脚本编程能力是至关重要的,因为它极大地提高了工作效率,使用户能够自动化日常重复性的任务。本篇“Shell精品教程”将深入浅出地讲解如何理解和运用Shell。 **一、Shell基础** 1. **...

    shell脚本实现批量采集爱站关键词库

    本文将详细讨论如何使用shell脚本来批量采集爱站关键词库,这是一个非常实用的技巧,对于SEO优化、数据分析或者网站监控等工作都有极大的帮助。 首先,我们要理解shell脚本的基本结构。在Linux或Unix系统中,shell...

    curl-7.24.0.tar.gz

    - **批处理**:curl命令可以嵌入到shell脚本中,实现批量下载、定期抓取网页等任务。 - **重试策略**:通过设置`--retry`和`--retry-delay`等选项,curl可以在网络不稳定时自动重试请求,保证任务的完成。 - **...

    F5查询及切换脚本.zip

    标题"F5查询及切换脚本.zip"涉及到的主要技术点包括Linux Shell脚本、F5设备管理、API接口交互以及JSON数据处理工具jq。下面将详细解释这些知识点。 1. **Linux Shell脚本**: Linux Shell脚本是Linux操作系统中的...

    分享9个实战及面试常用Linux Shell脚本编写

    在IT领域,Linux Shell脚本编写是系统管理员和开发者日常工作中不可或缺的一部分,它能提高工作效率,简化复杂的自动化任务。下面我们将详细探讨标题和描述中提到的9个实战及面试常用的Linux Shell脚本编写技巧和...

    lamp环境编译用的shell脚本

    编写这样的脚本可以方便地批量处理多个文件,提高工作效率。 接下来,`lamp.sh`脚本是编译安装LAMP环境的关键。这个脚本会依次执行以下步骤: 1. **Linux**:通常使用的是基于Debian或RedHat的发行版,如Ubuntu或...

    shell http、资源、pxe练习

    在IT行业中,Shell脚本是Linux/Unix操作系统中的一种强大工具,它允许用户通过命令行接口执行自动化任务。本文将深入探讨"shell http、资源、pxe练习"这个主题,帮助你更好地理解和应用Shell脚本在处理HTTP资源和PXE...

Global site tag (gtag.js) - Google Analytics