自身のためのメモとしてShell Scriptの書き方をメモっておく。
好きなコマンドを永遠に繰り返し実行するためのScript
PollingのようにAPIをCallし続けるScriptを書きたくて作ったScriptのメモです。
#!/bin/sh
while true
do
command="curl http://{target}"
date
eval $command
sleep 5
done
この場合、
-
date
コマンドを実行して現在時刻を出力し -
eval $command
でcommandの中身を実行し - 5秒間sleepして処理を繰り返す
という処理になります。
JSONの配列でLoop処理
API Request BodyのJSONが多量にあって、それらをひたすらPOSTするってScriptを書く時に調べたのでメモ。
#!/bin/sh
json=$(cat << EOS
[
{"field1":"value1","field2":"value2"},
{"field1":"value3","field2":"value4"}
]
EOS
)
echo "$json"
len=$(echo $json | jq length)
for i in $( seq 0 $(($len - 1)) ); do
row=$(echo $json | jq .[$i])
echo "$row"
done
- shellのヒアドキュメント(
cat << EOS **** EOS
)でjson変数に標準入力的な情報を設定 - echoコマンドで$jsonを出力し、
jq length
コマンドでパースして要素数を取得してlen
変数に設定 -
seq m n
でmからnの数字のリストを生成 -
for i in ***; do done
でfor loop処理 - echoコマンドで$jsonを出力し、
jq .[$i]
コマンドでパースして要素番号が$iの要素を取得してrow
変数に設定
echoコマンドの出力結果はこちら。
$json
[
{"field1":"value1","field2":"value2"},
{"field1":"value3","field2":"value4"}
]
$row
# 1回目のLoopの$row
{
"field1": "value1",
"field2": "value2"
}
# 2回目のLoopの$row
{
"field1": "value3",
"field2": "value4"
}
Reference/参考文献
また何かあればこの記事に追記していきたいと思います。
以上。