私は 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
も作成できるようです。