Кому-нибудь требуется помощь по написанию SHELL-скриптов под *nix`ы. Буду приводить примеры(конкретные и свои) с комментариями.
» Написание различных скриптов на SHELL, PERL и C/C++
какие ж скрипты то сях то?
приведи пример скрипта который запускает консольное приложение в фоне при старте системы
с каментами есно
и с параметрами стар стоп и рестарт
желательно для бсд если оно чем то от линуха отличаеца
приведи пример скрипта который запускает консольное приложение в фоне при старте системы
с каментами есно
и с параметрами стар стоп и рестарт
желательно для бсд если оно чем то от линуха отличаеца
Хехе.... интересную я тему нашел
Чет мне в голову не приходит как сделать что бы вот:
Есть два файла один с нужными логинами, второй со всеми логинами и паролями приблизительный формат файлов:
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. Естественно файлы очень большие и естественно я их никому не покажу.
Чет мне в голову не приходит как сделать что бы вот:
Есть два файла один с нужными логинами, второй со всеми логинами и паролями приблизительный формат файлов:
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. Естественно файлы очень большие и естественно я их никому не покажу.
#!/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");
Может так
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");
Может так
Это хорошее предложение, ga_shut! Тогда моя заявка: проверка причин отруба Инета.
1.Имеется три-четыре хоста. Пропинговать их и по результатам выдать ответ типа "Инет обрубили там-то".
2. Если не работает DNS- выдать соответсвующую запись.
3. Если не поднят Инетовский интерфейс (ppp0 там или eth1) - диагностировать
4. Если отсутствует запись в таблице маршрутизации (GW на шлюз)- тоже.
Необходимо два варианта- 1. в виде задания для крона, чтобы можно было исправить то, что в наших силах.
2. Для веб-сервера, чтобы пользователи всегда могли посмотреть, почему "нет интернета".
Желательно ограничиться ping, host, sed.
1.Имеется три-четыре хоста. Пропинговать их и по результатам выдать ответ типа "Инет обрубили там-то".
2. Если не работает DNS- выдать соответсвующую запись.
3. Если не поднят Инетовский интерфейс (ppp0 там или eth1) - диагностировать
4. Если отсутствует запись в таблице маршрутизации (GW на шлюз)- тоже.
Необходимо два варианта- 1. в виде задания для крона, чтобы можно было исправить то, что в наших силах.
2. Для веб-сервера, чтобы пользователи всегда могли посмотреть, почему "нет интернета".
Желательно ограничиться ping, host, sed.
Может даст кто команду вывод файла построчно.
То есть в цикле вывело строку-я обработал,пошли дальше.
То есть в цикле вывело строку-я обработал,пошли дальше.
DCAdmin
Цитата:
На Перле пойдет?
Код:
open(FILE,"/путь/файл"); #Открыли файл, присвоили ему дескриптор
@massiv = <FILE>; #Считали содержимое файла в массив
close(FILE); #Закрыли файл
foreach (@massiv) {
Обрабатываем;
}
Цитата:
То есть в цикле вывело строку-я обработал,пошли дальше.
На Перле пойдет?
Код:
open(FILE,"/путь/файл"); #Открыли файл, присвоили ему дескриптор
@massiv = <FILE>; #Считали содержимое файла в массив
close(FILE); #Закрыли файл
foreach (@massiv) {
Обрабатываем;
}
lynx
На перле-то пойдет, но а вот если файл размером 150 гигабайт? В массив его весь читать будем или как? ...
DCAdmin
Если у тебя UNIX-like система, то вот тебе скрипт:
Код:
for line in `cat .bash_history`; do echo $line; done
На перле-то пойдет, но а вот если файл размером 150 гигабайт? В массив его весь читать будем или как? ...
DCAdmin
Если у тебя UNIX-like система, то вот тебе скрипт:
Код:
for line in `cat .bash_history`; do echo $line; done
ooptimum
Цитата:
Зачем массив?
while (<>) { print; }
Те же яйца: вид сбоку.
Но есть НЬЮАНС (С) ВиЧ:
Код:
[andy@gw:~]>time perl -e "while(<>){print;}" < ~/.bash_history
<поскипано>
real 0m0.057s
user 0m0.000s
sys 0m0.030s
Цитата:
На перле-то пойдет, но а вот если файл размером 150 гигабайт? В массив его весь читать будем или как? ...
Зачем массив?
while (<>) { print; }
Те же яйца: вид сбоку.
Но есть НЬЮАНС (С) ВиЧ:
Код:
[andy@gw:~]>time perl -e "while(<>){print;}" < ~/.bash_history
<поскипано>
real 0m0.057s
user 0m0.000s
sys 0m0.030s
ooptimum
Премного благодарен. Я действительно удивлен своей ленивостью и простотой решения моей проблемы. Твой в ответ в очередной раз подтверждает выражение "man - RULEZZZ".
А по поводу одной строки так в юнихах много чего в одну строку влазит.
Премного благодарен. Я действительно удивлен своей ленивостью и простотой решения моей проблемы. Твой в ответ в очередной раз подтверждает выражение "man - RULEZZZ".
А по поводу одной строки так в юнихах много чего в одну строку влазит.
ooptimum
Присоединяюсь к Zmeyю. Вот за что люблю BSD все сложное решается просто.
Чтобы не причислили к флейму еще вопросик: никак не могу разобратся с регулярными выражениями в grep. То есть я хочу: найди файлы с словом таким и таким но без такого.
Man-ы читал,пока не доганяю. Хочу типа grep (word1 & word2)! word3.
Присоединяюсь к Zmeyю. Вот за что люблю BSD все сложное решается просто.
Чтобы не причислили к флейму еще вопросик: никак не могу разобратся с регулярными выражениями в grep. То есть я хочу: найди файлы с словом таким и таким но без такого.
Man-ы читал,пока не доганяю. Хочу типа grep (word1 & word2)! word3.
DCAdmin
Цитата:
grep -v word3 files... |grep word1|grep word 2
Добавлено
Хм... Хотя я, кажется, тебя не понял. Тебе нужны имена файлов, а не строки с совпадениями, так? Если так, то мой пример выше не подходит. Для получения имен файлов я бы делал наверное так:
Код:
grep -l word1 `grep -Lr word3 *` >temp
grep -l word2 `cat temp`
Цитата:
Хочу типа 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`
ooptimum
Спасибо, я так и реализовал. Просто я думал это можно сделать более...утонченно что ли.
Спасибо, я так и реализовал. Просто я думал это можно сделать более...утонченно что ли.
Можно как-то на sh сделать такую вещь: скриптом запускается какой-нибудь внешний процесс, как только этот процесс что-то написал в stdout что-то делаем, как только в stderr -- делаем что-то другое.
process > /tmp/f1 2> /tmp/f2 &
while read f1 < /tmp/f1; do process f1; done &
while read f2 < /tmp/f2; do process f2; done &
примерно
while read f1 < /tmp/f1; do process f1; done &
while read f2 < /tmp/f2; do process f2; done &
примерно
arto
Спасибо!
Спасибо!
здравствуйте
подскажите как можно за-tar-ить каждый каталог в отдельный архив?
заранее благодарен
подскажите как можно за-tar-ить каждый каталог в отдельный архив?
заранее благодарен
а дублироваться не будут? tar берет весь каталог рекурсивно.
Товарищи некрофиллы!
Была создана специальная тема для решения вопросов связанных с UNIX shell, встречайте:
UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;
Предлагается не ворошить мертвеца, в лице данной темы.
Была создана специальная тема для решения вопросов связанных с UNIX shell, встречайте:
UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;
Предлагается не ворошить мертвеца, в лице данной темы.
arto
нет дублей точно не будет
у меня есть каталог в котором есть подкаталоги вот их нужно и по-tar-ить
нет дублей точно не будет
у меня есть каталог в котором есть подкаталоги вот их нужно и по-tar-ить
find . -maxdepth 1 -type d -print | while read dir; do tar -cf "$dir".tar "$dir"; done
не работает! выдает сообщение
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
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
какой древний бизибокс.
ls умеет -F?
ls -1F | grep "/\$" | sed -e "s#/\$##" | while read dir; do tar -cf $dir.tar $dir; done
ls умеет -F?
ls -1F | grep "/\$" | sed -e "s#/\$##" | while read dir; do tar -cf $dir.tar $dir; done
arto
работает, спсб
я извиняюсь а как назначит другую папку для хранения tar-а?
работает, спсб
я извиняюсь а как назначит другую папку для хранения tar-а?
либо через -C, если tar поддерживает, либо прямым указанием в $dir.tar, где его создавать.
а так правильно?
/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
заранее благодарен
/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
заранее благодарен
можно и так. попробуйте.
а может подскажите, как организовать после успешного архивирования удалять исходник?
заранее благодарен
заранее благодарен
&& rm -rf $dir
так правильно?
/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
/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
Предыдущая тема: Проблемы с печатью из Terminal Server
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.