長いバッチスクリプトで共通の文字列を繰り返す

長いバッチスクリプトで共通の文字列を繰り返す

私は Bash やスクリプト全般の経験がありません。コマンドが ID を出力する aws CLI を含むスクリプトを作成しています。以下を参照してください。

#!/bin/bash

# Command 1

VAR1=$(aws ec2 create-vpc --query "Vpc.VpcId" --output text)

# Command 2

VAR2=$(aws ec2 create-subnet --query "Subnet.SubnetId" --output text)

aws ec2コマンドの出力は「id-ffffffff」のようなもので、$VAR1と$VAR2でキャプチャしました。

ここで、各コマンドの結果をコンソールに出力し、コマンドの結果に基づいて異なるメッセージを表示したいと思います。これまでのところ、次のように実行しました。

#!/bin/bash

VAR1=$(aws ec2 create-vpc --query "Vpc.VpcId" --output text)

if [ $? -eq 0 ]; then
    echo VPC created successfully... ${VAR1}
else
    echo "Command failed"
fi

# Command 2

VAR2=$(aws ec2 create-subnet --query "Subnet.SubnetId" --output text)

if [ $? -eq 0 ]; then
    echo Subnet created successfully... ${VAR2}
else
    echo "Command failed"
fi

問題は、私が上で使用しているような行が多数(10 行以上)あり、各行で同じ if/else ステートメントを繰り返し実行するのは愚かだと思わずにはいられないことです。

goto のようなものを使うべきでしょうか? ここでのベストプラクティスは何でしょうか?

ありがとう。

答え1

関数を作成する

report () {
    if [ $1 -eq 0 ]; then
        echo "$2"
    else
        echo "Command failed"
    fi

}

VAR1=$(aws ec2 create-vpc --query "Vpc.VpcId" --output text)

report $? "$VAR1"

VAR2=$(aws ec2 create-subnet --query "Subnet.SubnetId" --output text)

report $? "$VAR2"

関数aws ec2も作成できるようです。

関連情報