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

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

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

 

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

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

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите, великие скриптописатели, запутался во вложенных циклах
Имеется прокси-лист, вида:
 
*****
221.224.163.28:80
195.154.231.43:3128
80.253.139.165:8080
*****
 
Надо тестить прокси по конкретным сайтам вот, например, таким способом:
 
*****
result=`HEAD -d -p http://$IP:$PORT -t 20 www.any_url.com HTTP/1.1`
if [ "$result" = "200 OK" ]; then
    [do whatever you want...]
    break;
else
    [do something else ...]
fi
*****
 
Но сайтов каждый раз разное количество, от 3-ёх до 50-ти. Файл с сайтами вида:
 
*****
http://www.ru
https://2ip.ru
https://mail.google.com
*****
 
Ну и если все проверки пройдены, то генерить для Firefox кусок конфига в файл с именем xxx.js, где xxx - номер по порядку от 001 до 999, ну или сколько получится.
 
Кусок конфига вида:
 
*****
user_pref("network.proxy.ftp", "1.175.192.187");
user_pref("network.proxy.ftp_port", 8088);
user_pref("network.proxy.http", "1.175.192.187");
user_pref("network.proxy.http_port", 8088);
user_pref("network.proxy.share_proxy_settings", true);
user_pref("network.proxy.socks", "1.175.192.187");
user_pref("network.proxy.socks_port", 8088);
user_pref("network.proxy.ssl", "1.175.192.187");
user_pref("network.proxy.ssl_port", 8088);
user_pref("network.proxy.type", 1);
*****
 
Кончил.
Буду очень благодарен за помощь, ибо что-то моск уже кипит...

Всего записей: 15 | Зарегистр. 25-08-2006 | Отправлено: 22:57 06-02-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Damiurgent, я не понял вопроса. Вы не знаете, как читать файл построчно?

while read uri; do
      ...
done < "$file"

> if [ "$result" = "200 OK" ]; then
 
«200 Ok» тоже встречается, а да и вообще, емнип, пояснения к кодам возврата — они не предназначены быть машиночитаемыми, так что:

read code __ < <(HEAD -d -p http://$ip:$port -t 20 "$uri" HTTP/1.1)
if [[ $code == 200 ]]; then
...


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:18 07-02-2016 | Исправлено: ASE_DAG, 00:20 07-02-2016
Damiurgent

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Построчно файл читать умею, иначе бы не слепил прокси-лист из только анон 4-го уровня с ssl. Проблема у меня с передачей значений двух кусков строки из awk во внешний скрипт-шелл. Или вот ещё иначе попробую сформулировать:
Такой ага, весь из себя, читаю awk-ом прокси-лист, считал первую строку до двоеточия - надо это в одну переменную запихать, затем считал первую строку после двоеточия - во вторую. Затем надо прервать выполнения чтения awk-ой прокси-листа, передать эти две переменные проверочному скрипту, а в это время третий скрипт читает первую строку сайт-листа. Затем происходит собственно проверка первого прокси по первой строке сайт-листа, по второй строке, ... , до случая без 200 либо до конца сайт-списка. Если до конца сайт-списка добрались, то пишем конфиг с именем файла 001, по порядковому номеру проверяемой прокси. Затем только возвращаемся в первый awk, чтобы читать вторую строку.
 
В общем, всё по отдельности могу, а в кучу слепить - не могу. Ибо весь процесс неделим, иначе нету смысла. Основная проблема - уйти из первого awk на подпрограмму bash с тремя переменными в кармане, полученными из первого awk. Тремя, потому что ip, port и номер проверяемой прокси из прокси-листа.
 
Затем, после выполнения проверки надо либо отписать конфиг в файл, либо добавить единицу к переменной номера проверяемой прокси и вернуться во вторую уже строку первого awk. Вобщем саму сцепку отдельных частей не представляю как слепить.

Всего записей: 15 | Зарегистр. 25-08-2006 | Отправлено: 06:42 07-02-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Damiurgent, у ты, сколько текста. Зачем вы утруждаете себя написанием всего этого? Общая идея («проверяю прокси»), образец ввода и желаемого вывода, а дальше только код, который написали, а недостающие куски псевдокодом — этого было бы более, чем достаточно.
 
Тем не менее: AWK здесь не нужен.
 
>  считал первую строку до двоеточия - надо это в одну переменную запихать, затем считал первую строку после двоеточия - во вторую.
 
while IFS=':' read host port; do
      ...
done < "$file"


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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 09:26 07-02-2016 | Исправлено: ASE_DAG, 11:16 07-02-2016
Damiurgent

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
конструкция while do - для меня новое и неизведанное
там где "..." - туда вставлять проверку прокси?
я правильно понимаю, что сайт-лист надо тоже конструкцией while do читать
вот тут и получится вложенный цикл, который снова сведёт меня с ума...
 
можно, конечно, все промежуточные результаты выкладывать в файлы, но это тоже вряд ли конгениально, ещё и обрабатывать надо на ошибку заргузки несуществующего по порядку файла...
 
мне ведь не разово надо сделать всю эту процедуру, а 4 раза в сутки
и количество проксей и сайтов каждый раз варьируется...

Всего записей: 15 | Зарегистр. 25-08-2006 | Отправлено: 11:33 07-02-2016 | Исправлено: Damiurgent, 11:35 07-02-2016
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, Damiurgent
Похоже, что что-то вроде

file_proxy="in_prox.lst"
file_sites="in_site.lst"
linenum=0
while IFS=':' read ip port; do  
  ((linenum++))
  while read uri; do
    read code __ < <(HEAD -d -p http://$ip:$port -t 20 "${uri##*\/}" HTTP/1.1)  
    if [[ $code != 200 ]]; then
      unset ip
      break
    fi
  done < "$file_sites"  
  if [[ $ip ]]; then
    {  
      for type in ftp http socks ssl; do
        echo user_pref\("network.proxy.${type}", "${ip}"\)\;  
        echo user_pref\("network.proxy.${type}_port", ${port}\)\;
      done    
      echo user_pref\("network.proxy.share_proxy_settings", true\)\;
      echo user_pref\("network.proxy.type", 1\)\;
    } > $(printf %04d $linenum).js
  fi  
done < "$file_proxy"

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 11:43 07-02-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy> echo user_pref\("network.proxy.${type}", "${ip}"\)\;
 
Забыли кавычки экранировать:
 
echo user_pref\(\"network.proxy.${type}\", \"${ip}\"\)\;
 
А вообще:
 
printf 'user_pref("network.proxy.%s", "%s");\n' "$type" "$ip"

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 11:59 07-02-2016 | Исправлено: ASE_DAG, 12:02 07-02-2016
Damiurgent

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy, ASE_DAG!
Спасибо, ребятушки! Выручили! Спасли от грыжи мосга!
На OS X HEAD оказался обрезанным всего до двух ключей -n и -c.
Иду проверять на Ubuntu.
 
[updated 1]
На убунте что-то HEAD ругается:
'http://14.218.88.116:9797' is not a valid URI scheme at /usr/bin/HEAD line 450.
 
[updated 2]
В общем добил, работает. Из списка "илитных" 3565 проксей в результате удовлетворяют только 37 штук.
Всем спасибо!

Всего записей: 15 | Зарегистр. 25-08-2006 | Отправлено: 12:06 07-02-2016 | Исправлено: Damiurgent, 16:41 07-02-2016
mithridat1



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


----------
Если ты не понимаешь, что я говорю, и сомневаешься, верно ли все это, обрати внимание по крайней мере на то, не сомневаешься ли ты в самом этом сомнении своем (Августин Блаженный)

Всего записей: 4924 | Зарегистр. 05-01-2006 | Отправлено: 10:56 12-02-2016 | Исправлено: mithridat1, 11:03 12-02-2016
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
попробовать найти биндинго curses/ncurses для bash
 
для zsh есть из коробки.
 
Добавлено:
либо tput

Всего записей: 294 | Зарегистр. 08-02-2003 | Отправлено: 11:39 12-02-2016
mithridat1



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

----------
Если ты не понимаешь, что я говорю, и сомневаешься, верно ли все это, обрати внимание по крайней мере на то, не сомневаешься ли ты в самом этом сомнении своем (Августин Блаженный)

Всего записей: 4924 | Зарегистр. 05-01-2006 | Отправлено: 12:43 12-02-2016 | Исправлено: mithridat1, 13:05 12-02-2016
arto

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tput?
 
например http://linuxcommand.org/lc3_adv_tput.php

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Damiurgent> [updated 1]
 
Если вы хотели, чтоб это кто-то увидел, то так делать не надо было — уведомления об исправлениях подписчикам не присылают.
 
mithridat1> Какие есть инструменты для псевдографической визуализации произвольного массива данных в реальном времени под bash?
 
Никаких.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 22:33 12-02-2016
useretail



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mithridat1
чем гиф сделали?

Всего записей: 4540 | Зарегистр. 14-09-2007 | Отправлено: 22:42 12-02-2016
mithridat1



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

Цитата:
Никаких

Почему так радикально ?
 
useretail
FastStone Capture (C FFmpeg лень было возиться.)

----------
Если ты не понимаешь, что я говорю, и сомневаешься, верно ли все это, обрати внимание по крайней мере на то, не сомневаешься ли ты в самом этом сомнении своем (Августин Блаженный)

Всего записей: 4924 | Зарегистр. 05-01-2006 | Отправлено: 00:13 13-02-2016 | Исправлено: mithridat1, 00:39 13-02-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG>> Никаких
mithridat1> Почему так радикально?
 
Что значит «почему»?  По факту.  Ну или, если хотите, то давайте менее радикально: «насколько я знаю, никаких», но это, кажется при любой реплике на форме надо подразумевать.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:40 13-02-2016
useretail



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

Цитата:
FastStone Capture

под линукс версии нет. вы ее под вайном запускали?

Всего записей: 4540 | Зарегистр. 14-09-2007 | Отправлено: 03:14 13-02-2016
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
useretail, а разве где-то было что-то сказано про некий «Линукс»? Судя по несвободной гарнитуре Lucida Console, товарищ mithridat1 вообще пользуется Виндой, а не ГНУ.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 05:04 13-02-2016
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
useretail
Я видео с терминальной сессии захватывал.
 
ASE_DAG

Цитата:
Судя по несвободной гарнитуре Lucida Console, товарищ mithridat1 вообще пользуется Виндой, а не ГНУ.
 

Ну вот,взяли и раскусили меня.А я было хотел "своим" тут прикинуться

----------
Если ты не понимаешь, что я говорю, и сомневаешься, верно ли все это, обрати внимание по крайней мере на то, не сомневаешься ли ты в самом этом сомнении своем (Августин Блаженный)

Всего записей: 4924 | Зарегистр. 05-01-2006 | Отправлено: 11:17 13-02-2016
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброе время суток,
 
Уважаемый ASE_DAG,
Вы мне уже раз помогли со скриптом. Все великолепно работает. Еще раз большое спасибо!
Но нельзя ли сделать, чтобы проверки проводились параллельно, а не последовательно? Каждая проверка занимает ~3 секунды на инстанцию.
При количестве инстанций ~100 - проверка занимает слишком много времени.
И еще хотелось бы, чтобы ошибки фильтровались ( grep -v "OK" ? ) и высылались на маил или просто выводились на консоль, чтобы скрипт можно было стартовать из cron.
 
Скрипт

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 13:30 18-02-2016
Открыть новую тему     Написать ответ в эту тему

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