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

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

私は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コマンドの出力は、$ VAR1と$ VAR2を介してキャプチャした "id-ffffffff"と同じです。

ここで、各コマンドの結果をコンソールに出力しますが、コマンドの結果に応じて異なるメッセージを表示したいと思います。これまで私はこれをしました:

#!/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関数を作成することもできるようです。

おすすめ記事