Sou inexperiente com Bash e scripts em geral. Estou escrevendo um script envolvendo AWS CLI, para o qual os comandos geram um ID. Veja abaixo:
#!/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)
A saída dos comandos aws ec2 será algo como "id-ffffffff", que agora capturei via $VAR1 e $VAR2
Agora quero enviar o resultado de cada comando para o console, mas exibir mensagens diferentes com base no resultado do comando. Até agora, fiz assim:
#!/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
O problema é que agora tenho muitas linhas como as que estou usando acima (10+) e não posso deixar de pensar que é bobagem executar repetidamente a mesma instrução if/else para cada linha.
Devo usar algo como um goto? Qual é a melhor prática aqui?
Obrigado.
Responder1
Crie uma função
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"
Parece que você aws ec2
também pode criar uma função para.