Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Написание различных скриптов на SHELL, PERL и C/C++

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

Открыть новую тему     Написать ответ в эту тему

ga_shut

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кому-нибудь требуется помощь по написанию SHELL-скриптов под *nix`ы. Буду приводить примеры(конкретные и свои) с комментариями.

Всего записей: 1 | Зарегистр. 18-02-2003 | Отправлено: 15:49 18-02-2003
djelektronik

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
какие ж скрипты то сях то?
 
приведи пример скрипта который запускает консольное приложение в фоне при старте системы
с каментами есно
и с параметрами стар стоп и рестарт
желательно для бсд если оно чем то от линуха отличаеца

Всего записей: 2530 | Зарегистр. 28-06-2001 | Отправлено: 16:34 18-02-2003
Zmey



Strangled by Lynx
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Хехе.... интересную я тему нашел
 
    Чет мне в голову не приходит как сделать что бы вот:
 
   Есть два файла один с нужными логинами, второй со всеми логинами и паролями приблизительный формат файлов:
   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. Естественно файлы очень большие и естественно я их никому не покажу.
 
 

Всего записей: 303 | Зарегистр. 07-12-2001 | Отправлено: 12:00 16-09-2003
blacklag

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
#!/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");
 
 
Может так

Всего записей: 1 | Зарегистр. 16-09-2003 | Отправлено: 07:45 17-09-2003
finist



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это хорошее предложение, ga_shut! Тогда моя заявка: проверка причин отруба Инета.
 
1.Имеется три-четыре хоста. Пропинговать их и по результатам выдать ответ типа "Инет обрубили там-то".
2. Если не работает DNS- выдать соответсвующую запись.
3. Если не поднят Инетовский интерфейс (ppp0 там или eth1) - диагностировать
4. Если отсутствует запись в таблице маршрутизации (GW на шлюз)- тоже.
 
Необходимо два варианта- 1. в виде задания для крона, чтобы можно было исправить то, что в наших силах.
2. Для веб-сервера, чтобы пользователи всегда могли посмотреть, почему "нет интернета".
 
Желательно ограничиться ping, host, sed.
 

Всего записей: 161 | Зарегистр. 15-10-2002 | Отправлено: 19:33 19-09-2003
DCAdmin



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может даст кто команду вывод файла построчно.
То есть в цикле вывело строку-я обработал,пошли дальше.

Всего записей: 38 | Зарегистр. 30-12-2002 | Отправлено: 18:37 26-09-2003
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DCAdmin
 

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

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

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

 
Плиз, такие вопросы в веб-програмимнге

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 19:41 26-09-2003
ooptimum



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
lynx
На перле-то пойдет, но а вот если файл размером 150 гигабайт? В массив его весь читать будем или как? ...
 
DCAdmin
Если у тебя UNIX-like система, то вот тебе скрипт:

Код:
 
for line in `cat .bash_history`; do echo $line; done
 

само-собой, что вместо ".bash_history" надо подставлять свой файл, а вместо команды "echo" то, что тебе надо.
 
 
Добавлено
Мда, что-то perl стал настолько популярен, что народ плюнул на изучение традиционных команд.
 
Zmey
Ты наверное удивишься, но "скрипт", который никак не придет тебе в голову, умещается всего-навсего в команду:

Код:
 
grep -f firstfile secondfile >thirdfile
 

ВСЕ!
 
Народ, изучайте традиционные средства, не пытайтесь изобрести велосипед. Используйте перл только тогда, когда это действительно необходимо.
 
Как все запущено...

Всего записей: 2898 | Зарегистр. 30-05-2002 | Отправлено: 20:38 26-09-2003
mymuss



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ooptimum

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

Зачем массив?
while (<>) { print; }
Те же яйца: вид сбоку.
 
Но есть НЬЮАНС (С) ВиЧ:

Код:
 
[andy@gw:~]>time perl -e "while(<>){print;}" < ~/.bash_history
<поскипано>
real    0m0.057s
user    0m0.000s
sys     0m0.030s
 


Код:
 
[andy@gw:~]>time sh "for line in `cat .bash_history`; do echo $line; done"
<поскипано>
real    0m0.107s
user    0m0.006s
sys     0m0.015s
 

 
И еще один ньюанс: на Перле можно seek(), tell() делать... Можно ли на sh -- не знаю.
 
Добавлено
А если, например, тебе надо остановиться (скажем, когда ты нашел нужную строку) на 150Гб результаты вообще ошеломляющие будут, т.к. cat он пока весь файл не выведет -- не остановится, а на перле ты можешь цикл прервать в любой момент и остаток файла читаться не будет.

----------
(a + b^n) / n = x, donc Dieu existe; répondez !
Euler

Всего записей: 709 | Зарегистр. 13-04-2003 | Отправлено: 05:46 27-09-2003
Zmey



Strangled by Lynx
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ooptimum
    Премного благодарен. Я действительно удивлен своей ленивостью и простотой решения моей проблемы. Твой в ответ в очередной раз подтверждает выражение "man - RULEZZZ".
    А по поводу одной строки так в юнихах много чего в одну строку влазит.

Всего записей: 303 | Зарегистр. 07-12-2001 | Отправлено: 16:50 27-09-2003
DCAdmin



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ooptimum
Присоединяюсь к Zmeyю. Вот за что люблю BSD все сложное решается просто.
Чтобы не причислили к флейму еще вопросик: никак не могу разобратся с регулярными выражениями в grep. То есть я хочу: найди файлы с словом таким и таким но без такого.
Man-ы читал,пока не доганяю. Хочу типа grep (word1 & word2)! word3.

Всего записей: 38 | Зарегистр. 30-12-2002 | Отправлено: 14:21 28-09-2003
ooptimum



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
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`
 

 


----------
Голосуем за наших людей.
Номер раз.
Номер два.

Всего записей: 2898 | Зарегистр. 30-05-2002 | Отправлено: 07:09 29-09-2003
DCAdmin



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ooptimum
Спасибо, я так и реализовал. Просто я думал это можно сделать более...утонченно что ли.

Всего записей: 38 | Зарегистр. 30-12-2002 | Отправлено: 10:15 29-09-2003
mymuss



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Можно как-то на sh сделать такую вещь: скриптом запускается какой-нибудь внешний процесс, как только этот процесс что-то написал в stdout что-то делаем, как только в stderr -- делаем что-то другое.

----------
(a + b^n) / n = x, donc Dieu existe; répondez !
Euler

Всего записей: 709 | Зарегистр. 13-04-2003 | Отправлено: 16:52 05-10-2003 | Исправлено: mymuss, 16:58 05-10-2003
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
process > /tmp/f1 2> /tmp/f2 &
 
while read f1 < /tmp/f1; do process f1; done &
while read f2 < /tmp/f2; do process f2; done &
 
примерно

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 17:25 05-10-2003
mymuss



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
arto
Спасибо!

----------
(a + b^n) / n = x, donc Dieu existe; répondez !
Euler

Всего записей: 709 | Зарегистр. 13-04-2003 | Отправлено: 18:49 05-10-2003
tolyn77



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
здравствуйте
 
подскажите как можно за-tar-ить каждый каталог в отдельный архив?
заранее благодарен

Всего записей: 1498 | Зарегистр. 07-09-2004 | Отправлено: 17:14 14-02-2013
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а дублироваться не будут? tar берет весь каталог рекурсивно.

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 18:12 14-02-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи некрофиллы!
Была создана специальная тема для решения вопросов связанных с UNIX shell, встречайте:
UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;
 
Предлагается не ворошить мертвеца, в лице данной темы.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 20:16 14-02-2013
tolyn77



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
arto
нет дублей точно не будет
у меня есть каталог в котором есть подкаталоги вот их нужно и по-tar-ить

Всего записей: 1498 | Зарегистр. 07-09-2004 | Отправлено: 08:21 15-02-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Написание различных скриптов на SHELL, PERL и C/C++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru