汎用Bashスクリプト

エラー処理と入力検証を備えた汎用Bashスクリプトで、「jq」ツールを使用してBase64でエンコードされたJSON文字列を効率的にデコードおよび処理する例

#!/usr/bin/env bash

# このスクリプトでは、入力としてBase64でエンコードされたJSON文字列を想定しています。
# 文字列をデコードし、JSONからいくつかの値を抽出してエクスポートし、
# 次に別のBase64文字列をデコードして特定の値を抽出して出力します。
# テスト使用例: history -c && echo "BASE64STRING==" | /path/to/script.sh

# いずれかのコマンドでステータスがゼロ以外の状態の場合にスクリプトが終了するようにし、
# パイプラインコマンドが最後に失敗するコマンドの終了ステータスを返すようにします。
set -o pipefail -e

# 入力を「params」変数に読み込む
IFS= read -r params

# 入力を検証
if [[ -z "$params" ]]; then
    echo "Error: No input provided."
    exit 1
fi

# 入力が有効なBase64文字列であるかどうかをチェック
if ! echo "$params" | base64 -d &> /dev/null; then
    echo "Error: Invalid Base64 input."
    exit 1
fi

# Base64でエンコードされたJSON文字列をエンコード
json=$(echo "$params" | base64 -d)

# JSONを検証
if ! echo "$json" | jq empty &> /dev/null; then
    echo "Error: Invalid JSON."
    exit 1
fi

# JSON解析に必要な「jq」ツールの存在をチェック
if ! command -v jq &> /dev/null; then
    echo "Error: jq is not installed. Please install jq and try again."
    exit 1
fi

# 必要なキーのチェック
for key in providerRecordUid resourceRecordUid userRecordUid newPassword oldPassword user records; do
    if ! echo "$json" | jq -e ."$key" &> /dev/null; then
        echo "Error: Key '$key' not found in JSON."
        exit 1
    fi
done

# JSON文字列からキーと値の対を抽出してエクスポート
eval $( echo "$json" | jq -r 'keys[] as $k | "export \($k)=\(.[$k])"' )

# エクスポートした値をターミナルに表示
echo "providerRecordUid=$providerRecordUid"
echo "resourceRecordUid=$resourceRecordUid"
echo "userRecordUid=$userRecordUid"
echo "newPassword=$newPassword"
echo "oldPassword=$oldPassword"
echo "user=$user"

# もうひとつのBase64でエンコードされたJSONの文字列となる「records」変数をデコード
recordJson=$(echo "$records" | base64 -d)

# record内部のJSONの検証
if ! echo "$recordJson" | jq empty &> /dev/null; then
    echo "Error: Invalid JSON in records."
    exit 1
fi

# 「providerRecordUid」に関連したタイトルを抽出して表示

title=$(echo "$recordJson" | jq -r ".array[] | select(.uid==\"$providerRecordUid\").title")

echo "Provider Title=$title"

ゲートウェイによってどのようにスクリプトが実行されるかをシミュレートするコマンドの例

history -c && echo "ewogICAgInByb3ZpZGVyUmVjb3JkVWlkIjogIjEyMzQ1IiwKICAgICJyZXNvdXJjZVJlY29yZFVpZCI6ICI2Nzg5MCIsCiAgICAidXNlclJlY29yZFVpZCI6ICIxMTIyMzMiLAogICAgIm5ld1Bhc3N3b3JkIjogIm5ld1Bhc3MxMjMiLAogICAgIm9sZFBhc3N3b3JkIjogIm9sZFBhc3M0NTYiLAogICAgInVzZXIiOiAidXNlcm5hbWUiLAogICAgInJlY29yZHMiOiAiZXlKaGNuSmhlU0k2SUZ0N0luVnBaQ0k2SUNJeE1qTTBOU0lzSW5ScGRHeGxJam9nSWxCeWIzWnBaR1Z5SURFaWZWMTkiCn0K" | /path/to/script.sh

最終更新