PDA

Показать полную графическую версию : [решено] Скрипт автоответа на sh


tarasov.evgeny
05-07-2012, 15:43
Задача:
Каждый день утром проверять объем файла и в случае превышения размера отправлять письмо сотруднику и в группу админов с текстом:
"ААА! Я лопну!!!"

Сейчас у меня есть только файл со списком граждан, которым нужно отправить сообщение. Этот список создается в файле, к концу файла прикрепляется стандартное сообщение из другого файла и отправляется админам. Затем файл удаляется.

cd/var/mail/
find . -size +20M | awk ‘{print substr($0,3,25)}’ > /etc/ipfw/temp_auto
cd /etc/ipfw
cat temp_auto auto_answer_ru | mail -s “Test” admin
rm /etc/ipfw/temp_auto


Как мне по строчно обработать этот файл - одна строка один адрес почты.
Содержимое файла temp_auto
nikolay.ivanov
petr.sidorov

Можно ли это сделать без создания файла и последующего его удаления?

tarasov.evgeny
05-07-2012, 17:29
cd/var/mail/
find . -size +20M | awk ‘{print substr($0,3,25)}’ > /etc/ipfw/temp_auto
cd /etc/ipfw
for i in $( cat temp_auto ); do
echo "Уважаемый(ая), $i. Ваш почтовый адрес бла бла бла..." | mail -s "AAA. Я лопну!!!!" $i
done
rm /etc/ipfw/temp_auto

Вопрос про не создания файла, пока актуально

zeroka_no_onna
06-07-2012, 01:33
Так вместо cat temp_auto и поставь find|awk (естественно, без перенаправления в файл)

tarasov.evgeny
06-07-2012, 10:39
zeroka_no_onna,

А как добавить проверку if else?
вот так коряво я пытался сделать проверку на осутствие файлов. Не работает конечно же.

cd /var/mail
i=find . -size +20M | awk '{print substr($0,3,25)}' | wc -l'
while [$i -gt 0]
do
for a in $(find . -size +20M | awk '{print substr($0,3,25)}' )
echo "Hello, $a!!!" | mail admin
done
done
Как можно результат выполнения команды присвоить переменной?

zeroka_no_onna
06-07-2012, 12:33
проверку на осутствие файлов.
Зачем?find же, он ничего не выведет если файла не будет.
Как можно результат выполнения команды присвоить переменной?
Почти так, как сделано.Cм. ниже.
А вобще awk для простых задач лучше не использовать, он относительно "тяжёл".Возможно при помощи cut/sed лучше выделить нужную часть http://www.starlink.rl.ac.uk/docs/sc4.htx/node38.html
Или даже просто возможностями шелла(да и заодно решится это одним вызовом есно)for a in $(find . -size +10k); do
#Вот присвоение переменной результата команды
NAME=$(echo $a|awk '{print substr($0,3,25)}')
echo "Hello, $NAME!!!"

#Вот без всяких аваков и прочих ненужных усложнений
echo "Hello, ${a#./}!!!"
done




© OSzone.net 2001-2012