Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» Написание различных скриптов на SHELL, PERL и C/C++

Автор: ga_shut
Дата сообщения: 18.02.2003 14:49
Кому-нибудь требуется помощь по написанию SHELL-скриптов под *nix`ы. Буду приводить примеры(конкретные и свои) с комментариями.
Автор: djelektronik
Дата сообщения: 18.02.2003 15:34
какие ж скрипты то сях то?

приведи пример скрипта который запускает консольное приложение в фоне при старте системы
с каментами есно
и с параметрами стар стоп и рестарт
желательно для бсд если оно чем то от линуха отличаеца
Автор: Zmey
Дата сообщения: 16.09.2003 11:00
Хехе.... интересную я тему нашел

Чет мне в голову не приходит как сделать что бы вот:

Есть два файла один с нужными логинами, второй со всеми логинами и паролями приблизительный формат файлов:
cat /firtsfile
admin
boba
kir
kiruha
administrator

cat /secondfile
kir 43434
boba an3434
kiruha uhu23288
administrator vrewve88
admin kkdwoo99
vova 12312312
kolya 12312dec

Нужно сделать третий файл в котором будут находится логины из первого файла и соответствующие пароли из второго файла. При этом если это логин kir то пароль должен быть именно от него а не от логина kiruha. Естественно файлы очень большие и естественно я их никому не покажу.


Автор: blacklag
Дата сообщения: 17.09.2003 06:45
#!/usr/bin/perl

die ("No create DB") unless
dbmopen(%TEMP_DB,"TempDB",0660);
open (FSecond,"$ARGV[1]");
while (<FSecond>)
{
@Temp = split;
$TEMP_DB{"$Temp[0]"} = $Temp[1];
}
close(FSecond);

open (FSave,">$ARGV[2]");
open (FFirst,"$ARGV[0]");
while (<FFirst>)
{
$_ =~ s/\n//g;
print FSave "$_ $TEMP_DB{$_}\n";
}
close (FFirst);
close (FSave);
dbmclose(%TEMP_DB);
unlink ("TempDB.db");


Может так
Автор: finist
Дата сообщения: 19.09.2003 18:33
Это хорошее предложение, ga_shut! Тогда моя заявка: проверка причин отруба Инета.

1.Имеется три-четыре хоста. Пропинговать их и по результатам выдать ответ типа "Инет обрубили там-то".
2. Если не работает DNS- выдать соответсвующую запись.
3. Если не поднят Инетовский интерфейс (ppp0 там или eth1) - диагностировать
4. Если отсутствует запись в таблице маршрутизации (GW на шлюз)- тоже.

Необходимо два варианта- 1. в виде задания для крона, чтобы можно было исправить то, что в наших силах.
2. Для веб-сервера, чтобы пользователи всегда могли посмотреть, почему "нет интернета".

Желательно ограничиться ping, host, sed.

Автор: DCAdmin
Дата сообщения: 26.09.2003 17:37
Может даст кто команду вывод файла построчно.
То есть в цикле вывело строку-я обработал,пошли дальше.
Автор: lynx
Дата сообщения: 26.09.2003 18:41
DCAdmin


Цитата:
То есть в цикле вывело строку-я обработал,пошли дальше.


На Перле пойдет?


Код:
open(FILE,"/путь/файл"); #Открыли файл, присвоили ему дескриптор
@massiv = <FILE>; #Считали содержимое файла в массив
close(FILE); #Закрыли файл

foreach (@massiv) {
Обрабатываем;
}
Автор: ooptimum
Дата сообщения: 26.09.2003 19:38
lynx
На перле-то пойдет, но а вот если файл размером 150 гигабайт? В массив его весь читать будем или как? ...

DCAdmin
Если у тебя UNIX-like система, то вот тебе скрипт:

Код:
for line in `cat .bash_history`; do echo $line; done
Автор: mymuss
Дата сообщения: 27.09.2003 04:46
ooptimum

Цитата:
На перле-то пойдет, но а вот если файл размером 150 гигабайт? В массив его весь читать будем или как? ...

Зачем массив?
while (<>) { print; }
Те же яйца: вид сбоку.

Но есть НЬЮАНС (С) ВиЧ:

Код:
[andy@gw:~]>time perl -e "while(<>){print;}" < ~/.bash_history
<поскипано>
real 0m0.057s
user 0m0.000s
sys 0m0.030s
Автор: Zmey
Дата сообщения: 27.09.2003 15:50
ooptimum
Премного благодарен. Я действительно удивлен своей ленивостью и простотой решения моей проблемы. Твой в ответ в очередной раз подтверждает выражение "man - RULEZZZ".
А по поводу одной строки так в юнихах много чего в одну строку влазит.
Автор: DCAdmin
Дата сообщения: 28.09.2003 13:21
ooptimum
Присоединяюсь к Zmeyю. Вот за что люблю BSD все сложное решается просто.
Чтобы не причислили к флейму еще вопросик: никак не могу разобратся с регулярными выражениями в grep. То есть я хочу: найди файлы с словом таким и таким но без такого.
Man-ы читал,пока не доганяю. Хочу типа grep (word1 & word2)! word3.
Автор: ooptimum
Дата сообщения: 29.09.2003 06:09
DCAdmin

Цитата:
Хочу типа grep (word1 & word2)! word3

grep -v word3 files... |grep word1|grep word 2

Добавлено
Хм... Хотя я, кажется, тебя не понял. Тебе нужны имена файлов, а не строки с совпадениями, так? Если так, то мой пример выше не подходит. Для получения имен файлов я бы делал наверное так:

Код:
grep -l word1 `grep -Lr word3 *` >temp
grep -l word2 `cat temp`
Автор: DCAdmin
Дата сообщения: 29.09.2003 09:15
ooptimum
Спасибо, я так и реализовал. Просто я думал это можно сделать более...утонченно что ли.
Автор: mymuss
Дата сообщения: 05.10.2003 15:52
Можно как-то на sh сделать такую вещь: скриптом запускается какой-нибудь внешний процесс, как только этот процесс что-то написал в stdout что-то делаем, как только в stderr -- делаем что-то другое.
Автор: arto
Дата сообщения: 05.10.2003 16:25
process > /tmp/f1 2> /tmp/f2 &

while read f1 < /tmp/f1; do process f1; done &
while read f2 < /tmp/f2; do process f2; done &

примерно
Автор: mymuss
Дата сообщения: 05.10.2003 17:49
arto
Спасибо!
Автор: tolyn77
Дата сообщения: 14.02.2013 15:14
здравствуйте

подскажите как можно за-tar-ить каждый каталог в отдельный архив?
заранее благодарен
Автор: arto
Дата сообщения: 14.02.2013 16:12
а дублироваться не будут? tar берет весь каталог рекурсивно.
Автор: Alukardd
Дата сообщения: 14.02.2013 18:16
Товарищи некрофиллы!
Была создана специальная тема для решения вопросов связанных с UNIX shell, встречайте:
UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

Предлагается не ворошить мертвеца, в лице данной темы.
Автор: tolyn77
Дата сообщения: 15.02.2013 06:21
arto
нет дублей точно не будет
у меня есть каталог в котором есть подкаталоги вот их нужно и по-tar-ить
Автор: arto
Дата сообщения: 15.02.2013 07:28
find . -maxdepth 1 -type d -print | while read dir; do tar -cf "$dir".tar "$dir"; done
Автор: tolyn77
Дата сообщения: 18.02.2013 06:41
не работает! выдает сообщение
BusyBox v1.01 (2012.10.20-17:27+0000) multi-call binary

Usage: find [PATH...] [EXPRESSION]

Search for files in a directory hierarchy. The default PATH is
the current directory; default EXPRESSION is '-print'

EXPRESSION may consist of:
-follow Dereference symbolic links.
-name PATTERN File name (leading directories removed) matches PATTERN.
-print Print (default and assumed).

-type X Filetype matches X (where X is one of: f,d,l,b,c,...)
-perm PERMS Permissions match any of (+NNN); all of (-NNN);
or exactly (NNN)
-mtime TIME Modified time is greater than (+N); less than (-N);
or exactly (N) days
Автор: arto
Дата сообщения: 18.02.2013 07:42
какой древний бизибокс.
ls умеет -F?
ls -1F | grep "/\$" | sed -e "s#/\$##" | while read dir; do tar -cf $dir.tar $dir; done
Автор: tolyn77
Дата сообщения: 18.02.2013 08:59
arto
работает, спсб
я извиняюсь а как назначит другую папку для хранения tar-а?
Автор: arto
Дата сообщения: 18.02.2013 09:59
либо через -C, если tar поддерживает, либо прямым указанием в $dir.tar, где его создавать.
Автор: tolyn77
Дата сообщения: 20.02.2013 09:27
а так правильно?
/bin/ls -1F | /bin/grep "/\$" | /bin/sed -e "s#/\$##" | while read dir; do /bin/tar cf - $dir | /bin/gzip > ${dir_backup}/$dir.tar.gz; done

заранее благодарен
Автор: arto
Дата сообщения: 20.02.2013 10:58
можно и так. попробуйте.
Автор: tolyn77
Дата сообщения: 21.02.2013 08:41
а может подскажите, как организовать после успешного архивирования удалять исходник?
заранее благодарен
Автор: arto
Дата сообщения: 21.02.2013 10:10
&& rm -rf $dir
Автор: tolyn77
Дата сообщения: 21.02.2013 10:29
так правильно?
/bin/ls -1F | /bin/grep "/\$" | /bin/sed -e "s#/\$##" | while read dir; do /bin/tar cf - $dir | /bin/gzip > ${dir_backup}/$dir.tar.gz && rm -rf $dir; done

Страницы: 12

Предыдущая тема: Проблемы с печатью из Terminal Server


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.