Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> シェルツール:jsondiff.sh

シェルツール:jsondiff.sh

  
年の基本的なチュートリアルを使って歴史プロジェクトをリファクタリングすることに最近忙しかったのですが、客観的な条件のため、テストケースは利用できないので、人間の肉を通して古いサーバーと新しいサーバーの結果セットを比較する必要があります。正しいか間違っているかを判断するために一貫しています。怠惰はプログラマーの長所であるため、ツールを作成したいと思います。結果セットはJSONです。したがって、jsondiff.shがあります。


論理は非常に単純です。curl、次にdiffを介して異なるサーバー上で結果セットを取得することに他なりませんが、ここで注意すべき点がいくつかあります。まず、JSONは1行です。直接のdiffは意味を失います;第二に、JSONの漢字はエンコードされ、それは見やすくはありません;さらに、JSONのフィールドの順序は無関係なので、diffの前にソートするのが最善です。 JSONデータをフォーマットするときにBashを使わず、代わりに PHPを使ったことを説明します。

#!/bin /bashRM = /bin /rmPHP = /usr /bin /phpCURL =は/usr /binに/curlDIFF =は/usr /binに/diffVIMDIFF =は/usr /binに/vimdiffCOLORDIFF =は/usr /binに/colordiffusage(){エコー"使用:$ 0 --uri =< URI> --old =< IP> --new =< IP>"}フォーマット(){$ PHP -R「関数ksort_recursive;(!IS_ARRAY($配列))(&#038 $配列){{戻った場合;} ksort($ ($ keyとしてのarray_keys($ array));})$ options = JSON_PRETTY_PRINT | Array); foreach($ keyとしてのarray_keys($ array)){ksort_recursive($ array [$ key]);}}
  JSON_UNESCAPED_UNICODE; $配列= json_decode($のARGN、TRUE); ksort_recursive($配列);エコーjson_encode($配列、$オプション);「}リクエスト(){$ CURL -s -H"ホストの:$ 1""。 Http://$ 2 $ 3"評価セット -  $(getopt -q -o" h< -l" host:、uri:、old:、new:、vim、help"  - " $ @ 「true)の場合、--host)HOST = $ 2; shift 2;; --uri)URI = $ 2; shift 2;; --old)OLD = $ 2; shift 2;; --new)NEW = $ 2; shift 2;; --vim)VIM =" Y"; shift 1;; -h |
 --help)usage; exit 0;;  - )break;; esacdoneif [[-z" $ URI" |;
 |
  -z" $ OLD" |
 |
  -z" $ニューQUOT;]]、[[-z" 1fiif次に使用出口; $のHOST"]];次に、HOST =" www.foobar.com" fiOLD_FILE = $(mktempを)NEW_FILE = $(mktempの)要求" $ HOST"" $ OLD"" $ URI" |
  フォーマット> $ OLD_FILEリクエスト" $ HOST"" $ NEW"" $ URI> |
  フォーマット> $ NEW_FILEif [[" $ VIM" ==" Y"]];次に$はvimdiff $ OLD_FILE $ NEW_FILEelif [-x" $ COLORDIFF"]];次に$ COLORDIFF -u $ OLD_FILE $ NEW_FILEelse $関連Shenkaoziliao程度DIFF -u $ oLD_FILE $ NEW_FILEfi $ RM -f $ oLD_FILE $ RM -f $ NEW_FILE 

ここで、 "getoptの" 利用Zhidezhuyi次のようにbashで

  • のgetopt < Br>
  • Bash:setとevalを使用した空白の保存

    使用する場合は、さまざまなツールを使用できますが、デフォルトでは "colordiff"が最初に使用されます。 ""この記事が書かれて間もなく、コマンドラインからJSONを解析するための優れたツール "jq"が見つかりました。
    zh-CN"],null,[1],zh-TW"]]]

  • Copyright © Windowsの知識 All Rights Reserved