Модератор: Модераторы разделов
ReSeR
Сообщения: 383
ОС: GNU Debian
Сообщение
ReSeR » 02.11.2011 17:41
Есть небольшой скрипт, который проверяет значение, и скидывет полученное по содержащимся в нем же адресам e-mail.
Код: Выделить всё
select=`sqlplus -S user/pass@SYS @/home/jobs.sql`
/bin/echo "$select" > /home/new
/bin/grep @ /home/new > /home/adress
set `cat /home/adress`
/bin/echo $1 > /home/1
/bin/echo $2 > /home/2
/bin/echo $3 > /home/3
/bin/echo $4 > /home/4
/bin/echo $5 > /home/5
/bin/echo $6 > /home/6
/bin/echo $7 > /home/7
/bin/echo $8 > /home/8
/bin/echo $9 > /home/9
if [ -s /home/1 ]
then /usr/local/bin/sendEmail -f from@email.com -t "$1" -u "PROBLEM" -m "$select" -s mail.server.com
else exit 0
fi
if [ -s /home/2 ]
then /usr/local/bin/sendEmail -f from@email.com -t "$2" -u "PROBLEM" -m "$select" -s mail.server.com
else exit 0
fi
if [ -s /home/3 ]
then /usr/local/bin/sendEmail -f from@email.com -t "$3" -u "PROBLEM" -m "$select" -s mail.server.com
else exit 0
fi
if [ -s /home/4 ]
then /usr/local/bin/sendEmail -f from@email.com -t "$4" -u "PROBLEM" -m "$select" -s mail.server.com
else exit 0
fi
if [ -s /home/5 ]
then /usr/local/bin/sendEmail -f from@email.com -t "$5" -u "PROBLEM" -m "$select" -s mail.server.com
else exit 0
fi
if [ -s /home/6 ]
then /usr/local/bin/sendEmail -f from@email.com -t "$6" -u "PROBLEM" -m "$select" -s mail.server.com
else exit 0
if [ -s /home/7 ]
then /usr/local/bin/sendEmail -f from@email.com -t "$7" -u "PROBLEM" -m "$select" -s mail.server.com
else exit 0
fi
if [ -s /home/8 ]
then /usr/local/bin/sendEmail -f from@email.com -t "$8" -u "PROBLEM" -m "$select" -s mail.server.com
else exit 0
fi
if [ -s /home/9 ]
then /usr/local/bin/sendEmail -f from@email.com -t "$9" -u "PROBLEM" -m "$select" -s mail.server.com
else exit 0
fi
exit 0 Так вот при выполнении
бывает что в значении находятся несколько одинаковых адресов и они все заносятся в файл /home/adress, и соответственно человеку приходит несколько одинаковых писем.
Какой утилитой проверить файл /home/adress и выкинуть от туда дубликаты?
Бэкап - акт проявления трусости.
/dev/random
Администратор
Сообщения: 5486
ОС: Gentoo
Сообщение
/dev/random » 02.11.2011 17:48
sort -u
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 02.11.2011 17:59
ReSeR писал(а): ↑ 02.11.2011 17:41
Какой утилитой проверить файл /home/adress и выкинуть от туда дубликаты?
man uniq
и это тоже.
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 02.11.2011 18:29
ReSeR
Почитали бы Вы что-нибудь про циклы. Весь Ваш скрипт можно заменить чем-то вроде этого:
Весь Ваш скрипт:
Код: Выделить всё
#!/bin/bash
INDEX=1 ; sqlplus -S user/pass@SYS @/home/jobs.sql | grep @ | sort -u | while read ADDRESS ; do
[ -n $ADDRESS ] && sendEmail -f from@email.com -t "$INDEX" -u "PROBLEM" -m "$select" -s mail.server.com;
((INDEX++))
doneА в Вашем скрипте, если адресов будет больше 10, скрипт будет отрабатывать неверно.
И способ проверки переменной, пустая ли она, через файл весьма необычный. test умеет и без файла проверять, если, конечно, эти файлы потом нигде больше не используются.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 02.11.2011 19:54
ReSeR писал(а): ↑ 02.11.2011 17:41
select=`sqlplus -S user/pass@SYS @/home/jobs.sql`
почти всё вроде можно сделать средствами SQL, это будет быстрее, т.к. вы всё равно её используете.
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 02.11.2011 20:21
drBatty писал(а): ↑ 02.11.2011 19:54
почти всё вроде можно сделать средствами SQL, это будет быстрее, т.к. вы всё равно её используете.
Ну письмо sql не отправит. Но выборку через sql реализовать вполне можно.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 02.11.2011 20:30
SLEDopit писал(а): ↑ 02.11.2011 20:21
Ну письмо sql не отправит.
не отправит, но выхлоп SQL можно напрямую в sendmail направить (через xargs например)
ReSeR
Сообщения: 383
ОС: GNU Debian
Сообщение
ReSeR » 03.11.2011 15:13
SLEDopit писал(а): ↑ 02.11.2011 18:29
Почитали бы Вы что-нибудь про циклы.
Я сейчас этим и занимаюсь, решил на Perl ваять научиться. Но в данной ситуации этот вариант работает и его хватает с головой. Спасибо!
Бэкап - акт проявления трусости.
Poor Fred
Сообщения: 1575
Статус: Pygoscelis papua
ОС: Gentoo Linux, FreeBSD
Сообщение
Poor Fred » 03.11.2011 19:07
SLEDopit писал(а): ↑ 02.11.2011 18:29
Почитали бы Вы что-нибудь про циклы.
И про заголовки Cc: и/или Bcc:
Убить всех человеков!