Как запустить 2 цикла одновременно в скрипте bash - PullRequest
0 голосов
/ 25 октября 2018

Я очень новичок в написании кода, так что это может быть глупый вопрос, но ответ очень важен для улучшения моего обучения.Я написал простой скрипт bash, как показано ниже.Но как я могу оптимизировать этот код с помощью цикла, массива?Я могу понять, если я использую два цикла, я могу сделать строки кода короче.Пожалуйста, помогите:

#!/bin/bash

zs=10.0.3.10
zb=/usr/local/bin/zabbix_sender
zh=zabbix

# ql1 = queue link

ql1=https://sqs.us-west-2.amazonaws.com/843390035802/testService1

val1=$(aws sqs get-queue-attributes --queue-url $ql1 --attribute-names ApproximateNumberOfMessages --region us-west-2 --output text | awk '{print $2}')
echo "$ql1 count is $val1"
    $zb -z $zs -s $zh -k testService1 -o val1 >/dev/null 2>&1


ql2=https://sqs.us-west-2.amazonaws.com/853390078801/testService2

val2=$(aws sqs get-queue-attributes --queue-url $ql2 --attribute-names ApproximateNumberOfMessages --region us-west-2 --output text | awk '{print $2}')
echo "$ql2 count is $val2"
    $zb -z $zs -s $zh -k testService2 -o val2 >/dev/null 2>&1


ql3=https://sqs.us-west-2.amazonaws.com/843393305801/testService3

val3=$(aws sqs get-queue-attributes --queue-url $ql3 --attribute-names ApproximateNumberOfMessages --region us-west-2 --output text | awk '{print $2}')
echo "$ql3 count is $val3"
    $zb -z $zs -s $zh -k testService3 -o val3 >/dev/null 2>&1


ql4=https://sqs.us-west-2.amazonaws.com/875660005801/testService4

val4=$(aws sqs get-queue-attributes --queue-url $ql4 --attribute-names ApproximateNumberOfMessages --region us-west-2 --output text | awk '{print $2}')
 echo "$ql4 count is $val4"
    $zb -z $zs -s $zh -k testService4 -o val4 >/dev/null 2>&1


ql5=https://sqs.us-west-2.amazonaws.com/843390635802/testService5

val5=$(aws sqs get-queue-attributes --queue-url $ql5 --attribute-names ApproximateNumberOfMessages --region us-west-2 --output text | awk '{print $2}')
echo "$ql5 count is $val5"
    $zb -z $zs -s $zh -k testService2 -o val5 >/dev/null 2>&1

В приведенном выше коде на этом шаге $zb -z $zs -s $zh -k testService2 -o val5 >/dev/null 2>&1 я использовал -k в качестве 5 различных значений.Так как я могу организовать это и работать так же, как указано выше?

1 Ответ

0 голосов
/ 26 октября 2018

Один цикл достаточен для устранения дублирования кода, и нам не нужен массив - мы можем прочитать одну ссылку на очередь после другой в цикле.Аргумент переменной для опции -k можно извлечь из ссылки очереди , удалив часть URL до / с расширением параметра оболочки ${parameter##word}.

zs=10.0.3.10
zb=/usr/local/bin/zabbix_sender
zh=zabbix
# ql = queue link
while read ql
do
    val=$(aws sqs get-queue-attributes --queue-url $ql --attribute-names ApproximateNumberOfMessages --region us-west-2 --output text | awk '{print $2}')
    echo "$ql count is $val"
    $zb -z $zs -s $zh -k ${ql##*/} -o $val >/dev/null 2>&1
done <<END
https://sqs.us-west-2.amazonaws.com/843390035802/testService1
https://sqs.us-west-2.amazonaws.com/853390078801/testService2
https://sqs.us-west-2.amazonaws.com/843393305801/testService3
https://sqs.us-west-2.amazonaws.com/875660005801/testService4
https://sqs.us-west-2.amazonaws.com/843390635802/testService5
END
...