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

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

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

Оффлайн Zloy_T

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

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

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

удаляет три строки сразу. Восстанавливать можно например так: стереть конец файла, потом дописать построчно нужное
« Последнее редактирование: 26 Май 2009, 01:48:53 от Zloy_T »

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Re: Написание скриптов
« Ответ #31 : 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

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Re: Написание скриптов
« Ответ #32 : 26 Май 2009, 18:54:53 »
в файле заменить все переносы строки на запятые

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

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

В итоге он будет брать по одной строке и удалять после неё перенос строки пока не прочитает последнюю.

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Re: Написание скриптов
« Ответ #33 : 28 Май 2009, 00:12:40 »
как составить регексп, чтобы при замене одной строки на другую следом дописывалась строка с неким заданным значением?
что-то вроде sed 's/regexp1/regexp2\nregexp3/g' не катит...

DdShurick

  • Гость
Re: Написание скриптов
« Ответ #34 : 28 Май 2009, 00:29:28 »
Код
# cat file | sed -e 's/маша/даша\
> строка заменена/'
даша
строка заменена#


Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Re: Написание скриптов
« Ответ #35 : 28 Май 2009, 08:43:59 »
Вот спасибо!
теперь работает.
Кстати, знак > в
#> строка заменена/'   и не требуется, достаточно самой строки

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


DdShurick

  • Гость
Re: Написание скриптов
« Ответ #36 : 28 Май 2009, 09:19:43 »
Кстати, знак > в
#> строка заменена/'   и не требуется, достаточно самой строки
А он сам появляется. Это предложение системы продолжить ввод.

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Re: Написание скриптов
« Ответ #37 : 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
« Последнее редактирование: 29 Май 2009, 01:49:53 от Zloy_T »

Оффлайн bit777

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1037
  • Репутация: +127/-0
Re: Написание скриптов
« Ответ #38 : 22 Июнь 2009, 00:16:40 »
А зачем в в джинсе он и так есть . а если тебе нужно распаковать pet в папку могу предложить пакет

Оффлайн bit777

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1037
  • Репутация: +127/-0
Re: Написание скриптов
« Ответ #39 : 22 Июнь 2009, 00:23:54 »
А сделать иконку просто в каталоге \root\.config\rox.sourceforge.net\SendTo\.application_pet создаешь папку "распаковать PET" в нее помещаешь свой скрипт и обзываешь его AppRun рядом ложишь иконку или ссылку на нее и называешь ее .DirIcon. ВСЕ

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Re: Написание скриптов
« Ответ #40 : 22 Июнь 2009, 00:56:32 »
готово.
+1

Оффлайн returning2009

  • Старожил
  • ****
  • Сообщений: 386
  • Репутация: +19/-0
Re: Написание скриптов
« Ответ #41 : 21 Август 2009, 22:09:45 »
боюсь что Тигра мне башню за дублирование постов снесет,но просто хочу задать вопрос,в своём топике,имеется в наличие программа ххх.jar известно чтоб её запустить нужно открыть консоль из папки где лежит этот файл и дать команду java-jar xxx.jar ,каков текст скрипта чтоб запустить эту программу ,спасибо.

Оффлайн bit777

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1037
  • Репутация: +127/-0
Re: Написание скриптов
« Ответ #42 : 21 Август 2009, 22:39:54 »
Попробуй так
Код
cd (путь к папке где лежит этот файл)
java-jar xxx.jar

Оффлайн Fliker09

  • Почетный участник
  • Ветеран
  • *
  • Сообщений: 1624
  • Репутация: +120/-1
  • Puppy 4ever!
Re: Написание скриптов
« Ответ #43 : 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
« Последнее редактирование: 22 Август 2009, 02:27:46 от Zloy_T »
Я покинул проект так что прошу в случае чего писать мне на мыло!
Драйверы от разных систем НЕСОВМЕСТИМЫ!
http://wellminded.com/puppy/pupsearch.html -
 - поиск по http://www.murga-linux.com/puppy/
http://www.minus.com/ - для постоянного хранения файлов
http://rghost.ru/ - для временного хранения файлов
http://appdb.winehq.org/ - база данных WINE
http://jabberworld.info/ - всё о Jabber
http://convertfiles.com/ - конвертер файлов