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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 154

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

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
      Шпаргалка по частым синтаксическим оборотам.

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

 

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

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



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
<a href="http://ru.wikipedia.org/wiki/%D0%A0%D0%BE%D0%BC%D0%B1">Смотри здесь</a>

Всего записей: 3 | Зарегистр. 14-04-2011 | Отправлено: 02:05 18-04-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
030918
Ru.Board » Специальные » Тестирование » тест!

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 02:08 18-04-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dtXth (17:13 25-04-2011)
Цитата:
Учусь писать скрипты. возник вопрос как можно сделать такую штуку:  
1. Выводим процессы предположим питона ps -a | grep python  
2. у нас появляется список процессов.    
Мне хочется убить все процесы, чей PID больше 1335.  
Как это можно сделать??

 
Например так (это для ГНУ, если ось другая, указывайте это сразу):
 
$ kill -9 $(pgrep python | awk -v ORS=' ' '$0 > 1335')
 
P.S. А зачем, если не секрет, такая постановка задачи: «убить все процесы, чей PID больше 1335»?

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:23 25-04-2011 | Исправлено: ASE_DAG, 18:40 25-04-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ВНИМАНИЕ! Не стоит выполнять эту команду неосведомленным людям...
 
Интересная строчка...
: () { :|:& };:
Не все операторы по итогу понятны...
получается что, то типа такого
x=true;
$x () { $x or $x & }; $x
и того в результате как я понимаю должны бесконечно плодиться подпроцессы от процесса, что был порождён вызовом самой команды...
 
Что конкретно даёт заключение в начальное и конечно двоеточие? Как правильно разобрать данное выражение...
Ну амперсанд вроде каждый процесс должен должен в фон уводить (в этом-то и соль порождения)...

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 23:41 26-04-2011 | Исправлено: Alukardd, 23:43 26-04-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
«:» — это имя функции, в нее нельзя «заключить». ;)
 
См. http://en.wikipedia.org/wiki/Fork_bomb#Examples
 
Добавлено:
Как вы уже поняли, самая мякотка такого представления форк-бомбы именно в том, что в таком виде она абсолютно не гуглится.

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:58 26-04-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
омг... была мысль что это имя функции, но что все остальные двоеточия это её вызов... ЖЕСТЬ!
спс за ссыль)
 
p.s. да с гугленьем такого проблем много... Да и по отдельности оператор pipeline гуглить очень не удобно...

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 01:04 27-04-2011
slech



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
перебрался из темки со своим вопосом:
 
есть скрипт в Windows:

Цитата:
set file=%DB11name%_backup_%Today%*.%dbprefix%.bak
%robocopydir%\robocopy.exe %source% %destination% %file% %parameters%
if not errorlevel 1 call :rbcopyerror
::
set file=%DB1name%_backup_%Today%*.trn
%robocopydir%\robocopy.exe %source% %destination% %file% %parameters%
if not errorlevel 1 call :rbcopyerror
 
goto :next
::
::
:rbcopyerror
%maildir%\blat.exe -server %mailserver% -f %mailfrom% -tf %mailto% -subject %mailsubject% -body %mailbody%
exit /B
::
:next
 

который выполняет копирование и следит за кодом выхода приложения.
если он не равен 1 то мы напрявляемся к репортированию ошибки почтой и возвращаемся далее по скрипту отрабатывать.
 
кто подскажет как такое реализовать в bash ?
1. выполняем команду
2. смотрим код выхода
3. в зависимости от кода выхода можем пойти далее по скрипту или репортировать об ошибке и пойти далее по скрипту
 
1. cp /home/user1/arc.zip /backup
2. if [ "$?" -ne "0" ]; then
  mail to admin# goto :mail)
  exit 1
fi
3. cp /home/user1/arc.zip /backup1
 if [ "$?" -ne "0" ]; then
  mail to admin# goto :mail)
  exit 1
не хочется в теле выполнения операции всегда вставлять отправку почты потому как это достаточно громоздкий код со своими переменными(например какая операция сорвалась)
в Windows это всё решалось метками.
 
Спасибо.
 
 
Alukardd подсказал:

Цитата:
А ответ прост -  функции.
Код:
mailto () {
...
}
 
...
mailto  

 
как это будет работать в моём случае ?
1. выполняем команду
2. смотрим код выхода
3. в зависимости от кода выхода выполняем функцию mailto () {
...
}
 и продолжаем выполение команд далее ?

Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 16:14 30-04-2011 | Исправлено: slech, 16:14 30-04-2011
Alukardd



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

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 17:44 30-04-2011
ASE_DAG



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

Цитата:
cp /home/user1/arc.zip /backup1  
 if [ "$?" -ne "0" ]; then
  mailto(admin)
  exit 1
 fi

 
Вообще какой-то странный подход. Не надо смешивать собственно выполнение операций и постобработку ошибок.
 
#!/bin/sh
cp /home/user1/arc.zip /backup1 || echo 'Сообщение об ошибке' >&2; exit 1

 
А уже сам вышеприведенный сценарий запускаете следующим образом:
$ backup.sh |& mailme.sh
, где mailme.sh — сценарий для обработки вывода отладки.
 
 
Добавлено:
P.S. Это в том случае, если backup.sh не выдает ничего нужного на STDOUT.
Если выдает, да и вообще, может более удобным оказаться использование временного файла:
 
$ backup.sh 2> /tmp/backup.err || mailme.sh < /tmp/backup.err
 
; а если файл создавать нежелательно, то fifo.
 
Обратите внимание на еще одно отличие — здесь мы делаем проверку кода возврата до запуска mailme.sh и не запускаем его, если возвращен 0.

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:54 30-04-2011 | Исправлено: ASE_DAG, 18:33 30-04-2011
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
awk '/target/{delete s; p=1} p==1{s[FNR]=$0} p==1&&/AdRiver/{exit 0} END{for (i in s) print s[i]}' king_stiven.txt  
 
Как вывести всё в одну строку?

Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 22:13 06-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
king_stiven
Задать переменную ORS равной пробелу или табуляции (или что вы там хотите вместо перевода строки):
$ awk -v ORS=' ' '/target/{delete s; p=1} p==1{s[FNR]=$0} p==1&&/AdRiver/{exit 0} END{for (i in s) print s[i]}' king_stiven.txt
 
Добавлено:
И не дублируйте посты! Если поняли, что задали вопрос не в ту тему, то запостив в другой, в первой-то удалите («del»).
Ну вы ж не первый год на форуме, ну ей-богу. ;)

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Жесть, ни когда не видел хотя бы такой длинны awk выражений... Я не говорю уже о многострочных скриптах.
Просто интересно я правильно его прочитал или нет?
"ищем строки со словом 'target' -> удаляем эту строку, присваиваем p=1 -> проверяем, если в строке нашлось слово и p стало 1, то в массив s в позицию равную позиции слова в файле (полагаю, что это будет номер найденного 'target' по счёту) заносим первое слово. Дальше проверяем не является ли это слово 'AdRiver' и если да, то завершаем поиск и переходим к расчепятке..."
ТАК?
 
p.s. да в bat файлы это круто было занести... интересно там кто-то пользуется (знает) об awk?!

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 01:09 07-05-2011 | Исправлено: Alukardd, 01:11 07-05-2011
king_stiven

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

Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 13:48 07-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> никогда не видел хотя бы такой длинны awk выражений
А это я завел себе правило писать на форумах все так, как будто оно предназначено для исполнения в интерактивном шелле, а это соответственно — в одну строку.
Это располагает к тому, чтобы в интерактивном шелле работоспособность кода и проверить, а не бездумно сувать его сразу же в свой скрипт, где может быть куча ошибок и несоответствий заданию. Хотя не всегда помогает.
 
> я правильно его прочитал
Не совсем. См. Задачи на bat-файлах 10:1220#3.
 
king_stiven
> язык понятней, типа пишешь программу
Да, Си-подобный.
 
> Начал читать доки по авку
А если не секрет, какие доки?  
Вы тут меня где-то спрашивали мануал обязательно русскоязычный (так, что я понял, что с языком у вас плохо), но вот хороших русскоязычных-то я по нему как раз и не встречал.

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 15:24 07-05-2011 | Исправлено: ASE_DAG, 15:42 07-05-2011
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Условие поменялось,  
находим первый target и начинаем записывать строки в массив; если находим еще один target, сбрасываем записанное только в том случае, если справа от первого target нет букв
Код:
авс

targetавс
если же справа от первого target есть буквы
Код:
авс
, то массив не сбрасываем и не следим за другими target до вхождения в AdRiver, после чего выводим. Если свой пример ещё и поясните, буду обязан.
 
Добавлено:
доки из шапки

Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 19:10 07-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
king_stiven
> если справа от первого target нет букв авс
Каких еще букв? Вы о буквах ничего не говорили, поэтому проверяется любое вхождение последовательности символов target в строку, в т.ч. напр. geotargeting.
Если надо задать строго слово target, то регэксп будет иметь вид [^[:alpha:]]target[^[:alpha:]], где [^[:alpha:]] — не буква (но, напр., пробел, новая строка, знак препинания, цифра).
 
> Если свой пример ещё и поясните, буду обязан.  
Пожалуйста. А что было неясно в прошлом комментарии:

Цитата:
находим первый target и начинаем записывать строки в массив; если находим еще один target, сбрасываем записанное и начинаем массив строк заново; по обнаружении AdRiver после target'а (это отличие от прошлой версии) или по концу потока (а вот этого, кстати, вы, возможно, и не желаете, уточните) выводим массив строк
?
 
P.S. Кстати, обращаю ваше внимание, что для шаблона [[:alpha:]] важно совпадение локали и кодировки потока (что на Винде может быть далеко не самоочевидной вещью).

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:38 07-05-2011
king_stiven

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

Цитата:
Каких еще букв? Вы о буквах ничего не говорили,


Цитата:
Условие поменялось

Если трудно не надо.

Цитата:
Если свой пример ещё и поясните, буду обязан.  

Имеется в виду новый пример, если он будет написан. Старый пример работает на ура и описан чётко.

Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 22:15 07-05-2011 | Исправлено: king_stiven, 22:15 07-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
king_stiven
> Условие поменялось
Ну да, я как всегда читаю по диагонали.
 
> Если трудно не надо.  
Я же уже все написал и прокомментировал.

Цитата:
Если надо задать строго слово target, то регэксп будет иметь вид [^[:alpha:]]target[^[:alpha:]], где [^[:alpha:]] — не буква (но, напр., пробел, новая строка, знак препинания, цифра).

 
Если строго справа, то target[^[:alpha:]]; а если не должно быть только каких-то конкретных букв, то target[^abc].
 
$ awk -v ORS=' ' '/target[^abc]/{delete s; p=1} p==1{s[FNR]=$0} p==1&&/AdRiver/{exit 0} END{for (i in s) print s[i]}' king_stiven.txt

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 22:28 07-05-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DrakonHaSh
Ответ на ваш вопрос.
for A in 1 2 3; do echo $A; done
 
p.s. а вообще столь примитивный вопрос можно и не задавать - стоило лишь погуглить как описать цикл for в shell.
p.p.s. кстати записать перечисление можно и более изящно вместо 1 2 3, можно написать {1..3}

----------
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.

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 20:27 08-05-2011 | Исправлено: Alukardd, 20:32 08-05-2011
SergeyKulikov



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть файлик test.sql и в нём такой текст:
 
Что-то длинное <script тут тоже что-то>тут еще что-то</script> и снова длинный текст <script снова что-то> еще что-то </script> и закончилось.
 
 
 
 
 
 
Надо его почистить и удалить то, что я выделил красным.
Должно получится вот так: Что-то длинное и снова длинный текст и закончилось.
 
Пробовал так:
sed 's|<script[^>]*\?>.*\?</script>||g' test.sql
 
но удаляет не то, что мне надо, а вот так (выделил синим):
 
Что-то длинное <script тут тоже что-то>тут еще что-то</script> и снова длинный текст <script снова что-то> еще что-то </script> и закончилось.
В итоге остаётся: Что-то длинное  и закончилось.
 
Как управлять его жадностью? Помогите пожалуйста

Всего записей: 24 | Зарегистр. 09-02-2011 | Отправлено: 14:41 13-05-2011 | Исправлено: SergeyKulikov, 14:55 13-05-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 154

Компьютерный форум 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