Я неопытен с Bash и скриптингом в целом. Я пишу скрипт с использованием 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
Кажется, вы также можете создать функцию для этого .