0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

シェルスクリプト書き方備忘録 (気が向いた時に更新し続ける予定)

Last updated at Posted at 2022-04-26

自身のためのメモとしてShell Scriptの書き方をメモっておく。

好きなコマンドを永遠に繰り返し実行するためのScript

PollingのようにAPIをCallし続けるScriptを書きたくて作ったScriptのメモです。

#!/bin/sh
while true
do
    command="curl http://{target}"
    date
    eval $command
    sleep 5
done

この場合、

  1. date コマンドを実行して現在時刻を出力し
  2. eval $command でcommandの中身を実行し
  3. 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
  1. shellのヒアドキュメント( cat << EOS **** EOS )でjson変数に標準入力的な情報を設定
  2. echoコマンドで$jsonを出力し、 jq length コマンドでパースして要素数を取得して len 変数に設定
  3. seq m n でmからnの数字のリストを生成
  4. for i in ***; do done でfor loop処理
  5. 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/参考文献

また何かあればこの記事に追記していきたいと思います。
以上。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?