シェルスクリプトの Tips
jq コマンド
- JSON をいじる際に便利なコマンド
- 参考にしたページ:
- 以下、例として以下のようなデータ(
example.json
)を扱うとする
[ { "id": "0001", "name": "test001", "value": 112, "group1": { "subg01": [ { "id": "1001", "type": "type001" }, { "id": "1004", "type": "type002" } ] }, "group2": [ { "id": "5001", "type": "None" }, { "id": "5003", "type": "type053" }, { "id": "5004", "type": "type054" } ] }, { "id": "0002", "name": "test002", "value": 954, "group1": { "subg01": [ { "id": "1021", "type": "type101" }, { "id": "1054", "type": "type052" } ] }, "group2": [ { "id": "5001", "type": "None" }, { "id": "5004", "type": "type054" } ] }]
select でフィルタリング
$ cat example.json | jq '.[] | select(.id == "0001")'{ "id": "0001", "name": "test001", "value": 112, "group1": { "subg01": [ { "id": "1001", "type": "type001" }, { "id": "1004", "type": "type002" } ] }, "group2": [ { "id": "5001", "type": "None" }, { "id": "5003", "type": "type053" }, { "id": "5004", "type": "type054" } ]}
$ cat example.json | jq '.[].group1.subg01[] | select(.id == "1004")'{ "id": "1004", "type": "type002"}
シェルで変数の空文字判定
- 空じゃないときのみ処理を行う場合の条件の書き方
if [ -n "$STRING" ]; then #処理fi
- 空のときのみ処理を行う場合の条件の書き方
- ↓以外では
else
を使う手もある。
- ↓以外では
if [ -z "$STRING" ]; then #処理fi
空行判定
- とあるものを動かしているときに
[: ']' expected
とか出てエラーになった。 - 行き当たった記事が これ
変数に格納されている文字列比較において、 文字列の比較は文字列と行う必要があるところを、 文字列と何かわからない型の変数を比較してしまっているので、 このようなエラーが発生するらしい。
- 以下ではダメ。
#!/bin/bashwhile read linedo echo $line # ここで出力する if [ $line = '' ]; then echo '空行があるよ' fi done < line.txt
- 変数を
" "
で囲うと良い。
#!/bin/bashwhile read linedo if [ "$line" = '' ]; then echo '空行があるよ' fi done < line.txt