Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: [HOWTO] Пишем bash скрипты  (Прочитано 182073 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
Re: [HOWTO] Пишем bash скрипты
« Ответ #240 : 16 Февраль 2013, 02:05:31 »
vitalmar,
Код: Bash
  1. exec >"list.m3u"
  2. echo "#EXTM3U"
  3. I="0"
  4. find ... | while read URI
  5. do
  6.         echo -e "#EXTINF:0,$((I++))\nhttp://...${URI##*/}"
  7. done

Оффлайн vitalmar

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #241 : 16 Февраль 2013, 05:42:12 »
vitalmar,
Код: Bash
  1. exec >"list.m3u"
  2. echo "#EXTM3U"
  3. I="0"
  4. find ... | while read URI
  5. do
  6.         echo -e "#EXTINF:0,$((I++))\nhttp://...${URI##*/}"
  7. done
А как можно дописать вместо I имя файла, а то плейлист неинформативный получается :) 1,2,3,4,5 и т.д.
====
Понял... вместо #EXTINF:0,$((I++)) прописать #EXTINF:0,${URI##*/}
« Последнее редактирование: 16 Февраль 2013, 05:50:34 от vitalmar »

Оффлайн vitalmar

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #242 : 20 Февраль 2013, 09:40:05 »
все бы хорошо, проблемы начинаются с добавлением файлов с папок, т.е. путь указывается без папки - например http:\\xx.xx.xx.xx\vid\test.avi, а на самом деле файл находится по адресу http:\\xx.xx.xx.xx\vid\папка\test.avi

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #243 : 20 Февраль 2013, 23:53:15 »
все бы хорошо, проблемы начинаются с добавлением файлов с папок, т.е. путь указывается без папки - например http:\\xx.xx.xx.xx\vid\test.avi, а на самом деле файл находится по адресу http:\\xx.xx.xx.xx\vid\папка\test.avi
можно попробовать что-то вроде ${URI/#\/zzz\/yyy\/xxx\//}

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
Re: [HOWTO] Пишем bash скрипты
« Ответ #244 : 21 Февраль 2013, 04:55:11 »
vitalmar, честно говоря, я не понял в чём проблема.
Добавить имя директории в выхлоп echo, не?

Оффлайн vitalmar

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #245 : 23 Февраль 2013, 10:57:09 »
тут дело в том, что трансмишен качает раздачи и в некоторых раздачах файлы в папках - например "Supernatural.S03.HDRip (DUB)"

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
Re: [HOWTO] Пишем bash скрипты
« Ответ #246 : 23 Февраль 2013, 19:06:34 »
тут дело в том, что трансмишен качает раздачи и в некоторых раздачах файлы в папках - например "Supernatural.S03.HDRip (DUB)"
Перед find поставьте cd в каталог с закачками и выполняйте find в текущем каталоге, в результате получите относительные пути к файлам.

Оффлайн vitalmar

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #247 : 23 Февраль 2013, 19:44:05 »
exec >"list.m3u"
echo "#EXTM3U"
I="0"
cd /home/123/321/vid/
find -iregex '.*\.\(avi\|mkv\|mp4\)' | while read URI
do
        echo -e "#EXTINF:0,${URI##*/}\nhttp://77.77.77.777/321/${URI##*/}"
done
один фиг дописываются файлы без папок, хотя если просто выполнить в корне find -iregex '.*\.\(avi\|mkv\|mp4\)' - выдает полный путь


=================upd/
cd /home/111/222/vid/
exec >"list.m3u"
echo "#EXTM3U"
find -iregex '.*\.\(avi\|mkv\|mp4\)' | while read URI
do
        echo -e "#EXTINF:0,${URI##*/}\nhttp://77.77.77.777/vid/${URI#*/}"
done

вот рабочий вариант :) в URI надо было убрать одну # , но теперь другая история - при запуске этого скрипта трансмишеном в плейлист почему то добавляет вот так -e #EXTINF:0,Supernatural.S01.E01.2005.HDRip.avi
-e http://77.77.77.777/vid/Supernatural.S01.HDRip (DUB)/Supernatural.S01.E01.2005.HDRip.avi
« Последнее редактирование: 23 Февраль 2013, 20:38:42 от vitalmar »

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
Re: [HOWTO] Пишем bash скрипты
« Ответ #248 : 23 Февраль 2013, 20:58:46 »
vitalmar, shebang вначале скрипта настоятельно рекомендуется.

Оффлайн vitalmar

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #249 : 23 Февраль 2013, 21:20:06 »
Итак! Окончательно рабочая версия скрипта:
#!/bin/bash
cd [абсолютный путь до файлов]
exec >"list.m3u"
echo "#EXTM3U"
find -iregex '.*\.\(avi\|mkv\|mp4\)' | while read URI
do
   echo -e "#EXTINF:0,${URI##*/}\nhttp://адрес_сервера/${URI#*/}"
done
Всем спасибо! Особенная благодарность ArcFi!

Оффлайн vitalmar

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #250 : 28 Февраль 2013, 11:43:36 »
Доброго времени суток! Появилась необходимость мониторинга цен на SSD по каталогу в интернет-магазине.
Адрес полного списка с ценами: http://www.compumir.ru/catalog/1683/ssd.html?&order=price&liststep=-1.
То, что на данный момент получилось у меня с помощью bash:
wget "http://www.compumir.ru/catalog/1683/ssd.html?&order=price&liststep=-1" -O - -q | sed -e '/диск/!d' -e "s/[</a>]*$//g" -e "s/[^Ж]*//" -e 's/&quot;//g'|sed -n '3~3p' | awk -F'>' '{print $2}' > hdd.txt
Выдает только список всех ссд без цен вот в таком виде:
Жесткий диск SSD Kingston mS100 Series mSATA 32GB
Жесткий диск SSD mSATA 30GB OCZ
Жесткий диск SSD SATA-III 2,5 64GB Kingston Desktop kit
Жесткий диск SSD Kingston V300 60Gb
Жесткий диск SSD SATA 2,5 60GB
Жесткий диск SSD OCZ Agility 4
Жесткий диск SSD SATA 2,5 60GB
Жесткий диск SSD SATA 2,5 60GB
Жесткий диск SSD Kingston V200+ Series  SATA-III 2,5 60GB
Жесткий диск SSD Intel Origina 330 Series SATA-III 2,5 60GB
Жесткий диск SSD OCZ Vertex 4 SATA-III 2,5 64GB
Жесткий диск SSD Corsair Force Series GT SATA-III 2,5 60GB
Жесткий диск SSD mSATA 60GB OCZ
Жесткий диск SSD Kingston mS100 Series mSATA 64GB
Жесткий диск SSD SATAIII 2,5 60GB Intel Origina 520 Series
Жесткий диск SSD Kingston V200+
Жесткий диск SSD Kingston HyperX 3K SATA-III 2,5 90GB
Жесткий диск SSD SATA-III 2,5 90GB
Жесткий диск SSD Kingston V200+ Series SATA-III 2,5 120GB
Жесткий диск SSD Kingston V200+ Series SATA-III 2,5 120GB
Жесткий диск SSD Kingston V200+ Series SATA-III 90GB 2,5
Жесткий диск SSD Intel Origina 520 Series SATA-III 2,5 60GB
Жесткий диск SSD OCZ Agility 3 SATA-III 2,5 128GB
Жесткий диск SSD SATA-III 2,5 128GB Kingston Notebook kit
Жесткий диск SSD Corsair Force 3
Жесткий диск SSD OCZ Agility 4
Жесткий диск SSD SATA III 2,5 120GB
Жесткий диск SSD SATA 2,5 120GB
Жесткий диск SSD SATA-III 2,5 128GB OCZ Vertex 4
Жесткий диск SSD Corsair Force Series GT SATA-III 2,5 90GB
Жесткий диск SSD Kingston V200+ Series SATA-III 120GB
Жесткий диск SSD OCZ mSATA Nocti 120GB (NOC-MSATA-120G)
Жесткий диск SSD Kingston HyperX 3K SATA-III 2,5 120GB
Жесткий диск SSD SATA 2,5 120GB Corsair Force 3
Жесткий диск SSD Intel Origina 520 Series SATA-III 2,5 120GB
Жесткий диск SSD SATA-III 2,5 128GB Kingston
Жесткий диск SSD SATAIII 2,5 120GB Intel Origina 520 Series
Жесткий диск SSD OCZ Vector SATA-III 2,5 128GB
Жесткий диск SSD Intel Origina 330 Series SATA-III 2,5 180GB
Жесткий диск SSD Corsair Force Series GS SATA-III 2,5 180GB (CSSD-F180GBGS-BK)
Жесткий диск SSD Kingston HyperX SATA-III 2,5 120GB
Жесткий диск SSD OCZ Agility 3 SATA-III 2,5 240GB
Жесткий диск SSD Kingston V200+ Series SATA-III 240GB 2,5
Жесткий диск SSD OCZ Agility 3 SATA-III 2,5 256GB
Жесткий диск SSD OCZ Agility 4 SATA-III 2,5 256GB
Жесткий диск SSD Kingston V200+ Series SATA-III 2,5 240GB
Что подскажете?

Оффлайн Vitsliputsli

  • Старожил
  • *
  • Сообщений: 1294
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #251 : 28 Февраль 2013, 17:29:47 »
Примерно так:
wget "http://www.compumir.ru/catalog/1683/ssd.html?&order=price&liststep=-1" -O - -q | sed -n 's/.*>\(Жесткий диск [^<]*\).*/\1/p; s/^<div class=price [^>]*>\([^<]*\).*/ - \1 руб./p' | sed '1d;N;s/\n//g;s/&quot;/"/g'

Оффлайн vitalmar

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #252 : 01 Март 2013, 12:19:29 »
Примерно так:
wget "http://www.compumir.ru/catalog/1683/ssd.html?&order=price&liststep=-1" -O - -q | sed -n 's/.*>\(Жесткий диск [^<]*\).*/\1/p; s/^<div class=price [^>]*>\([^<]*\).*/ - \1 руб./p' | sed '1d;N;s/\n//g;s/&quot;/"/g'
Спасибо, работает! Только менял вот этот кусок кода .*/ - \1 руб./p' на .*/\'\t'\1 руб./p вместо - используется табуляция, так удобнее импортировать в бд.

Оффлайн Vitsliputsli

  • Старожил
  • *
  • Сообщений: 1294
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #253 : 01 Март 2013, 14:35:14 »
Скрипт не универсальный, можно сказать одноразовый. Если импортируете в базу, то лучше вот так:
wget "http://www.compumir.ru/catalog/1683/ssd.html?&order=price&liststep=-1" -O - -q | sed -n 's/^<a href="\/catalogitem.*]);">\([^<]*\).*/\1/p; s/^<div class=price [^>]*>\([^<]*\).*/ - \1 руб./p' | sed 'N;s/\n//g;s/&quot;/"/g'
Он выведет еще и  какой-то "переходник" (если не нужно, то используйте grep). Иначе все поломается после изменения страницы.

Оффлайн sklart

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: [HOWTO] Пишем bash скрипты
« Ответ #254 : 29 Март 2013, 23:49:05 »
Здраствуйте!
Помогите разобраться с bash-скриптом.
Суть:
Есть переменная, которая может принимать разные значения
Примеры:
WIKI_LINK="http://dumps.wikimedia.org/ruwikisource/latest/ruwikisource-latest-pages-articles.xml.bz2"
WIKI_LINK="http://dumps.wikimedia.org/ruwiki/20130320/ruwiki-20130320-pages-articles.xml.bz2"
WIKI_LINK="http://dumps.wikimedia.org/fiwikinews/20130329/fiwikinews-20130329-pages-articles.xml.bz2"
Нужно получить и записать в содержимое переменной WIKIFILE_NAME все, начиная с последнего слеша за исключением расширения (последних четырех символов).
Т.е. должно быть соответственно:
WIKIFILE_NAME="ruwikisource-latest-pages-articles.xml"
WIKIFILE_NAME="ruwiki-20130320-pages-articles.xml"
WIKIFILE_NAME="fiwikinews-20130329-pages-articles.xml"

Каким образом это можно реализовать с помощью работ со строками (не особо соображаю в этом вопросе).
Спасибо

 

Страница сгенерирована за 0.081 секунд. Запросов: 24.