помогите написать скрипт
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- мл. сержант
- Сообщения: 149
- Зарегистрирован: 2006-05-31 7:42:14
помогите написать скрипт
Народ плохо разбираюсь в программировании. Помогите с написание скрипта. FreeBSD 6.2 есть файлик типа text.txt и рисунок, мне нужно написать скрипт чтобы это каждый день через крон отправлялось на почту. Как это сделать???
Услуги хостинговой компании Host-Food.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/
Тарифы на виртуальные сервера (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/
- manefesto
- Группенфюррер
- Сообщения: 6934
- Зарегистрирован: 2007-07-20 8:27:30
- Откуда: Пермь
- Контактная информация:
Re: помогите написать скрипт
кхе... ты знаешь как работает sendmail ?
Если да то указываешь чтобы отправлял такому то адресату такое то вложение, и никакого скрипта писать не надо будет
Если да то указываешь чтобы отправлял такому то адресату такое то вложение, и никакого скрипта писать не надо будет
- Alex Keda
- стреляли...
- Сообщения: 35437
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
Re: помогите написать скрипт
Код: Выделить всё
#!/bin/sh
cat file.txt > file.out
cat image.jpg | uuencode image.jpg >> file.out
mail -s mail_with_text_and_picture me@my-domain.su < file.out
Убей их всех! Бог потом рассортирует...
- serge
- майор
- Сообщения: 2133
- Зарегистрирован: 2006-07-30 15:34:14
- Откуда: Саратов
- Контактная информация:
Re: помогите написать скрипт
Есть порт интересный:
как раз для этих целей
Код: Выделить всё
[serge@server ~]$ cd /usr/ports/
[serge@server /usr/ports]$ make search name=biabam
Port: biabam-0.9.7_1
Path: /usr/ports/mail/biabam
Info: A command-line attachment mailer
Maint: ports@FreeBSD.org
B-deps:
R-deps: bash-3.2.17_2 gettext-0.16.1_3 libiconv-1.9.2_2
WWW:
- BigBrother
- сержант
- Сообщения: 150
- Зарегистрирован: 2007-07-27 17:05:55
- Откуда: Украина
- Контактная информация:
Re: помогите написать скрипт
Помогите создать простенький скрипт. Задча такая, есть файл логов, нужно что бы при запуске скрипта он проверял есть ли в файле хоть один символ, а лучше если размер файл больше чем 0 (нуль) байт, тогда отправляем содержимое файла (или сам файл) по почте, после отпраки очищаем (но, не удаляем) файл. Этот скрип я потом запихну в крон.
поскольку я в программирование, кроме xHTML, не дружу, вот то, что я придумал.
Команда кат со знаком < файл очишает, но потом приходится жать ctrl+c ибо она сама не замераешся, соответствено скрипт тоже не завершается. Понимаю что это извращенство, но другого не придумал, помогите плз 
поскольку я в программирование, кроме xHTML, не дружу, вот то, что я придумал.
Код: Выделить всё
#!/usr/local/bin/bash
mail -s logs admin@firma.com < /var/log/file.log
cat < /var/log/file.log

- Alex Keda
- стреляли...
- Сообщения: 35437
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
Re: помогите написать скрипт
Код: Выделить всё
echo -n >/var/log/file.log
Убей их всех! Бог потом рассортирует...
- dikens3
- подполковник
- Сообщения: 4856
- Зарегистрирован: 2006-09-06 16:24:08
- Откуда: Нижний Новгород
- Контактная информация:
Re: помогите написать скрипт
Код: Выделить всё
#!/bin/sh
LANG=ru_RU.KOI8-R
MM_CHARSET=KOI8-R
export LANG MM_CHARSET
text=$(cat /var/log/file.log/mainlog.0.gz | gunzip)
# Отправляем данные, если они есть.
if [ -n "$text" ]
then
echo "$text" | /usr/local/bin/mutt -s "Файл с логами" admin@domain.ru
fi
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
-
- лейтенант
- Сообщения: 680
- Зарегистрирован: 2007-02-20 8:30:03
- Контактная информация:
Re: помогите написать скрипт
Код: Выделить всё
#!/bin/sh
external_IP="`/sbin/ifconfig iwi0 | grep inet | awk '{print $2}'`"
tmp_file="/tmp/ipacctd.traffic.$$.tmp"
logfile=$1
if [ $# -eq 1 ]
then
stime="`head -1 $logfile | awk '{print $8}'`"
etime="`tail -1 $logfile | awk '{print $8}'`"
stime="`date -r $stime`"
etime="`date -r $etime`"
cat $logfile | grep "^[0-9]" | grep -v "^$external_IP"| awk '
BEGIN { ib=0 }
{
ib=$6+ib
}
END {
printf "%s \n",ib
} ' > ${tmp_file}
read bytes_in < ${tmp_file}
cat $logfile | grep "^[0-9]" | grep "^$external_IP"| awk '
BEGIN { ob=0 }
{
ob=$6+ob
}
END {
printf "%s \n",ob
} ' > ${tmp_file}
read bytes_out < ${tmp_file}
rm ${tmp_file}
echo "$stime "-" $etime
IN: `expr ${bytes_in} / 1048576` Mb
OUT: `expr ${bytes_out} / 1048576` Mb"
#echo ${bytes_in} ${bytes_out}
elif [ $# -eq 0 ]
then
echo "Please, select path to logfile."
else
stime=`date -j -f "%d/%m/%Y %H:%M:%S" "$2 00:00:00" "+%s"`
etime=`date -j -f "%d/%m/%Y %H:%M:%S" "$3 23:59:59" "+%s"`
cat $logfile | grep "^[0-9]" | grep -v "^$external_IP"| awk '
BEGIN { ib=0 }
{
ib=$6+ib
}
END {
printf "%s \n",ib
} ' > ${tmp_file}
read bytes_in < ${tmp_file}
cat $logfile | grep "^[0-9]" | grep "^$external_IP"| awk '
BEGIN { ob=0 }
{
ob=$6+ob
}
END {
printf "%s \n",ob
} ' > ${tmp_file}
read bytes_out < ${tmp_file}
rm ${tmp_file}
stime="`date -r $stime`"
etime="`date -r $etime`"
echo "$stime "-" $etime
IN: `expr ${bytes_in} / 1048576` Mb
OUT: `expr ${bytes_out} / 1048576` Mb"
#echo ${bytes_in} ${bytes_out}
fi
exit 0
if( $8 >= $stime && $8 <= $etime ), т.е. выбрать все значение подпадающие под выбранные даты.
Пробывал по-разному:
Но увы, мои познания в sh-программировании очень слабы :/cat $logfile | grep "^[0-9]" | grep -v "^$external_IP"| awk '
if( $8 >= $stime && $8 <= $etime )
BEGIN { ib=0 }
{
ib=$6+ib
}
END {
printf "%s \n",ib
} ' > ${tmp_file}
read bytes_in < ${tmp_file}
cat $logfile | grep "^[0-9]" | grep "^$external_IP"| awk '
if( $8 >= $stime && $8 <= $etime )
BEGIN { ob=0 }
{
ob=$6+ob
}
END {
printf "%s \n",ob
} ' > ${tmp_file}
read bytes_out < ${tmp_file}
rm ${tmp_file}
Может кто-нибудь поможет?
p.s. кстати начальный скрипт Лиса для подсчета трафд


truth is out there...
- schizoid
- подполковник
- Сообщения: 3228
- Зарегистрирован: 2007-03-03 17:32:31
- Откуда: Украина, Чернигов
- Контактная информация:
Re: помогите написать скрипт
кадато так писал...работалоif ( [ -n "${if%:}" ] && [ -n "$vip" ] && [ -n "$rip" ] && [ -n "$host" ] )
then i=0 && echo "${if%:} ~ $vip ~ $rip ~ $host ~ $date" | mail -s "Bad connections!!!" admin@domen
fi
ядерный взрыв...смертельно красиво...жаль, что не вечно...
-
- лейтенант
- Сообщения: 680
- Зарегистрирован: 2007-02-20 8:30:03
- Контактная информация:
Re: помогите написать скрипт
Код: Выделить всё
awk: syntax error at source line 2
context is
>>> if <<< ( [ $8>=1 ] && [ $8<=5 ] )
awk: bailing out at source line 10
expr: syntax error
truth is out there...
- Alex Keda
- стреляли...
- Сообщения: 35437
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
Re: помогите написать скрипт
Убей их всех! Бог потом рассортирует...
- schizoid
- подполковник
- Сообщения: 3228
- Зарегистрирован: 2007-03-03 17:32:31
- Откуда: Украина, Чернигов
- Контактная информация:
Re: помогите написать скрипт
а че это за конструкция то такая? >= <= ?

Код: Выделить всё
УСЛОВИЯ СРАВНЕНИЯ ЦЕЛЫХ ЧИСЕЛ:
x -eq y "x" равно "y",
x -ne y "x" неравно "y",
x -gt y "x" больше "y",
x -ge y "x" больше или равно "y",
x -lt y "x" меньше "y",
x -le y "x" меньше или равно "y".
ядерный взрыв...смертельно красиво...жаль, что не вечно...
-
- проходил мимо
Re: помогите написать скрипт
lissyara, точняк:
- >= это [ $x -ge $y ]. ge - greater or equal (algebraically)
- <= это [ $x -le $y ]. le - less or equal (algebraically)
- >= это [ $x > $y -o $x = $y ]. ge - greater or equal (binary value of characters)
- <= это [ $x < $y -o $x = $y ]. le - less or equal (binary value of characters)
-
- проходил мимо
Re: помогите написать скрипт
ах, че-то мя заглючило. В awk'е не работают квадратные скобки, кои являются алиасом test(1). Там скорее всего это делается путем объединения условий при помощи фигурных скобок {}.
-
- рядовой
- Сообщения: 15
- Зарегистрирован: 2007-08-01 4:43:26
Re: помогите написать скрипт
kmb, а если взять $stime и $etime в кавычки вида "'$var'"?
-
- лейтенант
- Сообщения: 680
- Зарегистрирован: 2007-02-20 8:30:03
- Контактная информация:
Re: помогите написать скрипт
сделал так:
запускаю:
Код: Выделить всё
#!/bin/sh
external_IP="`/sbin/ifconfig iwi0 | grep inet | awk '{print $2}'`"
tmp_file="/tmp/ipacctd.traffic.$$.tmp"
logfile=$1
if [ $# -eq 1 ]
then
stime="`head -1 $logfile | awk '{print $8}'`"
etime="`tail -1 $logfile | awk '{print $8}'`"
stime="`date -r $stime`"
etime="`date -r $etime`"
cat $logfile | grep "^[0-9]" | grep -v "^$external_IP"| awk '
BEGIN { ib=0 }
{
ib=$6+ib
}
END {
printf "%s \n",ib
} ' > ${tmp_file}
read bytes_in < ${tmp_file}
cat $logfile | grep "^[0-9]" | grep "^$external_IP"| awk '
BEGIN { ob=0 }
{
ob=$6+ob
}
END {
printf "%s \n",ob
} ' > ${tmp_file}
read bytes_out < ${tmp_file}
rm ${tmp_file}
echo "$stime "-" $etime
IN: `expr ${bytes_in} / 1048576` Mb
OUT: `expr ${bytes_out} / 1048576` Mb"
#echo ${bytes_in} ${bytes_out}
elif [ $# -eq 0 ]
then
echo "Please, select path to logfile."
else
stime=`date -j -f "%d/%m/%Y %H:%M:%S" "$2 00:00:00" "+%s"`
etime=`date -j -f "%d/%m/%Y %H:%M:%S" "$3 23:59:59" "+%s"`
#echo $stime $etime
cat $logfile | grep "^[0-9]" | grep -v "^$external_IP" | awk '
BEGIN { ib=0 }
{
if($8>='$stime' && $8<='$etime')
ib=$6+ib
}
END {
printf "%s \n",ib
}
' > ${tmp_file}
read bytes_in < ${tmp_file}
cat $logfile | grep "^[0-9]" | grep "^$external_IP"| awk '
BEGIN { ob=0 }
{
if($8>='$stime' && $8<='$etime')
ob=$6+ob
ob = $8
}
END {
printf "%s \n",ob
} ' > ${tmp_file}
read bytes_out < ${tmp_file}
rm ${tmp_file}
stime="`date -r $stime`"
etime="`date -r $etime`"
echo "$stime "-" $etime
IN: `expr ${bytes_in} / 1048576` Mb
OUT: `expr ${bytes_out} / 1048576` Mb"
#echo ${bytes_in} ${bytes_out}
fi
exit 0
ответ:./t.sh t.log
запускаю так:Wed Oct 17 12:19:09 UTC 2007 - Thu Oct 18 11:15:19 UTC 2007
IN: 24 Mb
OUT: 5 Mb
по идее ответ такой же должен быть, однако получаю:./t.sh t.log 10/10/2007 18/10/2007
что не так... не врубаюсь...Wed Oct 10 00:00:00 UTC 2007 - Thu Oct 18 23:59:59 UTC 2007
IN: 24 Mb
OUT: 1137 Mb
truth is out there...
-
- лейтенант
- Сообщения: 680
- Зарегистрирован: 2007-02-20 8:30:03
- Контактная информация:
Re: помогите написать скрипт
похоже ipacctd в последний столбец добавляет не по порядку... эх... видимо придеться вначале сортировать файл по последнему столбцу... 

truth is out there...
-
- лейтенант
- Сообщения: 680
- Зарегистрирован: 2007-02-20 8:30:03
- Контактная информация:
Re: помогите написать скрипт
Код: Выделить всё
192.168.1.1 520 192.168.1.3 520 udp 1114 2 1
192.168.1.3 190 255.255.255.250 1900 udp 2500 77 4
192.168.1.1 10 192.168.1.3 0 icmp 1101 37 5
192.168.1.1 10 192.168.1.3 0 icmp 1111 37 2
192.168.1.3 111 255.255.255.250 3128 tcp 1052 6 3
но в sorted_file только и отсортированная строка :/cat unsorted_file | awk '{print $8}' | sort -n>>sorted_file
truth is out there...
-
- лейтенант
- Сообщения: 680
- Зарегистрирован: 2007-02-20 8:30:03
- Контактная информация:
Re: помогите написать скрипт
сделал через ж
p.s. нашел очепятку, терь потестирую пару дней и выложу, мож кому пригодиться) всем спасибо.

Код: Выделить всё
less sort.sh
#!/bin/sh
cat unsorted_file | awk '{print $8" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8}' | sort -n>>sorted_file
Код: Выделить всё
less clear.sh
#!/bin/sh
cat sorted_file | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8" "$9}'>> clear_sorted_file
truth is out there...
-
- рядовой
- Сообщения: 15
- Зарегистрирован: 2007-08-01 4:43:26
Re: помогите написать скрипт
kmb, а чем sort -gk8 не угодил?
sort(1) писал(а): -k, --key=POS1[,POS2]
start a key at POS1, end it at POS 2 (origin 1)
<snip>
POS is F[.C][OPTS], where F is the field number and C the character
position in the field. OPTS is one or more single-letter ordering
options, which override global ordering options for that key. If no
key is given, use the entire line as the key.
-
- лейтенант
- Сообщения: 680
- Зарегистрирован: 2007-02-20 8:30:03
- Контактная информация:
Re: помогите написать скрипт
вот, что значит не внимательно посмотрел в ман
)) сенькаю! 


truth is out there...