shell一括curlインターフェーススクリプトの簡単な実現方法


前言
shellスクリプトは非常に大きな役割を果たしています。サーバー分野では、shellを使った操作は手動でクリックするよりずっと便利です。文字のインターフェイスですが、強力な処理機能で、想像以上の操作ができます。また、これらの習慣を日常の仕事に移植して、仕事の効率を高めることもできます。
実はshellの文法はとても簡単で、基本的には命令ラインの下で、命令群を一つずつ集めて、shellシナリオを構成します。もちろんです。文法が分からないので、検索してもいいです。結局、重要なのは文法ではなく思想です。
最近、次のような需要があります。
DBAはいくつかのサービス規則のデータを導き出すことができて、それから1本の手でcurlのあるアプリケーションインターフェースに行って、それによって相応する業務の要求を完成します。
問題が来ました。DBAから導出したデータはフォーマットされています。curlのインターフェースもフォーマットされています。必要なのは、該当するデータを対応する値に置き換えるだけでいいです。すべてのコマンドが成功することは保証されていませんので、インターフェースを再起動する必要があります。
明らかに、手動で1つずつcurlコマンドを書き、1つずつ実行し、結果を見て判断することは、少数のデータにとって可能である。しかし、仮に、データが何百本、何千本と何万本もあるとしたら、人工的に一つずつやることはできないだろう。そのため、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コマンドを使って、コンサートでアクセスログを表示したり、ファイルに記録を書き込んだりするテクニックがあります。人工的な観察があっても、ログを保存して、調べてみます。
このように、みんなが手動でデータを叩かなくてもいいです。この上でミスをする可能性があります。DBAはデータからフォーマットデータを導出し、shellスクリプトはフォーマットデータを直接読み取り、記録を保持する。これこそ手順のすべきことです。
一言で言えば、なんとか怠けてください。これは私たちのすべきことです。
ただし、インターフェイスがスクリプトによって実行されると、同時問題を考慮してサーバの圧力に問題があります。コードをあまり信じないでください。最悪の場合に備える。
curlの命令は参考してください。https://curl.haxx.se/docs/manpage.html   (簡単な中国語の説明を探してもいいです。もちろんです。
締め括りをつける
以前は1、2 Gのログファイル処理が頭の痛い問題だと思っていましたが、grep、awk、sed、less、saltなどのツールを組み合わせて、数十Gから更に多くの千軍万馬文書の中から、直接に急所をつけられます。これはlinuxのすごいところです。
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に一定の助けをもたらすことを望んでいます。もし疑問があれば、メッセージを残して交流してください。ありがとうございます。