Bash + mail + mysql

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
pumko_adm
проходил мимо
Сообщения: 6
Зарегистрирован: 2014-05-16 5:31:40

Bash + mail + mysql

Непрочитанное сообщение pumko_adm » 2014-05-16 5:41:18

Здравствуйте!
Помогите со скриптом.

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

#! /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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

pumko_adm
проходил мимо
Сообщения: 6
Зарегистрирован: 2014-05-16 5:31:40

Re: Bash + mail + mysql

Непрочитанное сообщение pumko_adm » 2014-05-16 9:38:13

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

pumko_adm
проходил мимо
Сообщения: 6
Зарегистрирован: 2014-05-16 5:31:40

Re: Bash + mail + mysql

Непрочитанное сообщение pumko_adm » 2014-05-16 10:38:54

Пока гуглил, нашел такой вариант:

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

#! /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