個人的によく利用するシェルコマンド備忘録


  • 個人的にシェルスクリプト内でAWS CLIコマンドを実行し、AWSリソースを作成することがある。
  • その際によく利用しているシェルコマンドを備忘録としてまとめる。

ファイルの一括読み込み

  • ユースケース

    • 変数ファイル(.env)を一括で読み込み、環境変数に埋め込みたい場合。
    set -a; for f in ./env/*.env; do . ${f}; done; set +a;
    

ディレクトリパスを取得する

  • ユースケース

    • 実行スクリプト内でスクリプトのディレクトリパスを取得したい場合。
    dir=$(dirname $0)
    

    /home/bin/create_aws_resource.shのように実行した場合、/home/binが取得される。

一時的なJSONデータを作成する

  • ユースケース
    • AWS CLIコマンドに渡す一時的なJSONデータを作成したい場合。

外部のJSONファイルをベースに作成したい場合

  • JSON構造が複雑で、スクリプト内部にJSONを定義したくない場合。
test_json_path=$(dirname $0)/json/test.json
test_json=$(cat ${test_json_path})
tempfile=$(mktemp) 
echo ${test_json} | envsubst > ${tempfile}

envsubst利用

スクリプト内部で定義したJSONデータをベースに作成したい場合

  • JSON構造が簡潔で、スクリプト内部にJSONを定義したい場合。
tempfile=$(mktemp)
cat  > ${tempfile} << EOS
{
    # JSON
}
EOS

※ヒアドキュメント利用

※スクリプト実行後には、tempfileを削除することを忘れない。

JSONから任意の値を取得する。

  • ユースケース

    • AWS CLIの実行結果として出力されたJSONから任意の値を取得したい場合。
    response=$(AWS CLIコマンド)
    target_value=$(echo ${response} | jq -r ".HogeId")
    

    jqコマンド利用
    ※ダブルクォートなしで取得
    ※場合によっては、AWS CLI --queryオプションを使用する。

参考情報