Страница 1 из 1
помогите написать скрипт
Добавлено: 2007-08-22 12:56:28
maniac
Народ плохо разбираюсь в программировании. Помогите с написание скрипта. FreeBSD 6.2 есть файлик типа text.txt и рисунок, мне нужно написать скрипт чтобы это каждый день через крон отправлялось на почту. Как это сделать???
Re: помогите написать скрипт
Добавлено: 2007-08-22 13:22:51
manefesto
кхе... ты знаешь как работает sendmail ?
Если да то указываешь чтобы отправлял такому то адресату такое то вложение, и никакого скрипта писать не надо будет
Re: помогите написать скрипт
Добавлено: 2007-08-22 16:03:48
Alex Keda
Код: Выделить всё
#!/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
непроверял.
Re: помогите написать скрипт
Добавлено: 2007-08-25 19:00:56
serge
Есть порт интересный:
Код: Выделить всё
[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:
как раз для этих целей
Re: помогите написать скрипт
Добавлено: 2007-09-13 17:01:31
BigBrother
Помогите создать простенький скрипт. Задча такая, есть файл логов, нужно что бы при запуске скрипта он проверял есть ли в файле хоть один символ, а лучше если размер файл больше чем 0 (нуль) байт, тогда отправляем содержимое файла (или сам файл) по почте, после отпраки очищаем (но, не удаляем) файл. Этот скрип я потом запихну в крон.
поскольку я в программирование, кроме xHTML, не дружу, вот то, что я придумал.
Код: Выделить всё
#!/usr/local/bin/bash
mail -s logs admin@firma.com < /var/log/file.log
cat < /var/log/file.log
Команда кат со знаком < файл очишает, но потом приходится жать ctrl+c ибо она сама не замераешся, соответствено скрипт тоже не завершается. Понимаю что это извращенство, но другого не придумал, помогите плз

Re: помогите написать скрипт
Добавлено: 2007-09-13 23:22:51
Alex Keda
Re: помогите написать скрипт
Добавлено: 2007-09-14 14:12:45
dikens3
Код: Выделить всё
#!/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
Re: помогите написать скрипт
Добавлено: 2007-10-18 14:27:43
kmb
Код: Выделить всё
#!/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
не получается дописать блок
else, более конкретно нужно вставить условие:
if( $8 >= $stime && $8 <= $etime ), т.е. выбрать все значение подпадающие под выбранные даты.
Пробывал по-разному:
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}
Но увы, мои познания в sh-программировании очень слабы :/
Может кто-нибудь поможет?
p.s. кстати начальный скрипт Лиса для подсчета трафд

пытаюсь переделать для подсчета ipacctd

Re: помогите написать скрипт
Добавлено: 2007-10-18 14:40:40
schizoid
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
кадато так писал...работало
Re: помогите написать скрипт
Добавлено: 2007-10-18 15:31:10
kmb
Код: Выделить всё
awk: syntax error at source line 2
context is
>>> if <<< ( [ $8>=1 ] && [ $8<=5 ] )
awk: bailing out at source line 10
expr: syntax error
квадратные скобки не помогли :/
Re: помогите написать скрипт
Добавлено: 2007-10-18 15:39:18
Alex Keda
http://www.lissyara.su/?id=1075
========
там используются всякие фени типа "-o" и прочия...
Re: помогите написать скрипт
Добавлено: 2007-10-18 16:05:11
schizoid
а че это за конструкция то такая? >= <= ?
Код: Выделить всё
УСЛОВИЯ СРАВНЕНИЯ ЦЕЛЫХ ЧИСЕЛ:
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: помогите написать скрипт
Добавлено: 2007-10-18 16:24:35
Гость
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: помогите написать скрипт
Добавлено: 2007-10-18 16:35:22
Гость
ах, че-то мя заглючило. В awk'е не работают квадратные скобки, кои являются алиасом test(1). Там скорее всего это делается путем объединения условий при помощи фигурных скобок {}.
Re: помогите написать скрипт
Добавлено: 2007-10-18 16:51:49
stgib
kmb, а если взять $stime и $etime в кавычки вида "'$var'"?
Re: помогите написать скрипт
Добавлено: 2007-10-18 19:44:18
kmb
сделал так:
Код: Выделить всё
#!/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
что не так... не врубаюсь...
Re: помогите написать скрипт
Добавлено: 2007-10-18 20:20:05
kmb
похоже ipacctd в последний столбец добавляет не по порядку... эх... видимо придеться вначале сортировать файл по последнему столбцу...

Re: помогите написать скрипт
Добавлено: 2007-10-18 21:08:26
kmb
Код: Выделить всё
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
а как сортировку выполнить по-последнему столбцу? пробывал так:
cat unsorted_file | awk '{print $8}' | sort -n>>sorted_file
но в sorted_file только и отсортированная строка :/
Re: помогите написать скрипт
Добавлено: 2007-10-18 22:00:06
kmb
сделал через ж
Код: Выделить всё
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
p.s. нашел очепятку, терь потестирую пару дней и выложу, мож кому пригодиться) всем спасибо.
Re: помогите написать скрипт
Добавлено: 2007-10-18 22:28:45
stgib
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.
Re: помогите написать скрипт
Добавлено: 2007-10-18 22:50:21
kmb
вот, что значит не внимательно посмотрел в ман

)) сенькаю!
