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