一般來說,我對 Bash 和腳本編寫缺乏經驗。我正在編寫一個涉及 aws CLI 的腳本,其中命令輸出一個 id。見下文:
#!/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
也可以為它創建一個函數。