佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > shell批量curl接口腳本的簡(jiǎn)單實(shí)現(xiàn)方法

shell批量curl接口腳本的簡(jiǎn)單實(shí)現(xiàn)方法

熱門(mén)標(biāo)簽:百度競(jìng)價(jià)排名 網(wǎng)站排名優(yōu)化 服務(wù)外包 地方門(mén)戶(hù)網(wǎng)站 呼叫中心市場(chǎng)需求 AI電銷(xiāo) Linux服務(wù)器 鐵路電話(huà)系統(tǒng)

前言

相信大家應(yīng)該都有所體會(huì),shell腳本可以說(shuō)作用非常大,在服務(wù)器領(lǐng)域,用shell操作事務(wù)可比手動(dòng)點(diǎn)擊要方便快捷得多了。雖然只是文字界面,但是其強(qiáng)大的處理功能,會(huì)讓各種操作超乎想象。而且,也可以將這些習(xí)慣移植到日常的工作當(dāng)中,提升辦事效率。

其實(shí)shell語(yǔ)法很簡(jiǎn)單,基本上就是綜合一下在命令行下,一個(gè)個(gè)的命令集合,然后就組成了shell腳本。當(dāng)然了,不懂語(yǔ)法的,百度搜索一下就好了嘛,畢竟,重要的是思想而非語(yǔ)法。

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

DBA會(huì)將一些服務(wù)規(guī)則的數(shù)據(jù)導(dǎo)出,然后一條條手動(dòng)去curl某應(yīng)用接口,從而完成相應(yīng)的業(yè)務(wù)要求。

那么問(wèn)題來(lái)了,DBA導(dǎo)出的數(shù)據(jù)是格式化的,要curl的接口也是格式化的,需要的,只是將相應(yīng)的數(shù)據(jù)替換成對(duì)應(yīng)的值即可。注意,不保證所有的命令都能執(zhí)行成功,有可能需要重新跑接口。

很明顯,手動(dòng)一條條地去寫(xiě)curl命令,然后一條條執(zhí)行,然后觀察結(jié)果,做出判斷,這對(duì)于少數(shù)幾個(gè)數(shù)據(jù)來(lái)說(shuō),是可行的。但是假設(shè),數(shù)據(jù)有幾百條、幾千條幾萬(wàn)條呢,那就不可能人工一條條去搞了吧。因此,shell腳本就該出場(chǎng)了(當(dāng)然了,有同學(xué)說(shuō),我用其他語(yǔ)言也可以啊,甚至說(shuō)我這個(gè)功能寫(xiě)到代碼里就可以了,然而這些特殊無(wú)意義的代碼,是不需要長(zhǎng)期保留下來(lái)的)。

該shell腳本只要做好三件事就行了:

  1. 讀取源數(shù)據(jù)文件的內(nèi)容,替換接口的數(shù)據(jù)格式;

  2. 執(zhí)行命令,完成業(yè)務(wù)操作;

  3. 記錄完整的日志,以便后期排查對(duì)比;

需求很簡(jiǎn)單,不懂語(yǔ)法沒(méi)關(guān)系,查一下嘛。參考代碼如下:

#!/bin/bash
log_file='result.log'
param_file=$1   # 源數(shù)據(jù)在命令行中指定

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)            # 分割數(shù)據(jù)到數(shù)組
 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 命令,把錯(cuò)誤日志和接口返回結(jié)果一并帶回,到后續(xù)console及日志存儲(chǔ)
 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

源數(shù)據(jù)格式參考如下:

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

當(dāng)讀取的文件格式為空格分隔的文件時(shí),該讀取將發(fā)生異常,換成另一種方式讀取行:

#!/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

這里有個(gè)技巧,即使用tee命令,既在console上顯示了訪問(wèn)日志,也往文件里寫(xiě)入了記錄。即有人工觀察,也有日志存儲(chǔ),以備查看。

如此,便實(shí)現(xiàn)了大家都不用手動(dòng)敲數(shù)據(jù),從而在這上面犯錯(cuò)的可能了。 DBA從數(shù)據(jù)導(dǎo)出格式化數(shù)據(jù),shell腳本直接讀取格式化數(shù)據(jù),保留記錄。這才是程序該干的事。

一句話(huà),想辦法偷個(gè)懶,這是我們?cè)摳傻氖隆?/p>

但是應(yīng)該要注意,當(dāng)一個(gè)接口被腳本跑去執(zhí)行時(shí),你就行考慮并發(fā)問(wèn)題,以服務(wù)器的壓?jiǎn)栴}了,也不要太相信代碼。做最壞的打算。

curl的命令請(qǐng)參考:https://curl.haxx.se/docs/manpage.html   (你可以搜簡(jiǎn)要中文描述,當(dāng)然)

總結(jié)

從前覺(jué)得1、2G的日志文件處理是個(gè)頭疼的問(wèn)題,后來(lái)發(fā)現(xiàn) grep, awk, sed, less, salt 等工具組合起來(lái),能讓你從幾十G甚至更多的千軍萬(wàn)馬文件中,直取要害。這便是linux的厲害之處。

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • shell中如何批量注釋和取消注釋
  • shell腳本實(shí)現(xiàn)統(tǒng)計(jì)文件大小、批量創(chuàng)建用戶(hù)的示例
  • shell腳本批量復(fù)制及執(zhí)行命令的示例詳解
  • 使用Shell腳本批量啟停Docker服務(wù)
  • shell腳本實(shí)現(xiàn)ssh-copy-id批量自動(dòng)發(fā)送公鑰到遠(yuǎn)程主機(jī)
  • shell腳本批量刪除es索引的方法
  • 詳解Shell 命令行批量處理圖片文件名的實(shí)例
  • 如何使用shell在多服務(wù)器上批量操作

標(biāo)簽:崇左 湖南 蘭州 衡水 仙桃 銅川 黃山 湘潭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《shell批量curl接口腳本的簡(jiǎn)單實(shí)現(xiàn)方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話(huà)咨詢(xún)

    • 400-1100-266
    务川| 拉孜县| 洪雅县| 时尚| 罗源县| 阿图什市| 鹰潭市| 浪卡子县| 黄浦区| 从化市| 怀仁县| 溆浦县| 五原县| 井研县| 马鞍山市| 泗洪县| 甘德县| 庆城县| 牙克石市| 巴彦淖尔市| 麦盖提县| 太康县| 东港市| 碌曲县| 泉州市| 鄂温| 新安县| 上犹县| 尚志市| 德化县| 仪征市| 崇信县| 凌云县| 方城县| 新源县| 凤冈县| 赤城县| 巴塘县| 二连浩特市| 延长县| 龙门县|