shell的简单批量curl接口脚本

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

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

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

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

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

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

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

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

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

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

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

#!/bin/==$log_cmd=<span style="color: #800000">"<span style="color: #800000">tee -a $log_file<span style="color: #800000">"<span style="color: #000000">
i
=<span style="color: #800080">1

<span style="color: #0000ff">for
line <span style="color: #0000ff">in <span style="color: #0000ff"&gt;cat</span><span style="color: #000000"&gt; $param_file;
<span style="color: #0000ff">do
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">read line<span style="color: #800000">" $i <span style="color: #800000">"<span style="color: #800000">:<span style="color: #800000">" $line | <span style="color: #0000ff">tee -<span style="color: #000000">a $log_file
let <span style="color: #800000">"<span style="color: #800000">i=$i+1<span style="color: #800000">"<span style="color: #000000">
OLD_IFS=$IFS;IFS=<span style="color: #800000">"<span style="color: #800000">,<span style="color: #800000">"<span style="color: #000000">;
arr=<span style="color: #000000">($line)            # 分割数据到数组
IFS=<span style="color: #000000">$OLD_IFS;
curl_cmd=<span style="color: #800000">"<span style="color: #800000">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<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #0000ff"&gt;date</span> <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;+%Y-%m-%d %H:%M:%S</span><span style="color: #800000"&gt;"</span> <span style="color: #800000">"<span style="color: #800000">start ===>> <span style="color: #800000">" $curl_cmd | <span style="color: #0000ff">tee -<span style="color: #000000">a $log_file
eval <span style="color: #800000">"<span style="color: #800000">$curl_cmd 2>&1<span style="color: #800000">" | <span style="color: #0000ff">tee -<span style="color: #000000">a $log_file     # 使用 eval 命令,把错误日志和接口返回结果一并带回,到后续console及日志存储
<span style="color: #0000ff">echo <span style="color: #0000ff"&gt;date</span> <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;+%Y-%m-%d %H:%M:%S</span><span style="color: #800000"&gt;"</span> <span style="color: #800000">"<span style="color: #800000">end <<===<span style="color: #800000">" $curl_cmd | <span style="color: #0000ff">tee -<span style="color: #000000">a $log_file
<span style="color: #0000ff">done

<span style="color: #0000ff">echo <span style="color: #0000ff"&gt;date</span> <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;+%Y-%m-%d %H:%M:%S</span><span style="color: #800000"&gt;"</span> <span style="color: #800000">"<span style="color: #800000">over: end of shell<span style="color: #800000">" | <span style="color: #0000ff">tee -a $log_file

  源数据格式参考如下:

,, ,, ,,

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

#!/bin/==$log_cmd=<span style="color: #800000">"<span style="color: #800000">tee -a $log_file<span style="color: #800000">"<span style="color: #000000">
i
=<span style="color: #800080">1

<span style="color: #0000ff">while
<span style="color: #000000"> read line;
<span style="color: #0000ff">do
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">read line<span style="color: #800000">" $i <span style="color: #800000">"<span style="color: #800000">:<span style="color: #800000">" $line | <span style="color: #0000ff">tee -<span style="color: #000000">a $log_file
let <span style="color: #800000">"<span style="color: #800000">i=$i+1<span style="color: #800000">"<span style="color: #000000">
arr=<span style="color: #000000">($line)
curl_cmd=<span style="color: #800000">"<span style="color: #800000">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<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #0000ff"&gt;date</span> <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;+%Y-%m-%d %H:%M:%S</span><span style="color: #800000"&gt;"</span> <span style="color: #800000">"<span style="color: #800000">start ===>> <span style="color: #800000">" $curl_cmd | <span style="color: #0000ff">tee -<span style="color: #000000">a $log_file

$curl_cmd <span style="color: #800080">2>&<span style="color: #800080">1 $log_file | <span style="color: #0000ff">tee -<span style="color: #000000">a $log_file

eval <span style="color: #800000">"<span style="color: #800000">$curl_cmd 2>&1<span style="color: #800000">" | <span style="color: #0000ff">tee -<span style="color: #000000">a $log_file
<span style="color: #0000ff">echo <span style="color: #0000ff"&gt;date</span> <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;+%Y-%m-%d %H:%M:%S</span><span style="color: #800000"&gt;"</span> <span style="color: #800000">"<span style="color: #800000">end <<===<span style="color: #800000">" $curl_cmd | <span style="color: #0000ff">tee -<span style="color: #000000">a $log_file
<span style="color: #0000ff">done <<span style="color: #000000"> $param_file

<span style="color: #0000ff">echo <span style="color: #0000ff"&gt;date</span> <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;+%Y-%m-%d %H:%M:%S</span><span style="color: #800000"&gt;"</span> <span style="color: #800000">"<span style="color: #800000">over: end of shell<span style="color: #800000">" | <span style="color: #0000ff">tee -a $log_file

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

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

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

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

  curl的命令请参考:   (你可以搜简要中文描述,当然)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Centos系统之Shell编程基础知识
从Export理解Shell环境和变量生存期
linux shell数组变量、类型及规则
Centos编程Shell基本工作原理方案
Centos操作系统编程之Shell 问答录
rsync-linux备份脚本
Linux Shell编程入门 1-4
用shc加密shell脚本
centos每天自动备份mysql数据库
shell字符串处理
awk&#160;用法:awk&#160;&#39;&#160;pattern&#160;{action}&#160;&#39; 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FI
sed之仅打印相邻重复的行 cat file aaa bbb bbb ccc ddd eee eee fff 只显示重复的行: bbb bbb eee eee sed -n &#39;:a;N;/\(
压缩: tar -zcvf 压缩后文件名.tar.gz 被压缩文件 解压: tar -zxvf 被解压文件 注意:不要有多余的空格,一个空格即可。 具体的可以在linux环境下 用 tar --hel
sed命令行格式为: sed [-nefri] ‘command’ 输入文本/文件 常用选项: -n∶取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料
#假设文件名是:fortest.gtfdeclare -i fileLinesfileLines=`sed -n &#39;$=&#39; fortest.gtf`echo $fileLines#--
获得每行的最后一个逗号后边的内容.例如:KIAA1967 KIAA1967, xxxxSECIS biding proin 2-like, SECISBP2L, yyyy 1234ankyrin re
bash 正则表达式匹配,一行文本中 “包含 ABC” 并且 “不包含 XYZ”A文件: XXXX ABC XXX4444444444444444XXXX ABC XXX XYZ66666666666
shell/bash 让vi/vim显示空格,及tab字符Vim 可以用高亮显示空格和TAB。文件中有 TAB 键的时候,你是看不见的。要把它显示出来::set listTAB 键显示为 ^I, $显
输出到文件log中,并在屏幕上显示:#ls &gt;&amp;1 | tee log追加输出到文件log中,并在屏幕上显示:#ls &gt;&amp;1 | tee -a log
Suppose we have a file contains the following information, termed input_file:A 0B 1C 21.Read file on