Форум проекта PuppyRus Linux

Разработки проекта PuppyRus => Программирование и компиляция => Тема начата: Zloy_T от 05 Май 2009, 13:20:22

Название: Написание скриптов
Отправлено: Zloy_T от 05 Май 2009, 13:20:22
Хотелось бы поизучать. Кто у нас мастак скриптописания? подскажите, что почитать на эту тему. Есть ли компиллятор для них, а не только интерпретатор. Интересует также, где взять хорошие откомментированные скрипты, для облегчения понимания процесса.
Название: Re: Написание скриптов
Отправлено: kostik от 05 Май 2009, 13:41:56
http://www.opennet.ru/docs/RUS/bash_scripting_guide/
Название: Re: Написание скриптов
Отправлено: Zloy_T от 06 Май 2009, 04:54:13
Как программировать в Puppy (http://www.puppyrus.org/wiki/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C_%D0%B2_Puppy)

Живой Puppy - практикум по программированию в bash под Linux (http://www.puppyrus.org/wiki/index.php?title=%D0%96%D0%B8%D0%B2%D0%BE%D0%B9_Puppy_-_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8E_%D0%B2_bash_%D0%BF%D0%BE%D0%B4_Linux.)
Название: Re: Написание скриптов
Отправлено: DdShurick от 06 Май 2009, 08:21:48
а никому не попадались документы по написанию команд Dialog и Xdialog
с Xdialog боле мене понятно а вот Dialog это интереснее
Я обычно ищу на opennet.ru, и обычно нахожу. Вот навскидку
http://www.opennet.ru/base/dev/linux_dialog.txt.html
Название: Re: Написание скриптов
Отправлено: Zloy_T от 06 Май 2009, 15:24:23
Mendel Cooper, Перевод: Андрей Киселев, "Advanced Bash-Scripning Guide" или "Искусство программирования на языке сценариев командной оболочки" - один большой html-файл, 1,6 МБ

http://rus-linux.net/MyLDP/BOOKS/zip/lasg10.tgz
Название: Re: Написание скриптов
Отправлено: Zloy_T от 06 Май 2009, 16:53:40
как сделать скрипт исполняемым?
 
Код
chmod +x you_file
ну и
Код
man chmod
(справка)
http://ru.wikipedia.org/wiki/Chmod

Кстати заметил что скрипты запускаются и без этой процедуры. Почему? кто обьяснит?
Название: Re: Написание скриптов
Отправлено: Zloy_T от 06 Май 2009, 16:55:22
 Скрипты - это просто.

Любой начинающий системный администратор Linux рано или поздно сталкивается с таким понятием, как “скрипт”, будь то один из загрузочных скриптов вроде /etc/rc.d/rc или написанный разработчиком ПО скрипт конфигурирования configure. В данной статье я постараюсь показать, что написание скриптов на shell не является чем-то из ряда вон выходящим и вполне под силу даже новичку в мире Linux.

Начнем с того, что разберем, что же скрывается за английскими терминами shell и скрипт. Shell, или оболочка, как этот термин иногда переводят – это командный интерпретатор, интерфейс между пользователем и операционной системой, ее ядром. Но, кроме этого, это еще и мощный язык программирования и написания сценариев. Он содержит свои служебные слова и управляющие конструкции и позволяет писать на нем программы. Такая программа на языке сценариев, называемая скриптом, может объединять в себе системные вызовы и команды операционной системы, а также внешние утилиты, создавая мощный инструмент для системного администрирования.

Одной из задач системного администрирования является резервное копирование важной информации. Поэтому давайте рассмотрим пример скрипта, реализующего back-up информации.

Начало начал.

Итак, прежде всего, нам необходимо разобраться в структуре скрипта. Она не представляет собой ничего сложного. По большому счету, простейший скрипт – просто перечисление системных команд. Например:

echo This is just example
whoami
uname -a

Эти команды объединены в одном файле. Но shell должен знать, что он должен этот файл обработать, а не просто прочесть его содержимое. Для этого служит специальная конструкция: #!

Эта конструкция называется «sha-bang». Вообще-то, # задает комментарий, но в данном случает sha-bang означает, что после нее пойдет путь к обработчику скрипта. Напрмер:

#!/bin/bash
#!/bin/sh
#!/usr/bin/perl

Мы остановимся на Bash, Bourne-Again shell. Это shell устанавливается по умолчанию практически во всех Linux-системах, и /bin/sh ссылается на него. Об окончании скрипта говорит служебное слово exit.

Вооружившись этими знаниями, напишем наш первый скрипт:

#!/bin/bash
echo Простой скрипт # Команда echo выводит сообщение на экран
echo Вы:
whoami # whoami показывает имя зарегистрированного пользователя
echo Ваша система стартовала
uptime # uptime показывает время включения машины
echo Сегодня
date # date показывает текущую дату и время
echo Пока все
exit

Сохраним этот файл под именем tutor1.sh. Выполним команду chmod +rx tutor1.sh чтобы сделать скрипт исполняемым.

Результатом выполнения скрипта будет:

voland@superstar:~/Doc/Open Source$ ./tutor1.sh
Простой скрипт
Вы:
voland
Ваша система стартовала
14:38:46 up 1:48, 2 users, load average: 0.47, 0.43, 0.41
Сегодня
Вск Фев 26 14:38:46 MSK 2006
Пока все

Переходим к более серьезному.

Теперь, когда мы научились писать простейшие скрипты, самое время перейти к серьезным вещам: написанию скрипта для резервного копирования.

Перво-наперво, необходимо определить – резервную копию чего мы будем делать. Поэтому наш скрипт должен уметь работать с командной строкой. Аргументы командной строки задаются после имени скрипта через пробел: somescript arg1 arg2 arg3. Скрипт воспринимает аргументы по номерам их следования, поэтому мы будем использовать конструкции вида $номер_аргумента, т.е. , , . $ - это символ подстановки, который нам понадобится и при работе с переменными. Переменные в скрипте задаются в виде имя_переменной=значение. Мы будем использовать переменные MAXPARAMS для определения максимального количества параметров командной строки, BACKUPFILE для задания имени архива, BACKUPDIR для папки, резервную копию которой мы будем делать и ARCHIVEDIR для папки, куды мы поместим архив. Самой главной частью скрипта будут команды поиска и архивации всех найденных файлов и папок в указанной:

find . -type f -print0 | xargs -0 tar rvf "$archive.tar" > /dev/null
gzip $archive.tar

Давайте разберемся, что же эти команды делают. find ищет в текущем каталоге (об этом говорит первый аргумент ".") все файлы и выдает полный путь к ним (print0). Эти пути перенаправляюся команде tar, которая собирает все файлы в один. Затем командой gzip мы архивируем получившийся tar-файл. Команда > /dev/null удобна, если вы архивируете большое количество файлов. В этом случае их имена и полный путь к ним не выводятся на консоль.

Следующий шаг должен предусмотреть подсказки пользователю как пользоваться скриптом, если он допустит какие-то ошибки.

Например, эта конструкция

if [ $# -lt "$MAXPARAMS" ];
then
echo
echo "Использование: sh `basename {PAGE_TEXT}` имя_архива папка-источник папка-назначение"
echo
exit 0
fi

подскажет, что пользователь указал недостаточное количество аргументов командной строки. If [условие]...fi задает условную конструкцию. $# -lt "$MAXPARAMS" проверяет введенное количество параметров и если это число окажется меньше MAXPARAMS, то пользователю будет выдано сообщение об ошибочном вводе. Exit 0 заставит скрипт прекратить работу без указания кода ошибки. Аналогично проверяется превышение допустимого числа параметров, только вместо ls (less then – меньше, чем), необходимо указать gt (greater then – больше, чем). Теперь, когда основные моменты скрипта разъяснены, можно переходить к полной его версии:

#!/bin/bash
# Описание:
#+ Делает резервную копию всех файлов в указанной директории
#+ в "tarball" (архив tar.gz).
#+ Использование:
#+ sh backup.sh имя_архива папка-источник папка-назначение
#+ Автор:
#+ Александр "Voland" Теленьга

# Максимальное количество параметров командной строки
MAXPARAMS=3

if [ $# -lt "$MAXPARAMS" ];
then
echo
echo "Использование: sh `basename {PAGE_TEXT}` имя_архива папка-источник папка-назначение"
echo
exit 0
fi

if [ $# -gt "$MAXPARAMS" ];
then
echo
echo "Для этого скрипта нужно только $MAXPARAMS аргументов командной строки!"
echo
exit 0
fi

# Переменные, которые мы используем в скрипте
BACKUPFILE=-backup-$(date +%m-%d-%Y)
archive=$BACKUPFILE
BACKUPDIR=
ARCHIVEDIR=

#
(http://education.aspu.ru/page.php?id=79)
Название: Re: Написание скриптов
Отправлено: Zloy_T от 07 Май 2009, 00:31:10
правой мышью-создать-скрипт
Название: Re: Написание скриптов
Отправлено: yuracat от 07 Май 2009, 06:02:25
правой мышью-создать-скрипт

Тут для яснсоти: создаётся файл и у него устанвливается атрибут исполнения (+x) автоматически. Так что "эта процедура" chmod +x ни куда не делась, её делает другой скрипт. ;D

Можно и без атрибута этого запустить и без строчки bin/bash внутри:  ;)
#sh myfile
потому что sh примет myfle как фаил содержащий команды - тупо скрипт.
sh не есть особенная команда, можно и bash, csh и т.д. (basic  ;D).
Название: Re: Написание скриптов
Отправлено: returning2009 от 07 Май 2009, 09:45:22
засыпался на элементарном,написал в geany следующий скрипт:

#!/bin/bash

# echo привет влад
exit

но во первых,в geany эти строки сразу стали красными,а по цветовой схеме этого редактора,насколько я догадываюсь это цвет ошибки,сохранил этот скрипт как privet.sh,зашел в свойства файла и назначил его на выполнение,но он не запускается все равно,что я написал не так ... ???
Название: Re: Написание скриптов
Отправлено: DdShurick от 07 Май 2009, 09:55:44
В консоли
#!/bin/bash

echo "привет влад"
exit

В иксах

#!/bin/bash

xmessage "привет влад"
exit

У скрипта обязательно должны быть права на исполнение. Смотрите свойства.
Название: Re: Написание скриптов
Отправлено: returning2009 от 07 Май 2009, 10:24:52
в консоли ввожу whoami
выводит root
что нужно писать в geany чтоб это сообщение выводилось в иксах?
Название: Re: Написание скриптов
Отправлено: DdShurick от 07 Май 2009, 11:27:34
 xmessage `whoami`
Кавычки обратные, на клавише с буквой Ё.
Название: Re: Написание скриптов
Отправлено: returning2009 от 07 Май 2009, 19:30:56
написал следующий скрипт
#!/bin/bash
xmessage "сегодня:" `date` "Вы:" `whoami`
exit

выводит число дату,ну итд итп и кто я,но в одну строку,что написать чтоб число было в одну строку,а кто я, начиналось со следующей строки?
Название: Re: Написание скриптов
Отправлено: DdShurick от 07 Май 2009, 20:50:15
Код
#!/bin/sh
Xdialog --title "Ответ" --no-buttons --infobox \
"сегодня: `date` \nВы: `whoami`" 10 40 5000 #время показа окна в ms
exit
Название: Re: Написание скриптов
Отправлено: Zloy_T от 22 Май 2009, 09:01:04
Выделил тему   [Как скриптом заменить строку в файле?]  http://forum.puppyrus.org/index.php/topic,1832.0.html (http://forum.puppyrus.org/index.php/topic,1832.0.html)

кстати наткнулся на похожую тему http://forum.puppyrus.org/index.php/topic,284.0.html (http://forum.puppyrus.org/index.php/topic,284.0.html)
Название: Re: Написание скриптов
Отправлено: Zloy_T от 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” {} \;

как заставить это работать
Название: Re: Написание скриптов
Отправлено: DdShurick от 23 Май 2009, 10:06:45
Практикум давно создан Фарватером, но с его уходом "завял"
http://forum.puppyrus.org/index.php/topic,284.0.html
И ещё на wiki есть.
Название: Re: Написание скриптов
Отправлено: Zloy_T от 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
Название: Re: Написание скриптов
Отправлено: Zloy_T от 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

Проверяйте, ибо у меня этот значок все равно не работает
Название: Re: Написание скриптов
Отправлено: Pro от 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

Но строка справляется с задачей не полностью :(
Название: Re: Написание скриптов
Отправлено: alex от 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. Уплотнение производится
после преобразования или удаления.
Название: Re: Написание скриптов
Отправлено: Pro от 24 Май 2009, 15:14:04
как сделаешь отпишись (код) а то меня вчера злой тигра таким вопросом выспрашивал ;)

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

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

Цитата
Из всех опробованных мной версий программы tr ни одна адекватно не работала с символами кириллицы в кодировке UTF-8.
http://rus-linux.net/lib.php?name=MyLDP/consol/HuMan/tr-ru.html
Название: Re: Написание скриптов
Отправлено: Zloy_T от 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
Название: Re: Написание скриптов
Отправлено: Pro от 25 Май 2009, 03:17:36
Код
cat /root/.jwmrc-tray | sed 's/<TrayButton popup="Скрыть окна" icon="showdesk16.xpm">showdesktop<\/TrayButton>/showdesktop/' > /tmp/tmp-exec.txt

Нет так не пойдет :) я почти разобрался, главное отличие от винды это то что в ней "*" это множество любых символов а "?" это один любой символ а в регулярных выражениях "." это любой символ а множество любых символов это ".*"
Название: Re: Написание скриптов
Отправлено: Zloy_T от 25 Май 2009, 03:20:05
Нет так не пойдет :) я почти разобрался, главное отличие от винды это то что в ней "*" это множество любых символов а "?" это один любой символ а в регулярных выражениях "." это любой символ а множество любых символов это ".*"
когда разберешься, отпишись тут. Может и я тогда пойму.
Кстати почему не пойдет? нужно чтобы скрипт работал по шаблону штоль?
Название: Re: Написание скриптов
Отправлено: Zloy_T от 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
Название: Re: Написание скриптов
Отправлено: Pro от 25 Май 2009, 17:10:32
О да уже лучше но вот в конце надо убрать --> значек еще :) и будет совсем хорошо
Название: Re: Написание скриптов
Отправлено: Pro от 25 Май 2009, 17:27:35
Во блин, надо будет срочно править шаблоны, иначе скрипты будут неправильно работать
Вот этот коментарий тоже убирать надо будет!!!!
<!-- BK showdesktop incompatible with rox 2.5... -->
Название: Re: Написание скриптов
Отправлено: Zloy_T от 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
Название: Re: Написание скриптов
Отправлено: Zloy_T от 26 Май 2009, 01:41:01
однако, такой вариант хоть и убирает все что надо, он еще и убирает то, чего не надо. Я решил что достаточно закомментировать среднюю стоку.

UPD нашел более правильный ход

Код
cat ~/.jwmrc-tray | sed -e '/<Swallow name="asapm">/,/<\/Swallow>/d' > ~/jwmrctray.txt&&

удаляет три строки сразу. Восстанавливать можно например так: стереть конец файла, потом дописать построчно нужное
Название: Re: Написание скриптов
Отправлено: Zloy_T от 26 Май 2009, 18:34:23
Пример 12-10. Генератор 10-значных случайных чисел
#!/bin/bash
# rnd.sh: Генератор 10-значных случайных чисел

# Автор: Stephane Chazelas.

head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p'


# =================================================================== #

# Описание
# --------

# head:
# -c4 -- первые 4 байта.

# od:
# -N4 ограничивает вывод 4-мя байтами.
# -tu4 беззнаковый десятичный формат вывода.

# sed:
# -n, в комбинации с флагом "p", в команде "s",
# выводит только совпадающие с шаблоном строки.



# Автор сценария описывает действия 'sed' таким образом:

# head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p'
# ----------------------------------> |

# Передает вывод в "sed"    --------> |
# пусть это будет 0000000 1198195154\n

# sed начинает читать символы: 0000000 1198195154\n.
# Здесь он находит символ перевода строки,
# таким образом он получает строку (0000000 1198195154).
# Затем он просматривает <диапазон><действие>. Первый и единственный -- это

#   диапазон  действие
#   1         s/.* //p

# Номер строки попадает в заданный лиапазон, так что теперь он приступает к выполнению действия:
# пытается заменить наибольшую подстроку, заканчивающуюся пробелом
# ("0000000 ") "ничем" (//), и если замена произведена -- выводит результат
# ("p" -- это флаг команды "s", а не команда "p", которая имеет иное значение).

# теперь sed готов продолжить чтение входного потока. (Обратите внимание:
# если опустить ключ -n, то sed выведет строку еще раз)

# Теперь sed дочитывает остаток строки.
# Он готов приступить к анализу 2-й строки (которая отмечена '$'
# как последняя).
# Поскольку строка не попадает в заданный <диапазон>, на этом обработка прекращается.

# Проще говоря, команда sed означает:
# "В первой строке удалить любые символы, вплоть до последнего встреченного пробела,
# и затем вывести остаток."

# Сделать это можно более простым способом:
#           sed -e 's/.* //;q'

# Где, заданы два <диапазона><действия> (можно записать и по другому
#           sed -e 's/.* //' -e q):

#   диапазон                          действие
#   ничего (для совпадающих строк)    s/.* //
#   ничего (для совпадающих строк)    q (quit)

# Здесь sed считывает только первую строку.
# Выполняет оба действия, и выводит строку перед завершением
# (действие "q"), поскольку ключ "-n" опущен.

# =================================================================== #

# Простая альтернатива:
#           head -c4 /dev/urandom| od -An -tu4

exit 0
Название: Re: Написание скриптов
Отправлено: Zloy_T от 26 Май 2009, 18:54:53
в файле заменить все переносы строки на запятые

Код
sed -e :a -e '$!N;s/\n/,/;ta' myfile

Обьясняю. Обьявляется метка «a» в начале скрипта и скрипт «N;s/\n/,/» (взять следующую строку и заменить между ними перенос строки на запятую) выполняется для первой строки. "$!" означает, что брать следующую строку не нужно если мы уже на последней. «ta» — перейти на метку «a» если предыдущий s/// что-то заменил.

В итоге он будет брать по одной строке и удалять после неё перенос строки пока не прочитает последнюю.
Название: Re: Написание скриптов
Отправлено: Zloy_T от 28 Май 2009, 00:12:40
как составить регексп, чтобы при замене одной строки на другую следом дописывалась строка с неким заданным значением?
что-то вроде sed 's/regexp1/regexp2\nregexp3/g' не катит...
Название: Re: Написание скриптов
Отправлено: DdShurick от 28 Май 2009, 00:29:28
Код
# cat file | sed -e 's/маша/даша\
> строка заменена/'
даша
строка заменена#

Название: Re: Написание скриптов
Отправлено: Zloy_T от 28 Май 2009, 08:43:59
Вот спасибо!
теперь работает.
Кстати, знак > в
#> строка заменена/'   и не требуется, достаточно самой строки

вечером сооружу скрипт.

Название: Re: Написание скриптов
Отправлено: DdShurick от 28 Май 2009, 09:19:43
Кстати, знак > в
#> строка заменена/'   и не требуется, достаточно самой строки
А он сам появляется. Это предложение системы продолжить ввод.
Название: Re: Написание скриптов
Отправлено: Zloy_T от 29 Май 2009, 00:58:37
эээ не совсем понял, это если в терминале построчно набирать штоль? я то все загонял в скрипт.

Код
#! /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/<Swallow name="asapm">/<!-- <Swallow name="asapm"> -->/g' > ~/jwmrctray.txt&&cp ~/jwmrctray.txt ~/.jwmrc-tray&&cat ~/.jwmrc-tray | sed -e '/asapm -u 4/,/<\/Swallow>/d' > ~/jwmrctray.txt&&cp ~/jwmrctray.txt ~/.jwmrc-tray&& # сносит три строки  и перезаписывает файл




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

if [ "$retval" = "1" ]; then

cat ~/.jwmrc-tray | sed 's/<!-- <Swallow name="asapm"> -->/<Swallow name="asapm">\
asapm -u 4\
<\/Swallow>/g' > ~/jwmrctray.txt&&cp ~/jwmrctray.txt ~/.jwmrc-tray&&


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

if [ "$retval" = "255" ]; then
# при нажатии ESC выйти
exit 255
fi
Название: Re: Написание скриптов
Отправлено: bit777 от 22 Июнь 2009, 00:16:40
А зачем в в джинсе он и так есть . а если тебе нужно распаковать pet в папку могу предложить пакет
Название: Re: Написание скриптов
Отправлено: bit777 от 22 Июнь 2009, 00:23:54
А сделать иконку просто в каталоге \root\.config\rox.sourceforge.net\SendTo\.application_pet создаешь папку "распаковать PET" в нее помещаешь свой скрипт и обзываешь его AppRun рядом ложишь иконку или ссылку на нее и называешь ее .DirIcon. ВСЕ
Название: Re: Написание скриптов
Отправлено: Zloy_T от 22 Июнь 2009, 00:56:32
готово.
+1
Название: Re: Написание скриптов
Отправлено: returning2009 от 21 Август 2009, 22:09:45
боюсь что Тигра мне башню за дублирование постов снесет,но просто хочу задать вопрос,в своём топике,имеется в наличие программа ххх.jar известно чтоб её запустить нужно открыть консоль из папки где лежит этот файл и дать команду java-jar xxx.jar ,каков текст скрипта чтоб запустить эту программу ,спасибо.
Название: Re: Написание скриптов
Отправлено: bit777 от 21 Август 2009, 22:39:54
Попробуй так
Код
cd (путь к папке где лежит этот файл)
java-jar xxx.jar
Название: Re: Написание скриптов
Отправлено: Fliker09 от 21 Август 2009, 23:29:24
http://forum.puppyrus.org/index.php/topic,2523.msg24912.html#msg24912

ссылка при переносе темы побилась, поэтому должно быть так  http://forum.puppyrus.org/index.php/topic,2681.msg24912.html#msg24912