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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

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

digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи вопрошающие! Если ваша система отлична от ГНУ, и в то же время вы желаете обойтись только дефолтными средствами, указывайте и то и другое сразу, пожалуйста.


UNIX Shell

 
   Это глобальная тема по юниксовой командной оболочке, как по интерактивной работе в командной строке, так и по шелл-скриптам. Ключевые слова: sh, bash, zsh, tcsh, busybox, readline, coreutils, cp, mv, ln, rm, ls, readlink, mkdir, touch, stat, date, test, sleep, chown, chmod, chattr, dd, df, du, env, echo, cat, less, man, grep, sort, findutils, find, locate, xargs, md5sum, cmp, diff, patch, ps, kill, killall, tar, gzip, bzip2, xz, mount, fdisk, parted, mkfs, fsck, e2fsprogs, mtools, ss, netcat, netstat, rsync, ssh, scp, sftp, lftp, ncftp, time, strace.
   Неинтерактивная обработка текста (sed, awk, perl) пока тоже здесь.
   Смотри в других ветках: wget, convert, montage, mogrify и др., gs, git, 7z, p7zip, soffice, mplayer, mencoder, vlc, vim, mc, mcedit, kioclient.
 
 

Hint! Русские маны (подустаревшие, не всегда полные и не всегда для вашей системы) можно попытаться найти на Опеннете, к примеру: bash, tar, grep.

 
Готовые решения:
  • commandlinefu.com
    Крупнейшая база полезных однострочников на командной оболочке с ранжированием на основе пользовательского голосования.
     
  • shell-fu.org
    Аналогично, но поменьше и формат записей более свободный, поэтому встречаются и однострочники, и развернутые скрипты, и просто советы.
     
  • Useful one-line scripts for sed
    Почти исчерпывающий список решений для тех случаев, когда sed незаменим. Более сложные скрипты с sed.sf.net — только для тех, кто знает толк... :)

 
Учебная литература:
  • Greg’s Wiki (http://mywiki.wooledge.org)
    Наиболее обширный авторский сборник постоянно обновляющихся материалов по Башу.

    1. Bash Pitfalls
      (Частые ошибки программирования на Баше: [1], [2], [3], [4], [5] — пер. на русский по сост. на дек. 2008 г.).
      Рассмотрены преимущественно ошибки, возникающие из-за непонимания отличия шелла от «нормальных» скриптовых языков. Если вы уже владеете, например, Перлом, то это вполне может быть ваше первое руководство для ознакомления с Башем.
    2. Bash FAQ
    3. Bash Guide
    4. Bash Reference Sheet
      Шпаргалка по частым синтаксическим оборотам.

 
Классическая учебная литература:
С одной стороны не упомянуть эти издания нельзя, с другой — они настолько устарели, что едва ли их можно рекомендовать в роли учебника.

 

Смело правьте и дополняйте шапку, однако не забывайте отписываться об исправлениях и сохранять исходный вариант под #.
Первый пост темы имел вид...

Всего записей: 354 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: qw12, 09:42 24-03-2020
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
askad
Ну, для ответа на ваш вопрос надо определиться с тем, что вы держите за else. Если любую строку (т. е. последовательность символов, заканчивающихся переводом строки), то красный участок вашего примера, очевидно, может выглядеть так:
 
expect {
    "*icmperr*"    {send "clear ip nat tran *"}
    "\n"           {send "exit\r"}
}

 
Почему у вас, кстати, команда exit заканчивается возвратом каретки, а clear — нет?

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:20 08-02-2013 | Исправлено: ASE_DAG, 20:22 08-02-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
askad
Да вроде гуглится этот вопрос без труда, собственно частый вопрос весьма.
Код:
expect {
    "*icmerr*" {
       send "clear ip nat tran *"
       expect eof
       return 0
    }
    send "exit\r"
    expect eof
    return 0
}
# timed out
return 1
не проверял, но вроде всё так...
 
Добавлено:
ASE_DAG
Я так понял, что при открытии expect {} в нём и надо оставаться, т.е. за его пределами программа не совсем продолжит выполнение, я не прав? Я с expect очень мало работал.

----------
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:25 08-02-2013 | Исправлено: Alukardd, 20:26 08-02-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> не проверял
Напрасно. Я вот сейчас попробовал проверить и не обнаружил обстоятельств, при коих send "exit\r" выполнится. Что мне кажется логичным. Где вы прочли, что можно опускать паттерн? Я вижу, что тело — можно, а паттерн — нет:

Цитата:
      expect [[-opts] pat1 body1] ... [-opts] patn [bodyn]
expect(1)

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:39 08-02-2013 | Исправлено: ASE_DAG, 22:40 08-02-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
askad
Так каковы ваши успехи?

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 10:17 10-02-2013 | Исправлено: ASE_DAG, 10:18 10-02-2013
askad

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

Цитата:
команда exit заканчивается возвратом каретки, а clear — нет?

Да, Вы правы, забыл возврат каретки добавить.
 
 
В данный момент тестится вариант ASE_DAG. Правда ошибка еще не появлялась и сказать о каком-либо результате не могу.
Камрады, буду держать в курсе.

Всего записей: 50 | Зарегистр. 11-04-2003 | Отправлено: 09:26 11-02-2013 | Исправлено: askad, 09:48 11-02-2013
wcas

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
 
Нужна помощь.  
 
Есть каталог YYY. И есть структура на сайте:
 
site1.ru/wp-content/plugins/
site2.ru/wp-content/plugins/
...
site10.ru/wp-content/plugins/
 
Нужно скопировать каталог YYY во все каталоги "plugins", которые имеются на сервере. Подскажите, как реализовать.
 
Заранее благодарю!

Всего записей: 1 | Зарегистр. 13-02-2013 | Отправлено: 13:32 13-02-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
wcas
Я всё проводил в  каталоге /tmp, так что поправьте пути на те, чт оу Вас в системе.
find /tmp -type d -path '*site[0-9]*.ru/wp-content/plugins' -exec cp -r /tmp/YYY {} \;
 
маску посика я так же подстроил ровно под то, что вы написали, т.е. site[0-9]*

----------
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 | Отправлено: 15:40 13-02-2013
tolyn77



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

Всего записей: 1498 | Зарегистр. 07-09-2004 | Отправлено: 08:25 15-02-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tolyn77
На данный вопрос Вам хоть и ответили в теме, которую я вообще удивлён что нашли, но зачем использовать pipeline?... Корректнее будет так:
find /etc -mindepth 1 -maxdepth 1 -type d -exec sh -c 'tar -cf "/tmp/test/$(basename "{}.tar")" "{}"' \;
Архивируем каталоги внутри /etc/, архивы лягут в папку /tmp/test.
p.s. Так в архиве будут находится каталоги с полным путём до них, если это Вам мешает, можно немного подправить команду:
find /etc -mindepth 1 -maxdepth 1 -type d -exec sh -c 'tar -C "$(dirname "{}")" -cf "/tmp/test/$(basename "{}.tar")" "$(basename "{}")"' \;

----------
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 | Отправлено: 11:46 15-02-2013 | Исправлено: Alukardd, 12:10 15-02-2013
askad

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

Цитата:
ASE_DAG  
Alukardd  
 
В данный момент тестится вариант ASE_DAG. Правда ошибка еще не появлялась и сказать о каком-либо результате не могу.  
Камрады, буду держать в курсе.

 
Ошибка появилась, скрипт сработал на отлично. Доволен як слон.
Повесил мониторить по кронтабу.

Код:
#!/usr/bin/expect
 
log_user 0
set timeout 100
spawn telnet 192.168.2.1
expect "Username: "
send "aleks\r"
expect "Password: "
send "qwerty1234\r"
 
expect "*#"
send "sh ip nat tran | i err\r"
 
expect {
    "icmperr*"  {send "clear ip nat tran *\r"}
    "*#" {send "exit\r"}
}
send "exit\r"
expect eof

Всего записей: 50 | Зарегистр. 11-04-2003 | Отправлено: 13:28 15-02-2013
tolyn77



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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
askad
> скрипт сработал на отлично
Славненько. Обращайтесь, если что. :-)
 
Alukardd
> $ find /etc -mindepth 1 -maxdepth 1 -type d -exec sh -c 'tar -C "$(dirname "{}")" -cf "/tmp/test/$(basename "{}.tar")" "$(basename "{}")"' \;
ОМГ.
 
/etc$ for d in */; do tar -cf "${d%/}.tar" "$d"; done

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:02 15-02-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Оч, хотелось find использовать

----------
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:10 15-02-2013
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто знает быстрый шелл-скрипт на проверку соответствия IP-адреса определенной подсети ?

Всего записей: 4946 | Зарегистр. 05-01-2006 | Отправлено: 20:43 15-02-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
Полагаю, что это слишком тривиальная вещь, чтоб знать под нее готовое решение.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:58 15-02-2013 | Исправлено: ASE_DAG, 21:01 15-02-2013
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Я не знаю быстрых проверок,поэтому и спрашиваю.Если нужно обработать несколько тысяч адресов на принадлежность нескольким сотням подсетей скорость проверки становится самым важным фактором.

Всего записей: 4946 | Зарегистр. 05-01-2006 | Отправлено: 21:18 15-02-2013
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
> Я не знаю быстрых проверок
А их много разных что-ли? Если N и M — адрес и маска сети, а A — адрес хоста, то проверка последнего на принадлежность к первой выполняется, очевидно, как:
A & M == N
 
Для преобразования адресов и маски из любого из двух читаемых форматов в двоичный нескольких способов тоже, вроде бы, не придумать.
 
Однако если вы так заморочены на скорости, то имейте в виду, что тогда Баш вовсе не лучший выбор.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 22:03 15-02-2013 | Исправлено: ASE_DAG, 22:05 15-02-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
Последний раз я это делал в дипломе на C++ с использованием Qt
Shell будет медленно оперировать октетами каждым в отдельности так что это плохой вариант.
IMHO, тут лучше использовать что-то больше похожее на ЯП, хотя бы Python, а можно и C++.
 
Пример на Perl:
Код:
#!/usr/bin/perl
use NetAddr::IP;
 
$ip = NetAddr::IP->new($ARGV[0]);
$subnet = NetAddr::IP->new($ARGV[1]);
 
if ($ip->within($subnet)) {
        exit 0;
} else {
        exit 1;
}
Пример использования: check.pl 192.168.2.4 192.168.0.0/24
Смотреть код возврата. Если проверять по списку, то что бы не было накладных расходов на переключение, надо читать его сразу перлом.

----------
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 | Отправлено: 22:04 15-02-2013 | Исправлено: Alukardd, 22:19 15-02-2013
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Я в курсе,что баш не лучший по скорости вариант,но предположил что возможно есть вспомогательные утилиты,специально заточенные для этого.
 
Alukardd
Я использую такой скрипт

Цитата:
#!/usr/bin/perl -w
use Net::Patricia;
# IP tools
my $pt = new Net::Patricia;
$pt->add_string("$ARGV[0]");
if(defined($pt->match_string("$ARGV[1]"))){
print "IN\n";
}else{
print "OUT\n";
}

Якобы,Net::Patricia самый быстрый модуль для такой проверки.Но работает все равно не так быстро как хотелось бы.

Всего записей: 4946 | Зарегистр. 05-01-2006 | Отправлено: 22:32 15-02-2013
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
Вызывать надо не для каждой пары, как я уже сказал раньше, а работать целиком в рамках одного скрипта, на одном языке, что бы не было переключений.

----------
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 | Отправлено: 22:55 15-02-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru