Страница 1 из 1

Bash + mail + mysql

Добавлено: 2014-05-16 5:41:18
pumko_adm
Здравствуйте!
Помогите со скриптом.

Код: Выделить всё

#! /bin/bash

to=$1
subject=$2
body=$3

ack=`echo "select message FROM table WHERE id='$body'" | mysql -uuser -ppassword -Dbase`
cat <<EOF | mail -s "$subject" "$to"
$ack
EOF
В таком виде все работает, почта отсылается, но при этом в переменной body=$3 может быть несколько данных, разделенных чем угодно (могу сам выставить ручками, например data1;data2;data3).
Как можно разделить эти данные? Что бы в ack уходило например первое значение body - data1. А последующие значения можно было вставить в вывод mail?
Что-то типо:

Код: Выделить всё

#! /bin/bash

to=$1
subject=$2
body=$3

ack=`echo "select message FROM table WHERE id='$body1'" | mysql -uuser -ppassword -Dbase`
cat <<EOF | mail -s "$subject" "$to"
$ack $body2 $body3
EOF

Re: Bash + mail + mysql

Добавлено: 2014-05-16 9:38:13
pumko_adm
Наверное, что бы было понятнее, то данный скрипт для заббикса, для отправки уведомлений.
Заббикс настроен на отправку почты через внешний скрипт, представленный выше. Из документации к заббиксу:
"Когда скрипт оповещения выполняется ему передается через командную строку 3 ($1, $2 и $3 соответственно): Кому Тема Сообщение"
Так вот, в $3 передаются данные типа: {EVENT.ID};{INVENTORY.LOCATION1};{TRIGGER.STATUS};{TRIGGER.SEVERITY};{EVENT.DATE};{EVENT.TIME}
Первый из списка - {EVENT.ID} как раз таки и нужен для mysql-запроса. остальное требуется передать в теле письма.

Re: Bash + mail + mysql

Добавлено: 2014-05-16 10:38:54
pumko_adm
Пока гуглил, нашел такой вариант:

Код: Выделить всё

#! /bin/bash

to=$1
subject=$2
declare -a body="($3)"
body0="${body[0]}"
body1="${body[1]}"
body2="${body[2]}"

ack=`echo "select message FROM acknowledges WHERE eventid='$body0'" | mysql -uroot -ppassword -Dzabbix`
cat <<EOF | mail -s "$subject" "$to"
$body0  + $body1 + $body2 + $ack
EOF
Так же, на тостере предложили еще и такой:

Код: Выделить всё

#! /bin/bash
to=$1
subject=$2
body=$3

ack=`echo "select message FROM table WHERE id='$(echo $body | cut -d\; -f1)'" | mysql -uuser -ppassword -Dbase`
cat <<EOF | mail -s "$subject" "$to"
$(echo $body | cut -d\; -f2-)
EOF