|
Поиск уникальных совпадений в двух файлов
cat maillist_all/nmail11|grep '\@'|sed 's/\&//g' |awk '{if(FILENAME=="maillist_all/addrbook") { mail[$1]=$1} else {if($1 in mail) print $1}}' maillist_all/addrbook -|sort |uniq
Lock files
#!/usr/local/bin/bash
LOCKFILE="/var/run/.sendlogs.lock"
CONFIGFILE="/usr/local/etc/sendlogs/${1:-sendlogs}.conf"
. "$CONFIGFILE"
[ "$(/bin/ps -p $PPID -o comm=)" != "lockf" ] && exec /bin/lockf -t0 "$LOCKFILE" $0 $@
Форматирование файла
fmt log/count_run.201002171700.log
Трассировка
/bin/bash -xv command.sh
Чтение из файла и вывод
exec < testfile.txt
while read string do
echo $string
done
Запись в файл
exec > testfile.txt echo "Line 1 of the file" echo "Line 2 of the file"
Циклы
while true; do echo continue # бесконечный цикл начинается сначала и пропускается все что ниже echo "yu missed me!" done while true; do echo break # бесконечный цикл начинается прерывается здесь echo "yu missed me!" done
Диалог
dialog() {
echo -e "\n\n Continue? (y/n):"
read x
if [ "$x" == "y" ] || [ "$x" == "yes" ] ;then
dddd=1
elif [ "$x" == "n" ] || [ "$x" == "no" ] ;then
echo "exit 0"
exit;
else
dialog
fi
}
можно включить регулярные выражения
read x
x=$(echo $x|awk '{if($1~/[yY][e]?[s]?/){ print 1 } else if($1~/[Nn][o]?/){print 0} else { print 2}}')
if [ $x = 1 ];then
...
Просмотр элементов поля
cat /etc/passwd|awk -F: '{print $1}'
cut -f 1 -d':' /etc/passwd
[root@mail29 ~]# echo db.patch.bill.domain.com|cut -d '.' -f 1
db
[root@mail29 ~]# echo db.patch.bill.domain.com|cut -d '.' -f 3-82
bill.domain.com
*HITS*
$ cut -f1 -d' ' /var/log/httpd-access.log|sort|uniq -c
Количество запросов в сек в лог access.log
tail -f /opt/logs/accel/access_log |awk -F: '{if(st==0) {start=$4; st=1} else {d=$4-start; if(d==0) { s=s+1; } else { print s; st=0; s=0}}}'
Количество пакетов/байт в сек
netstat -w1
Добавить список файлов в массив
FILES=$(ls|xargs echo)
Поиск и удаление
find trunk/ -type d -name '.svn'|xargs rm -rf find trunk/ -type d -name '.svn' -delete find /home/tinderbox/packages/RB-amd64-7/ -name '*tbz' -delete
Передача параметров
Пример:
/root/robots/switcher --local='$host' --remote='$remote_ip' --status=master --action=UP
Следующий скрипт иллюстрирует возможность передачи параметров через ключи: /root/robots/switcher Каталог с примерами здесь
Выделение каталога
ls /usr/home/builder/SVN/patches/repos/svn.x99.ru/software/vega/perl/basis/trunk/.modules/util.xml|awk -F/ '{f=NF-1; for(i=2;i<NF;i++) { printf("/%s",$i)} print "" }'
/usr/home/builder/SVN/patches/repos/svn.x99.ru/software/vega/perl/basis/trunk/.modules
echo /usr/home/john/svn/svn.x99.ru/software/vega|awk -F/ '{f=NF-1; for(i=2;i<=NF;i++) { printf("%s/%s\n",b,$i); b=b"/"$i} }'
/usr
/usr/home
/usr/home/john
/usr/home/john/svn
/usr/home/john/svn/svn.x99.ru
/usr/home/john/svn/svn.x99.ru/software
/usr/home/john/svn/svn.x99.ru/software/vega
Выделение файла
ls /usr/home/builder/SVN/patches/repos/svn.x99.ru/software/vega/perl/basis/trunk/.modules/util.xml|awk -F/ '{name=NF; print $name}'
util.xml
вопрос: Как через echo вывести: -n ответ: echo -e "\0055n"
Дата и время
дата на день назад DATE=`date -v-1d +%Y%m%d%H%M`
auto-increment
i=0
i=$(echo "$i+1"|bc)
i=$(expr $i + 1)
03:34 root@ds213 ~ # netstat -na|head|awk '{if($4~/^[0-9]/ && $4!~/127.0.0.1/ && $4!~/^10\./) print $4, $5}'
87.242.74.224.80 90.151.235.205.2970
отделяем ip и port
netstat -na|head|awk '{if($4~/^[0-9]/ && $4!~/127.0.0.1/ && $4!~/^10\./) print $4, $5, " "}'|sed -e 's/\.\([0-9]*\) / \1 /g'
87.242.74.224 80 95.71.233.32 54076
копирование логов в домашние директории пользователей
data_from=20100119; data_to=20100121; logs=$(ls /home/*/*/logs/|grep $data_from|sed 's/'\.$data_from\.gz'//g'); for i in $logs; do echo $i; user=$(ls -ld /home/*/$i|awk '{if($3~/^u/) { print $3 } else { print "0"}}'); if [ "$user" == "0" ]; then ddd=1; else cp /opt/logs/nginx/archive/$i.access_log.$data_to /home/$user/$i/logs/$i.$data_to && cd /home/$user/$i/logs/ && echo "gzip $i.$data_to"; gzip $i.$data_to; fi; done
Move broken files
root@awstats8 ~ # for i in $(find /home/masterlog/awstats/ -type f -name 'awstats[0-1][0-9]2009.*.txt'|xargs grep -l -E '\^R|\^Y|\^A|\^X' ); do echo $i; mv $i $i.bad; done
bash/posts/bash-tips -- Last updated 2010-07-15 Thursday 15:54:55 Edit
© copyright 2010
Design by: lev