Сайт | Скачать | Видео | Wiki

Автор Тема: Написание скриптов  (Прочитано 24366 раз)

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

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
Re: Написание скриптов
« Ответ #15 : 22 Май 2009, 09:01:04 »
Выделил тему   [Как скриптом заменить строку в файле?]  http://forum.puppyrus.org/index.php/topic,1832.0.html

кстати наткнулся на похожую тему http://forum.puppyrus.org/index.php/topic,284.0.html
« Последнее редактирование: 22 Май 2009, 21:20:08 от Zloy_T »

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
Re: Написание скриптов
« Ответ #16 : 23 Май 2009, 08:30:43 »
кто умеет скрипты писать, давайте вместе какой-нибудь практикум напишем. Это чертовски интересно, оказывается. Я свои наработки тоже буду выкладывать

на данный момент пытаюсь решить такую задачу

Код
FROM=”000”
TO=”111”
file | sed -i -e “s/$FROM/$TO/g” {} \;
file | sed -i -e “s/$TO/$FROM/g” {} \;

как заставить это работать
« Последнее редактирование: 23 Май 2009, 08:40:06 от Zloy_T »

DdShurick

  • Гость
Re: Написание скриптов
« Ответ #17 : 23 Май 2009, 10:06:45 »
Практикум давно создан Фарватером, но с его уходом "завял"
http://forum.puppyrus.org/index.php/topic,284.0.html
И ещё на wiki есть.

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
Re: Написание скриптов
« Ответ #18 : 24 Май 2009, 02:34:29 »
итак, задача сделать выключалку значка индикатора батареи в трее. как известно, это прописано в .jwmrc-tray
Код
<!-- asapm battery -->
      <Swallow name="asapm">
         asapm -u 4
      </Swallow>

иными словами, чтобы удалить индикатор, надо закомментировать эти строки. Я пошел проторенным путем

Код
#!/bin/sh
cat ~/jwmrc-tray | sed 's/<Swallow name="asapm">/<!-- <Swallow name="asapm"> -->/g' > ~/jwmrctray.txt&&
cp ~/jwmrctray.txt ~/jwmrc-tray&&
cat ~/jwmrc-tray | sed 's/asapm -u 4/<!-- asapm -u 4 -->/g' > ~/jwmrctray.txt&&
cp ~/jwmrctray.txt ~/jwmrc-tray&&
cat ~/jwmrc-tray | sed 's/<\/Swallow>/<!-- <\/Swallow> -->/g' > ~/jwmrctray.txt&&
cp ~/jwmrctray.txt ~/jwmrc-tray&&
exit

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
Re: Написание скриптов
« Ответ #19 : 24 Май 2009, 03:33:04 »
однако, такой вариант хоть и убирает все что надо, он еще и убирает то, чего не надо. Я решил что достаточно закомментировать среднюю стоку.

Код
#! /bin/sh
#####################################################################
#       Скрипт управления значком индикатора батареи в трее         #
#                  написан для форума Puppyrus.org                  #
#                         Автор: Zloy_T                             #
#        За крайне существенную помощь спасибо DdShurick            #
#       Предложения и замечания направлять на Puppyrus.org          #
#####################################################################

if [ -f ~/.jwmrc-tray.bak ]  # проверяем, есть ли бекап;
then
  # если есть, выполняем
  echo on > /dev/null
  # Подавление вывода.
else
  # Если нет, бекапим
  # копируем файл на всякий случай
  cp ~/.jwmrc-tray ~/.jwmrc-tray.bak
fi

  #Выбор Yes или No (результат в $?, 0 - yes, 1 - no, 255 - закрыто окно), "0 0" - размер окна по умолчанию:
    Xdialog --title "Управление значком индикатора" --ok-label "Да" --cancel-label  "Нет" --yesno "Удалить значок индикатора \nбатареи из трея? \nУдалить - Да \nДобавить - Нет" 10 40

# Эта переменная, значение возвращено диалогом
retval=$?

if [ "$retval" = "0" ]; then
# Если условие верно, то выполняем
# Если нет, то ничего не делаем, типа нам пофигу
cat ~/.jwmrc-tray | sed 's/asapm -u 4/<!-- asapm -u 4 -->/g' > ~/jwmrctray.txt&&
# меняем строку в файле, вывод направляем во временный файл
cp ~/jwmrctray.txt ~/.jwmrc-tray&&
# копируем временный файл в место назначения

# Информационный диалог, если не нужен, то можно закомментировать
Xdialog --title "Успешно!" --no-buttons --infobox \
" Значок удален " 10 40 2000
#время показа окна в ms
rm -f ~/jwmrctray.txt
# сносим временный файл
fi

if [ "$retval" = "1" ]; then
cat ~/.jwmrc-tray | sed 's/<!-- asapm -u 4 -->/asapm -u 4/g' > ~/jwmrctray.txt&&
# меняем строку в файле, вывод направляем во временный файл
cp ~/jwmrctray.txt ~/.jwmrc-tray&&
# копируем временный файл в место назначения

Xdialog --title "Успешно!" --no-buttons --infobox \
" Значок добавлен " 10 40 2000
rm -f ~/jwmrctray.txt
# сносим временный файл
fi

if [ "$retval" = "255" ]; then
# при нажатии ESC выйти
exit 255
fi

Проверяйте, ибо у меня этот значок все равно не работает

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10403
  • Репутация: +107/-2
Re: Написание скриптов
« Ответ #20 : 24 Май 2009, 13:10:39 »
Помогите составить правильные регулярные выражения для обработки строки из файла jvmrc-tray
вот строка:

Код
		<TrayButton popup="Свернуть все окна" icon="mini-desktop.xpm">showdesktop</TrayButton>

Нужно чтобы из этой строки осталось только слово showdesktop
Вот каким образом это реализовано в скрипте panel-buttons :

Код
cat /root/.jwmrc-tray | sed -n ""$begin"p" | sed 's/<*>//' | sed 's/exec://' | sed 's/^[ \t]*//' > /tmp/tmp-exec.txt  ### gets executable text

Но строка справляется с задачей не полностью :(
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн alex

  • Новичок
  • *
  • Сообщений: 19
  • Репутация: +12/-0
  • Гениальное в простом !!!
Re: Написание скриптов
« Ответ #21 : 24 Май 2009, 14:45:00 »
утилита tr считывает текст из стандартного потока ввода, находит символы в соответствии с выражением 1 и заменяет их в соответствии с выражением 2  ;D

ну в общем все что нужно в одном ;D

Использование: tr [КЛЮЧ]... НАБОР1 [НАБОР2]
Преобразует, уплотняет и/или удаляет знаки со стандартного ввода и
печатает на стандартный вывод.

  -c, -C, --complement    сначала получить дополнение ТАБЛИЦЫ1
  -d, --delete            удалять знаки из ТАБЛИЦЫ1, не преобразовывать
  -s, --squeeze-repeats   замещать последовательности повторяющихся знаков из
                            перечисленных в ТАБЛИЦЕ1 на единственный такой знак
  -t, --truncate-set1     сначала сократить ТАБЛИЦУ1 до размера ТАБЛИЦЫ2
      --help     показать эту справку и выйти
      --version  показать информацию о версии и выйти

ТАБЛИЦы задаются как знаковые строки.  Во многих случаях знаки представляют
сами себя.  Воспринимаются следующие последовательности:

  \ННН            знак с восьмеричным кодом ННН (от 1 до 3 цифр)
  \\              обратная косая черта
  \a              звуковой сигнал
  \b              забой
  \f              перевод страницы
  \n              новая строка
  \r              возврат каретки
  \t              горизонтальная табуляция
  \v              вертикальная табуляция
  ЗНАК1-ЗНАК2     все знаки от ЗНАК1 до ЗНАК2 в порядке возрастания
  [ЗНАК*]         ЗНАК заполняет ТАБЛИЦУ2 до длины ТАБЛИЦЫ1
  [ЗНАК*ЧИСЛО]    заданное ЧИСЛО одинаковых ЗНАКОВ; ЧИСЛО восьмеричное, если
                  начинается с 0
  [:alnum:]       все буквы и цифры
  [:alpha:]       все буквы
  [:blank:]       все горизонтальные пробельные знаки
  [:cntrl:]       все управляющие знаки
  [:digit:]       все цифры
  [:graph:]       все печатные знаки, исключая пробел
  [:lower:]       все строчные буквы
  [:print:]       все печатные знаки, включая пробел
  [:punct:]       все знаки препинания
  [:space:]       все вертикальные или горизонтальные пробельные знаки
  [:upper:]       все заглавные буквы
  [:xdigit:]      все шестнадцатеричные цифры
  [=ЗНАК=]        все знаки, эквивалентные ЗНАКУ

Если заданы обе ТАБЛИЦы, и не указан -d, производится преобразование.  Ключ -t
может быть использован только при преобразовании.  ТАБЛИЦА2 расширяется до
размера ТАБЛИЦЫ1 путем повторения последнего знака.  Избыточные знаки
ТАБЛИЦЫ2 игнорируются.  Только [:lower:] и [:upper:] гарантировано сортированы в
порядке возрастания, их можно использовать только парно, для обозначения смены
регистра.  Если не запрошено ни преобразование, ни удаление, ключ -s использует
ТАБЛИЦУ1, иначе при уплотнении используется ТАБЛИЦА2. Уплотнение производится
после преобразования или удаления.
Лучше молчать и прослыть дураком , чем открыть рот и развеять все сомненья !!!

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10403
  • Репутация: +107/-2
Re: Написание скриптов
« Ответ #22 : 24 Май 2009, 15:14:04 »
как сделаешь отпишись (код) а то меня вчера злой тигра таким вопросом выспрашивал ;)

Дык вот мы с ним и бьемся, только для разных задач.

Кстати вот цытата с одного из сайтов в инете:

Цитата
Из всех опробованных мной версий программы tr ни одна адекватно не работала с символами кириллицы в кодировке UTF-8.
http://rus-linux.net/lib.php?name=MyLDP/consol/HuMan/tr-ru.html
« Последнее редактирование: 24 Май 2009, 15:23:32 от Pro »
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
Re: Написание скриптов
« Ответ #23 : 25 Май 2009, 02:23:49 »
Помогите составить правильные регулярные выражения для обработки строки из файла jvmrc-tray
вот строка:

Код
		<TrayButton popup="Свернуть все окна" icon="mini-desktop.xpm">showdesktop</TrayButton>

Нужно чтобы из этой строки осталось только слово showdesktop

c регулярными выражениями помочь не могу. Менять надо только эту строку или много по шаблону этой? если первое, то

Код
cat /root/.jwmrc-tray | sed 's/<TrayButton popup="Скрыть окна" icon="showdesk16.xpm">showdesktop<\/TrayButton>/showdesktop/' > /tmp/tmp-exec.txt

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10403
  • Репутация: +107/-2
Re: Написание скриптов
« Ответ #24 : 25 Май 2009, 03:17:36 »
Код
cat /root/.jwmrc-tray | sed 's/<TrayButton popup="Скрыть окна" icon="showdesk16.xpm">showdesktop<\/TrayButton>/showdesktop/' > /tmp/tmp-exec.txt

Нет так не пойдет :) я почти разобрался, главное отличие от винды это то что в ней "*" это множество любых символов а "?" это один любой символ а в регулярных выражениях "." это любой символ а множество любых символов это ".*"
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
Re: Написание скриптов
« Ответ #25 : 25 Май 2009, 03:20:05 »
Нет так не пойдет :) я почти разобрался, главное отличие от винды это то что в ней "*" это множество любых символов а "?" это один любой символ а в регулярных выражениях "." это любой символ а множество любых символов это ".*"
когда разберешься, отпишись тут. Может и я тогда пойму.
Кстати почему не пойдет? нужно чтобы скрипт работал по шаблону штоль?

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
Re: Написание скриптов
« Ответ #26 : 25 Май 2009, 15:00:19 »
Код
#!/bin/sh
cat /root/.jwmrc-tray | sed -e :a -e 's/<[^>]*>//g;/</N;//ba' > /tmp/tmp-exec.txt  ### gets executable text

.jwmrc-tray
Код
<JWM>
<Tray  autohide="false" insert="right" x="0" y="-1" border="1" height="28" >
<!-- Additional TrayButton attribute: label -->
<TrayButton label="Меню" icon="laika.png">root:3</TrayButton>
<!-- BK showdesktop incompatible with rox 2.5... -->
<TrayButton popup="Скрыть окна" icon="showdesk16.xpm">showdesktop</TrayButton> -->
<TrayButton popup="Терминал" icon="mini-term.xpm">exec:urxvt</TrayButton> -->
<TrayButton popup="Текстовый редактор" icon="geany.xpm">exec:defaulttexteditor</TrayButton> -->
<!-- Additional Pager attributes; width, height -->
<Pager/>
<!-- Additional TaskList attribute: maxwidth -->
<TaskList/>
<Dock/>
<!-- Additional Swallow attribute: height -->
<Swallow name="Keyboard switcher">
fbxk
</Swallow>
<!-- Additional Swallow attribute: height -->
<Swallow name="blinky">
blinkydelayed -bg steelblue4
</Swallow>
<Swallow name="mini-volume.tcl">
mini-volume.tcl -bg steelblue4 -mixer pvolume-mixer.tcl
</Swallow>
<Swallow name="freememapplet" width="48">
<!-- freememappletdelayed -->
freememapplet
</Swallow>
<Swallow name="xload" width="32">
xload -nolabel -bg steelblue4 -fg lightblue -hl white
</Swallow>
<Swallow name="asapm">
asapm -u 4
</Swallow>
<Clock format="%H:%M">minixcal</Clock>
</Tray>
</JWM>

tmp-exec.txt

Код
		root:3
showdesktop -->
exec:urxvt -->
exec:defaulttexteditor -->
fbxk
blinkydelayed -bg steelblue4
mini-volume.tcl -bg steelblue4 -mixer pvolume-mixer.tcl
freememapplet
xload -nolabel -bg steelblue4 -fg lightblue -hl white
asapm -u 4
minixcal

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10403
  • Репутация: +107/-2
Re: Написание скриптов
« Ответ #27 : 25 Май 2009, 17:10:32 »
О да уже лучше но вот в конце надо убрать --> значек еще :) и будет совсем хорошо
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Pro

  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 10403
  • Репутация: +107/-2
Re: Написание скриптов
« Ответ #28 : 25 Май 2009, 17:27:35 »
Во блин, надо будет срочно править шаблоны, иначе скрипты будут неправильно работать
Вот этот коментарий тоже убирать надо будет!!!!
<!-- BK showdesktop incompatible with rox 2.5... -->
Я загружаю новые пакеты сюда: http://file.puppyrus.org/users/ а дальше можно найти самостоятельно.

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
Re: Написание скриптов
« Ответ #29 : 25 Май 2009, 18:22:49 »
вот так удаляет всё1
Код
cat /root/.jwmrc-tray | sed -e :a -e 's/<[^>]*>//g;/</N;//ba' | sed 's/-->//' > /tmp/tmp-exec.txt

или вторую часть переписать так:

 
Код
cat /tmp/tmp-exec.txt | sed '/ -->/s/ -->$//g' > /tmp/tmp-exec2.txt
или так
Код
cat ~/.jwmrc-tray | sed '/ -->/s/ -\{2\}>$//g' > /tmp/tmp-exec.txt

а еще можно так чтобы ужать файл
Код
cat /tmp/tmp-exec.txt | sed '/ -->/s/ -->$//g' |  sed -e '/^\s*$/d'> /tmp/tmp-exec2.txt

на выходе
Код
		root:3
showdesktop
exec:urxvt
exec:defaulttexteditor
fbxk
blinkydelayed -bg steelblue4
mini-volume.tcl -bg steelblue4 -mixer pvolume-mixer.tcl
freememapplet
xload -nolabel -bg steelblue4 -fg lightblue -hl white
asapm -u 4
minixcal

и еще ужать
Код
cat /tmp/tmp-exec.txt | sed '/ -->/s/ -->$//g' |  sed -e '/^\s*$/d' | sed 's/^[ \t]*//;s/[ \t]*$//' > /tmp/tmp-exec2.txt

Код
root:3
showdesktop
exec:urxvt
exec:defaulttexteditor
fbxk
blinkydelayed -bg steelblue4
mini-volume.tcl -bg steelblue4 -mixer pvolume-mixer.tcl
freememapplet
xload -nolabel -bg steelblue4 -fg lightblue -hl white
asapm -u 4
minixcal
« Последнее редактирование: 26 Май 2009, 01:14:39 от Zloy_T »