Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MotoFan.Ru - все для моторола _ Motorola на Linux _ Написание скриптов #!/bin/sh for UNIX

Автор: Soshok 7.5.2009, 14:36

Привет.
Кто может мне помочь научится писать скрипты.
Может кто напишет мануал (хотя б в общих чертах)?
Оч прошу...
Зарание спасибо!

Автор: Chacha_Ivanov 7.5.2009, 16:53

Изучай на здоровье biggrin.gif


Прикрепленный файл abs_guide.rar   ( 549.39 килобайт ) Кол-во скачиваний: 552

Автор: Soshok 7.5.2009, 21:18

Chacha_Ivanov,
чего так много??? laugh.gif unsure.gif

Добавлено позже (8.5.2009, 1:26):
Chacha_Ivanov,
знаешь, я так глянул, оч много и сложно.
А попроще нету? shuffle.gif

Автор: SergGG 8.5.2009, 8:57

Цитата(Soshok @ 8.5.2009, 0:18) *

Chacha_Ivanov,
чего так много??? laugh.gif unsure.gif

Добавлено позже (8.5.2009, 1:26):
Chacha_Ivanov,
знаешь, я так глянул, оч много и сложно.
А попроще нету? shuffle.gif

http://forum.motofan.ru/index.php?s=&showtopic=145437&view=findpost&p=878499

Начинайте читать с фразы "Работа с скриптами автозапуска". Остальное в принципе тоже можно, но скорее для общего развития, все-же платформы у А1200 и У9 сильно отличаются.

А потом здесь прочитайте http://forum.motofan.ru/index.php?s=&showtopic=145437&view=findpost&p=1109371

Автор: SanchoNT 11.5.2009, 0:19

может кто-нибудь знает какой командой или каким скриптом можно развернуть из фона свёрнутое ява приложение?

Автор: Virgilij 16.5.2009, 22:39

SanchoNT, реально, глянь в тему http://forum.motofan.ru/index.php?showtopic=146648 там есть скрипт, называется JavaMan, почитай о нём, может сможешь переложить на свою платформу (она у нас в принципе одинаковая)...

Автор: RipZ 21.5.2009, 8:18

Цитата(SergGG @ 21.5.2009, 11:43) *

Я так думаю, что автор темы будет бесконечно счастлив, елси Вы предоставите есму мануал по скриптам, содержащий больше полезной информации и написанный доступным языком для начинающего.
Заодно и неплохо выделитесь как настоящий ковырятель.


гугл отменили?

http://www.linuxsoft.ru/info/lib/lib/HowTo/bash/
для начала это. если ненравится - снова в гугл.

Автор: Chacha_Ivanov 21.5.2009, 12:12

Цитата(SanchoNT @ 11.5.2009, 4:19)

может кто-нибудь знает какой командой или каким скриптом можно развернуть из фона свёрнутое ява приложение?
*


Вот http://forum.motofan.ru/index.php?showuser=49304 написал для em30/e8 программульку небольшую. Проверь, может заработает. Работает только в консоли, поэтому для нее нужно написать небольшой скрипт, который будет ей отдавать PID нужного процесса (ява, браузер, без разницы короче), и выводить его на экран. То есть получится мини таск-менеджер)
Прикрепленный файл zTaskManMini.rar   ( 4.26 килобайт ) Кол-во скачиваний: 141

Автор: SanchoNT 21.5.2009, 13:03

скачал, закинул на карту памяти, законнектился через PuTTY, пишу там /mmc/mmca1/zTaskManMini
и вот что получаю в ответ /mmc/mmca1/zTaskManMini: error while loading shared libraries: libvkm.so: cannot open shared object file: No such file or directory
на сколько я понимаю нужна либа libvkm.so
кто-нибудь может её выложить ? и куда её потом закинуть, в папку с zTaskManMini ?

Автор: SanchoNT 21.5.2009, 13:49

ну вобщем ничего не помогает, потом открыл zTaskManMini в hex редакторе, нашёл то место где написано про этот libvkm.so и вбил туда нулей, сохранил и попытался запустить его в телефоне и о чудо ! оно заработало !! запустил игру, набрал ps чтобы посмотреть pid, вбиваю /mmc/mmca1/zTaskManMiniE 522
и у меня разворачивается игра ! :D сейчас буду тестировать дальше, тут как раз ещё скрипт был куда это можно попробовать прикрутить, вобщем это просто божественно !

Такой крутой способ должен подойти для всех MOTOMAGX телефонов!
Просто возможно придется забить с десяток ненужных либ


Автор: Programmer-tm(Мотофан.) 12.6.2011, 11:46

А по скрипту кто нить сможет помочь?
Нужна команда, которая удалит первый символ из названия файла.

Название файла пишется в переменную VINF (VINF=1234.567)
Такая конструкция: ${VINF:1} работать отказалась.

Вопрос решён.

Автор: VINRARUS 17.6.2011, 17:56

Ура! В теме появилася шапочка. watsup.gif
В даной теме помогаем друг другу в написании шелл скриптов, и дружно решаем проблемы связанные с ними smile.gif

Вот мои рукописные мануалы для совсем новичков:
http://forum.motofan.ru/index.php?s=&showtopic=162200&view=findpost&p=1601792
http://forum.motofan.ru/index.php?s=&showtopic=162200&view=findpost&p=1603328

http://www.linuxsoft.ru/info/lib/lib/HowTo/bash/ -_- Эх интернет, интернет, че ж ты такой склерозный?
http://www.opennet.ru/docs/RUS/bash_scripting_guide/
http://forum.motofan.ru/index.php?s=&showtopic=162200&view=findpost&p=1322029
http://forum.motofan.ru/index.php?s=&showtopic=162200&view=findpost&p=1612590

http://www.ant0.ru/sed1line.html и http://help.andys.ru/sed.html и http://rus-linux.net/lib.php?name=MyLDP/consol/HuMan/sed-ru.html
http://rus-linux.net/MyLDP/consol/awk.html и http://info-linux.ru/article/135
http://forum.motofan.ru/index.php?s=&showtopic=162200&view=findpost&p=1723083 http://rus-linux.net/lib.php?name=/MyLDP/consol/shellpatterns.html

Где быстро найти инфу?
http://www.opennet.ru/man.shtml
https://ru.wikipedia.org/w/index.php?title=GNU_Coreutils

ПС

1. Не во всех UNIX\LINUX системах можно сразу в терминале вводить команды утилит.
Например в MOTOMAGX часто перед командой утилиты нужно вводить "busybox" (например busybox free) хотя это и решено на некоторых модах.
А в некоторых выкидышах типа Android они и вовсе отсутствуют как и сам busybox, но есть возможность добавить его самому.

2. Не всегда утилиты поддерживают то что написано в манах к ним, иногда функционал меняется от версии к версии.

3. Также нужно знать что код от bash иногда может не работать корректно на shell (sh), хотя и очень редко.
Это из за того что древним программистам делать было нечего, когда не было еще интернета, и они понапридумывали http://rus-linux.net/lib.php?name=MyLDP/consol/13-types-of-shell.html.
Хорошо хоть код под чистый shell подойдет ко всем им, из за чего он считается эталоном. smile.gif
А не bash как считают юные линуксойды.
[close]

Автор: DaNTaLiaN™ 17.6.2011, 19:42

Пытался написать по подобию скрипт для zpk архива и что-то у меня не получается... в чем ошибка?

Цитата
#!/bin/sh

mypath=${0%/*}

showQ "ver2" "Установить" 1
if [ $? != 0 ]
then
mkdir /mmc/movinand1/mpkgbox
cp $mypath/mpkgbox/* /mmc/movinand1/mpkgbox
fi

else
if [ $? != 0 ]
then
showQ "ver2" "Удалить" 1
rm -rf /ezxlocal/zmodstuff/zpk/ver2
rm -rf /mmc/movinand1/mpkgbox
fi
;;
*)


VINRARUS, время в любом случае не будет потрачено в пустую

Автор: VINRARUS 17.6.2011, 20:01

DaNTaLiaN™, есть серьезные но простые ошыбки, вот вроде правильно.

Код
#!/bin/sh

mypath=${0%/*}

showQ "ver2" "Установить?" 1
if [ $? != 0 ]
then
mkdir /mmc/movinand1/mpkgbox
cp $mypath/mpkgbox/* /mmc/movinand1/mpkgbox

else

showQ "ver2" "Удалить?" 1
if [ $? != 0 ]
then
rm -rf /ezxlocal/zmodstuff/zpk/ver2
rm -rf /mmc/movinand1/mpkgbox
fi
fi


Количество if всегда должно соответствовать количеству fi clapping.gif


Знач завтра займусь началом мануала. smile.gif

Автор: VINRARUS 18.6.2011, 18:40

wizard.gif Знач начну с основ.

Shell скрипт (SH) - это обычный текстовый файлик с кодировкой UTF в котором в основном английскими буквами и специальными символами написаны команды (хотя например какие то параметры могут содержать кириллицу и иероглифы), которые потом может выполнять система, а точнее программка по пути /bin/sh (у меня это символическая ссылка на /bin/busybox)
Shell скрипт выполняет те самые команды что и терминал или телнет, и синтаксис почти однаковый, просто в терминале есть возможность работать в режиме реального времени и задавать команды напряму во время работы некоторых программ, а в скриптах все параметры задаются заранее, и изменять их во время работы скрипта нельзя потому что Shell скрипты не имеют графической оболочки, но для этой цели были созданы шоумодули для линукс-моторов!
Для запуска скрипта есть 2 способа:
1) просто прописать путь к скрипту

Код
/mmc/mmca1/skriptik.sh

и при такой команде скрипт выполнится при 2х условиях:
1.Права файла-скрипта должны разрешать запуск исполняемого файла (например 775 или 777)
2.В начале скрипта должна присутствовать точно такая первая строчка:
Код
#!/bin/sh

Хотя из терминала можна запускать и без этой строчки, но zLauncher например не понимает чем его запустить, поэтому лучше ее прописать.
2) перед путьом к скрипту прописать путь к программке которая будет исполнять его, то есть /bin/sh
Код
/bin/sh /mmc/mmca1/skriptik.sh

И в таком случае не нужны ни права на запуск, ни #!/bin/sh, хотя они и не помешают

По поводу расширения в названии файла например "skriptik.sh":
Расширение для линукс-системы не важно, например если попытаться запустить скрипт с названием "skriptik.jpg", то никаких проблем не будет, так само можна назвать вообще без расширения "skriptik", но расширение важно только для ассоциаций, например в стандартном ФМ, ну и для визуального ориентирования.

spartak.gif Вот основные правила синтаксиса: Пока все, потом еще буду писать. fan_1.gif

Автор: Programmer-tm(Мотофан.) 19.6.2011, 11:24

Цитата(VINRARUS @ 19.6.2011, 14:07) *

Будет кому полезен мануал такого плана? wink.gif

Конечно. Сам собираюсь писать на shell уже пару простеньких программок собрал...

Еще бы для новичка не плохо написать какие есть выводы Show модулей и как их задействовать.

Автор: igoripp 19.6.2011, 12:39

#!/bin/sh

showQ "Очистити базу?" "По завершенні процесу телефон буде перезавантежено і база даних автоматично обновиться!" 1
[ $? -ne 1 ] && exit
rm /mmc/mmca1/.sd_dbmss
rm /mmc/mmca1/.thumbindex
rm /mmc/mmca1/.thumbinal
rm /mmc/mmca1/.udstate
rm /mmc/movinand1/.udstate
rm /mmc/movinand1/.thumbindex
rm /mmc/movinand1/.sd_dbmss
rm /mmc/movinand1/.thumbina
nice -n -20 mot_reboot
Почему у меня такое не работает? Ничего не происходит.

Автор: VINRARUS 19.6.2011, 12:45

Код
#!/bin/sh

showQ "Очистити базу?" "По завершенні процесу телефон буде перезавантежено і база даних автоматично обновиться!" 1
if [ $? -ne 1 ]
then
exit
fi
rm /mmc/mmca1/.sd_dbmss
rm /mmc/mmca1/.thumbindex
rm /mmc/mmca1/.thumbinal
rm /mmc/mmca1/.udstate
rm /mmc/movinand1/.udstate
rm /mmc/movinand1/.thumbindex
rm /mmc/movinand1/.sd_dbmss
rm /mmc/movinand1/.thumbina
nice -n -20 mot_reboot


Автор: Osta 19.6.2011, 17:08

Цитата(VINRARUS @ Сегодня, 14:07)
* Будет кому полезен мануал такого плана?
мне тоже нужно, хотя и не для телефона, пиши обязательно!
интересуют ещё такие строки что в них описывается
until [ `cat /tmp/resolv.conf | grep -c nameserver` -gt 0 ]


Автор: VINRARUS 27.6.2011, 15:52

Продолжу с команд для if smile.gif


Дальше описаны какие еще опции могут быть заключены в квадратные скобки.
Рассмотрим уже знакомую строчку:

Код
if [ "$GRIB" = "1" ]

С опцией "=" (идентичные значения по обе стороны "=") мы уже познакомились, она обрабатывает равные ли заданные значения, и не важно буквы там или цифры, так сказать проверяет идентичны ли 2 набора символов.
Существует способ легко изменить опцию на противоположную, поставив перед ней знак "!" (звучит как НЕ)
Например строчка:
Код
if [ "$GRIB" != "1" ]

уже проверяет наоборот разные ли значения по обе стороны знаков "!=".
Ну это незаменимо для использования с "elif", ну и для "if" тоже нужно (хотя для "if" для этой цели можно использовать "else").
clapping.gif Только нужно обязательно запомнить что символ "!" с символом "=" ВСЕГДА пишется слитно без пробелов между ими, а вот с другими опциями через ОДИН ПРОБЕЛ

rabby.gif Вот список всех опций:

Сравнение целых чисел:

-gt больше чем
-lt меньше чем
-ge больше чем либо равно
-le меньше чем либо равно
-eq равно
-ne не равно

Сравнение строк:

-z проверка на наличие пустой строки
-n проверка на наличие строки-значения
= равенство
!= неравенство
str проверка на наличие строки,состоящей из нулей

Логические операции:

-a И
-o ИЛИ
! НЕ

Проверка файлов:

-f установка факта существования файла и его регулярности
-s проверка,не является-ли файл пустым
-r проверка возможности считывания файла
-w проверка возможности записи файла
-x проверка исполняемости файла
-d проверка,является-ли файл каталогом
-h проверка,является-ли файл ссылкой
-c проверка,является-ли файл байт-ориентированным устройством
-d проверка,является-ли файл блок-ориентированным устройством

Примеры:

Код
if [ -f /mmc/mmca1/muzica/trecklist.txt ]
then
echo YES
fi

Проверяет существует ли файл по этому пути, если нет или если это каталог, то ничего не делать.
Нужно заметить что если в пути к файлу\папке есть пробелы, то нужно путь брать в кавычки, иначе скрипт перестанет работать на этом условии.

Код
if [ 2 -lt 4 -a 8 != GR ]
then
echo URAA
fi

Проверяет меньше ли "2" за "4", и не идентичные ли значения "8" и "GR", и в случае если оба условия верны выполняется команда "echo URAA" (которая работает только в телнете или терминале и выводит слово "URAA")

Код
if [ ! -z "$GG" ]
then
echo aga
fi

Проверяет пустая ли переменная "$GG", если нет то выполняет "echo aga".
Также для этого действия можно написать такое условие:
Код
if [ "$GG" != "" ]
then
echo aga
fi




clapping.gif
И обязательно в условиях переменную нужно брать в двойные скобки (как и все слова с пробелами), потому что если в переменной будет пробел, а условие очень чувствительно к пробелам, то скрипт потерпит крах при выполнении!
Хотя если точно известно что значение переменной без пробелов и что она не пустая, то можно и без кавычек (хотя лучше перестраховаться)


Ну и нужно быть внимательным чтобы после "[" и перед "]" ОБЯЗАТЕЛЬНО стояли пробелы, иначе если вместо пробелов будет стоять другой символ, то скрипт на этом условии завершится с ошибкой!

Автор: VINRARUS 27.6.2011, 22:19

Цитата(Osta @ 19.6.2011, 20:08)
* интересуют ещё такие строки что в них описывается
until [ `cat /tmp/resolv.conf | grep -c nameserver` -gt 0 ]


В начале выполняется команда "cat /tmp/resolv.conf | grep -c nameserver" - читается файл /tmp/resolv.conf и потом этот текст обрабатывается через grep, который в даном примере выдает число строк в которых есть слово "nameserver".
Потом проверяется больше ли полученное число за 0, то есть есть ли ли хоть одно слово "nameserver" в файле /tmp/resolv.conf.

Ну и для команды "until" выводится результат условия (0 или 1)
Ну нашол что "until" это из цыкла, который выполняется если условие ложно, в данном примере цыкл повторяется пока слово "nameserver" в файле /tmp/resolv.conf будет отсутствовать.

Автор: igoripp 4.7.2011, 10:25

Недавно делал калькулятор скриптовой. а сейчас не получается(
#!/bin/bash
x=$(showTextEntry "меню" "введите число1:" "")
y=$(showTextEntry "меню" "введите число2:" "")
z=$((x + y))
showQ "отчет" "сумма двух чисел равна $z"

Почему это не работает???

если переменные x и y объявить в программе:
x=5
y=6
то, все прекрасно работает, в чем проблема?

Автор: Programmer-tm(Мотофан.) 4.7.2011, 10:44

igoripp,
а файлик showTextEntry присутствует?

Автор: igoripp 4.7.2011, 10:51

Programmer-tm(Мотофан.), да.

Добавлено позже (4.7.2011, 14:56):
#!/bin/bash
x=$(showTextEntry "меню" "введите число1:" "")
showQ "отчет" "сумма двух чисел равна $x" ""
Если так, то получается какое то непонятное сообщение, где много всего, а самая последняя строка - значение моей переменной

Автор: Programmer-tm(Мотофан.) 4.7.2011, 11:08

Цитата

Добавлено позже (4.7.2011, 14:56):
#!/bin/bash
x=$(showTextEntry "меню" "введите число1:" "")
showQ "отчет" "сумма двух чисел равна $x" ""
Если так, то получается какое то непонятное сообщение, где много всего, а самая последняя строка - значение моей переменной


x="`$mypath/showTextEntry 'Menu' 'Input 1'`"

так то же может верно отработать:
x=`$mypath/showTextEntry 'Menu' 'Input 1'`

Автор: igoripp 4.7.2011, 12:25

Цитата

x="`$mypath/showTextEntry 'Menu' 'Input 1'`"

так то же может верно отработать:
x=`$mypath/showTextEntry 'Menu' 'Input 1'`

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

Автор: Programmer-tm(Мотофан.) 4.7.2011, 13:13

igoripp,
Просто шоу модуль найди такой

Автор: VINRARUS 4.7.2011, 17:22

Цитата(igoripp @ Сегодня, 13:25)
* #!/bin/bash
x=$(showTextEntry "меню" "введите число1:" "")
y=$(showTextEntry "меню" "введите число2:" "")
z=$((x + y))
showQ "отчет" "сумма двух чисел равна $z"

А ну так попробуй:
Код
#!/bin/sh
x=`showTextEntry "меню" "введите число1:" ""`
y=`showTextEntry "меню" "введите число2:" ""`
let z=$x + $y
showQ "отчет" "сумма двух чисел равна $z"

Это на "sh", а с "bash" я не связывался. smile.gif

Автор: igoripp 4.7.2011, 17:30

VINRARUS, Проблема решилась перепрошивкой телефона, на zMod. Здесь все нормально запустилось. Видать, в монстре E8_silence-7, не работает корректно showTextEntry.

Автор: K()t 7.7.2011, 8:33

Кто поможет написать команду чтобы она искала в файле текст GroupID = ezx и меняла его на GroupID = root

Автор: VINRARUS 9.7.2011, 20:40

Цитата(K()t @ 7.7.2011, 11:33)
* Кто поможет написать команду чтобы она искала в файле текст GroupID = ezx и меняла его на GroupID = root

Както так, пробуй, не знаю будет ли работатъ как нада, но ход мысли вроде правельный, проверить у меня нету возможности. sad.gif

Код
#!/bin/sh
FU=/mmc/mmca1/zzz
MU=`sed -e '/^GroupID = ezx/!d;=' -e '/^GroupID = ezx/d' $FU`
for OLOLO in $MU
do
echo $OLOLO
sed "$OLOLO"c'GroupID = root' $FU > $FU
done


Автор: Pyth_ON! 10.7.2011, 6:47

Цитата(K()t @ 7.7.2011, 8:33) *

Кто поможет написать команду чтобы она искала в файле текст GroupID = ezx и меняла его на GroupID = root

Ну, первое что придумал:
Код

#!/bin/sh
cat $1 | sed 's/^GroupID = ezx/GroupID = root/g' > $1.tmp
rm $1; mv $1.tmp $1

Говнокод, но должен работать smile.gif
Записать этот код в файл и запускать как:
Код
script.sh /path/to/file

где /path/to/file - файл, в котором нужно выполнить замену.
Вообще если ты хочешь встроить это в свой скрипт то выложи скрипт, помогу smile.gif

Автор: VINRARUS 10.7.2011, 8:48

Pyth_ON!,
а и правда, все решается банальной заменой!
Как я мог о ней забыть! sad.gif

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

Вот токо я б посоветовал все параметры для замены всегда писатъ с символом начала строки "^", ну мало ли, может ктото так с дуру прогу назвет. smile.gif

А вот так грамотно это делать:

Код
sed -i '/^GroupID = ezx/GroupID = root/g' $1

Автор: Pyth_ON! 10.7.2011, 13:57

VINRARUS, Спасибо за дополнение smile.gif

Автор: Osta 10.7.2011, 17:41

уважаемые, помогите перенести скрипт с явы

Код



<script type='text/javascript'>
var d2 = new Date();
var day2 =   TwoDigits(d2.getDate());
var month2 = TwoDigits(d2.getMonth()+1);
var year2 =  d2.getFullYear();
document.write("Новости за <b>сегодня</b> "+day2+"."+month2+"."+year2);
var MODAY = "http://www.vedomosti.ru/podcast/files/"+year2+"/"+month2+"/"+day2+"/vedomosti.mp3";


function TwoDigits(s){
if(s<10){s = '0'+s;}else{s = ''+s;} return(s)
}

</script>




скрипт формирует ссылку в зависимости от сегодняшней даты
к примеру сегодня 15 07 2011
ссылка должна быть
_http://www.vedomosti.ru/podcast/files/2011/07/15/vedomosti.mp3
год - всегда 4 цифры, месяц - всегда две цифры, дата - всегда 2 цифры

Автор: VINRARUS 10.7.2011, 19:04

Osta, вот ето подставляет в ссылку севодняшную дату. smile.gif

Код
URL="http://www.vedomosti.ru/ podcast/files/`date +%Y/%m/%d`/ vedomosti.mp3"

Автор: igoripp 11.7.2011, 18:56

Помогите создать скрипт, который, через 120 секунд после включения копировал бы один файл в заданную папку. Файл zCpuOver.txt в /mmc/movinand1/Uknow/

EXL: В meldl.conf добавь:

Код

sleep 120
cp zCpuOver.txt /mmc/movinand1/Uknow/zCpuOver.txt

Вот только не знаю, будет ли такой способ работать.

Автор: mPhoneR 12.7.2011, 5:03

А может, лучше как-то так?

Код
(sleep 120; /путь/к/скрипту/zCpuOver.txt)&

Автор: Osta 12.7.2011, 5:47

а есть какие-то готовые парсеры с башорга или иного?

Автор: Pyth_ON! 13.7.2011, 4:58

Цитата(Osta @ 12.7.2011, 5:47) *

а есть какие-то готовые парсеры с башорга или иного?

Концепт на php: http://rfteam.110mb.com/shao/4.php
Код на php: http://forum.max-3000.com/viewtopic.php?f=12&t=2672&start=0
Еще php: http://paste.org.ru/?eacrbj

Автор: Osta 13.7.2011, 13:17

а не на php парсеры есть ?

Автор: Pyth_ON! 13.7.2011, 16:08

Цитата(Osta @ 13.7.2011, 13:17) *

а не на php парсеры есть ?

Могу собрать минимальный бинарик php... smile.gif
А так можно переписать с использованием sed и grep...

Автор: Osta 13.7.2011, 16:55

Цитата(Pyth_ON! @ Сегодня, 19:08)
* можно переписать с использованием sed и grep

и кто бы показал Так Было - Так Стало )? интересует случайная цитата башорга

Автор: VINRARUS 18.7.2011, 11:06

Вот нашол способ быстрее считывать параметры с конфигов! Правда поздновато я ето надумал, но в сеже может комуто пригодиться. wink.gif
Так ето делалося:

Код
ET=`sed -n -e '/^swapT = /p' $CFGPATH | awk '{print $3}'`

А вот мой вариант:
Код
ET=`sed -e '/^swapT = /!d' -e 's/^swapT = //' $CFGPATH`


Вот напишу принцып работы для тех кому ето интересно. smile.gif Преимущества 2го варианта в скорости выполнения. Путем отсутствия конвеера (конвеер-ето строчка с набором разных команд которые выполняються по очереди и раздиляються отакой палкой "|"). И если раньше одна програма искала строчку с параметром, а вторая удаляла название параметра, то щас только одна програма ето делает, по етому затраченое время на нее меньше.
Ну канечно если скрипт читает 1-2 параметра, то прироста от скорости не густо, но если их например 20 шт, то и разница будет гдето секунд 5-7.
Например так можно ускорить загрузку всего мода минимум на 5 сек.

Автор: igoripp 19.7.2011, 16:48

Знающие люди, подскажите. sh поддерживается всеми системами UNIX. Если применять bash, то он 100 процентов подойдет для использования на телефоне е8? Файл bash у нас есть по адресу /bin/bash, но слышал что bash постоянно обновляется, И отсюда этот вопрос. Или считаете, что лучше не выпендриваться и знать sh?

Автор: VINRARUS 19.7.2011, 18:29

Я за sh, так как он поддерживаеться гарантировано везде где наследил линукс.
Ну и он проще и понятнее за bash.

Автор: Osta 26.7.2011, 12:34

Код
Name=`date +%H:%M@%d%a-`


как правильно прописать, чтобы вместо @ был пробел ?

Автор: VINRARUS 26.7.2011, 14:23

Разделив 1 команду на 2:

Код
Name="`date +%H:%M` `date +%d%a-`"

или взяв в лапки:
Код
Name=`date '+%H:%M %d%a-'`

Автор: Osta 26.7.2011, 16:05

VINRARUS, спасибо, работает !

А можно это переложить на sh ?

Spoiler:


_http://bash.org.ru/random - по этой ссылке уже выдаются случайные цитаты, что для нас очень удобно! Пишем такой код:

Код
$borgs=file_get_contents( "http://bash.org.ru/random" );
preg_match( '/<div>(.*?)<\/div>/is', $borgs, $borg );
$simchm2 = array("<br />", "<br>");
$borg=str_replace($simchm2,"\n", $borg);
$borg=htmlspecialchars_decode ($borg[1]);
echo($borg);


Это рабочий код -, мы украли цитату smile.gif Теперь давайте разбирать всё по очереди wink.gif "$borgs=file_get_contents( "http://bash.org.ru/random" );" - мы выкачиваем исходный код страницы и записываем его в переменную. После этого мы режем первый попавшийся код на этой странице, который находится в скобках заданных нами "preg_match( '/<div>(.*?)<\/div>/is', $borgs, $borg );"
"$simchm2 = array("<br />", "<br>");" - здесь мы делаем массив, где режем html-теги (массив для того, чтобы не писать одну и ту же строку много раз...)
Далее нам нужно заменить html-теги на нужный нам формат (который работает в аське/блокноте и т. д.) "$borg=str_replace($simchm2,"\n", $borg);" - этой строкой мы и заменяем... После чего заменяем html-пробелы, двоеточия и т. д. на нормальный человеческий вид (если Вам по аське придёт html-тег, вы навряд ли поймёте, что это: запятая или пробел... =) ) В php уже за нас сделали удобную функцию, котороя это делает: "$borg=htmlspecialchars_decode ($borg[1]);" "$borg[1]" - потому что у нас в массиве есть 2 вида, один не полностью обрезан, второй обрезан...
Ну и естественно, нам надо вывести то, что получили, посмотреть - как да что =) : "echo($borg);" Всё =) Да, и ещё: если Вы будете выводить на сайте (через браузер), то Вам хватит:

Код
$borgs=file_get_contents( "http://bash.org.ru/random" );
preg_match( '/
(.*?)<\/div>/is', $borgs, $borg ); echo($borg);


Поздравляю, у нас есть случайная цитата с http://bash.org.ru!

[close]

Автор: VINRARUS 26.7.2011, 17:55

Тут очень глубокие знания нада, да еще и не только в sh.

Автор: Osta 26.7.2011, 19:43

смотри : скачиваем файл http://bash.org.ru/random,
открываем его на редактирование , удаляем всё что ДО слова утверждена включительно ,
удаляем всё , что ПОСЛЕ слов <hr class="iq"> включительно

Так можно сделать?

Автор: VINRARUS 27.7.2011, 5:41

я не знаю как на sh качать файлы с нета.
А без скачивания нильзя?

EXL:

Код
wget http://bash.org.ru/random  

И пишешь парсер html кода. Всё это есть в интернете

Автор: igoripp 27.7.2011, 9:47

А кто подскажет как провернуть одно дело? Есть файл log.txt, в нем последовательность строк, состоящих из одного символа. Мне надо, чтоб в файл gol.txt поместилась одна строка из этих символов, без каких-либо разделительных символов)

Автор: IlluminatI 27.7.2011, 12:15

igoripp, на Си где-то был исходник, могу впринципе собрать, на sh увы, не знаю...

Автор: VINRARUS 27.7.2011, 12:40

igoripp, ето выдаст все в 1 строчку
tr -d "\n"

Автор: Osta 27.7.2011, 12:44

Цитата(VINRARUS @ Сегодня, 8:41)
* А без скачивания нильзя?

напиши как будто он тут /var/etc/file.html

Автор: igoripp 27.7.2011, 13:18

VINRARUS, a как этим пользоваться? Конструкция вида: tr -d "\n" gol.txt>>ink.txt нем работает(

Автор: VINRARUS 27.7.2011, 13:51

cat 1.txt | tr -d "\n" > 2.txt
отак.

Автор: igoripp 27.7.2011, 14:58

Так тоже не работает( вопрос по-прежнему открыт...

Автор: VINRARUS 27.7.2011, 15:56

igoripp,
у меня работает.
Надеюся ты вместо 1.ТХТ и 2 поставил полные пути к файлам.
Попробуй так.
busybox cat 1.txt | busybox tr -d "\n" > 2.txt

Автор: igoripp 28.7.2011, 5:53

VINRARUS, Спасибо огромное clapping.gif Такая связка заработала:

Код
busybox cat 1.txt | busybox tr -d "\n" > 2.txt

Автор: VINRARUS 28.7.2011, 11:43

Osta, вот етот код ищет в файле строчку с словами 'утверждена' и '<hr class="iq">', и пишет в файл то что между етими словами.
Если вдруг между етими словами есть переносы строк, то оно будет работать неправильно. В таком случае напишы, я допилю.

#!/bin/sh
QT=`cat /
var/etc/file.html`
echo "go))"
echo "$QT" | sed -e '/<hr class="iq">/!d' -e 's/.*утверждена//' -e 's/<hr class="iq">.*//' > /tmp/V.txt
echo end!

Автор: Osta 28.7.2011, 13:42

tmp/V.txt стабильно равен 0 байт , переносы по-любому есть (

Автор: VINRARUS 28.7.2011, 18:29

вот:
#!/bin/sh
QT=`cat /var/etc/file.html`
echo "go))"
echo "$QT" | tr '\n' 'ӕ' | sed -e '/<hr class="iq">/!d' -e 's/.*утверждена//' -e 's/<hr class="iq">.*//' | tr 'ӕ' '\n' > /tmp/V.txt
echo end!


Добавлено позже (28.7.2011, 21:32):
у меня работает.

Автор: Osta 28.7.2011, 18:38

ӕ - а что это за символ? у меня akelpad утверждает, что он утеряется при сохранении и V.txt пустой опять

Автор: VINRARUS 28.7.2011, 21:15

ну ето символ который никто не использует.
Мож попробовать заменить на один из етих:
♀♂♪♫њӕљ¼½¾❄✈✉

Автор: Osta 28.7.2011, 21:27

заменил на ^
тхт файл пуст

Автор: VINRARUS 29.7.2011, 4:57

Osta,
выложы сюда сюда тот файл который прога должна зчитывать.

Автор: Osta 29.7.2011, 10:20

Цитата(VINRARUS @ 29.7.2011, 7:57) *

Osta,
выложы сюда сюда тот файл который прога должна зчитывать.

вот такой он скачивается
Прикрепленный файл 2index.rar   ( 11.82 килобайт ) Кол-во скачиваний: 32

Автор: VINRARUS 29.7.2011, 16:07

Osta,
чото тот файл не в юникоде, у меня там иногда квадратики.
Фильтром проверил, <hr class="iq"> есть, а слова утверждена нету, наверно изза того что там не юникод.
Но скрипт у меня кусок файла отгрыз и сохранил в 2,5 кб. В принцыпе работает так как ему указали.

Автор: Osta 29.7.2011, 16:31

можно сделать от первого слова sux до первого слова class="iq" без использования спецсимволов?

Автор: VINRARUS 29.7.2011, 19:15

нужно уникальное первое слово или сочетание символов. Чтобы не повтоарялося в коде больше нигде, ато указанное тобой слово повторяеться раз 40.
А если за ним будут ненужные слова, их можна отсеять потом.

Автор: igoripp 10.8.2011, 19:49

Этот код для перевода десятичного числа в двоичное, восьмеричное и шестнадцатеричное. Помогите написать код для перевода bin, oct и hex в dec.

Код
#!/bin/sh
mypath=${0%/*}
cd $mypath
#########################################################Получаем значение десятичного числа#######################
d=$(showTextEntry "Введите число:" "" "")
#########################################################Если ввели 0, выводим сразу же ответ#######################
if [ $d -eq 0 ]
then
p="bin=0 oct=0 hex=0"

else
#########################################################Дублируем полученное число 4 раза#######################
m=$d
w=$d
t=$d
k=$d

#########################################################bin####################
###
>def.txt
until [ $d -eq 0 ]
do
e=$(( $d % 2 ))
echo $e>>def.txt
d=$(( $d / 2 ))
done

#########################################################oct####################
###
>mno.txt
until [ $m -eq 0 ]
do
e=$(( $m % 8 ))
echo $e>>mno.txt
m=$(( $m / 8 ))
done

#########################################################hex####################
###
>wxy.txt
until [ $w -eq 0 ]
do
e=$(( w % 16 ))

if [ $e -eq 0 ]
then
echo $e>>wxy.txt

elif [ $e -eq 1 ]
then
echo $e>>wxy.txt

elif [ $e -eq 2 ]
then
echo $e>>wxy.txt

elif [ $e -eq 3 ]
then
echo $e>>wxy.txt

elif [ $e -eq 4 ]
then
echo $e>>wxy.txt

elif [ $e -eq 5 ]
then
echo $e>>wxy.txt

elif [ $e -eq 6 ]
then
echo $e>>wxy.txt

elif [ $e -eq 7 ]
then
echo $e>>wxy.txt

elif [ $e -eq 8 ]
then
echo $e>>wxy.txt

elif [ $e -eq 9 ]
then
echo $e>>wxy.txt

elif [ $e -eq 10 ]
then
echo A>>wxy.txt

elif [ $e -eq 11 ]
then
echo B>>wxy.txt

elif [ $e -eq 12 ]
then
echo C>>wxy.txt

elif [ $e -eq 13 ]
then
echo D>>wxy.txt

elif [ $e -eq 14 ]
then
echo E>>wxy.txt

elif [ $e -eq 15 ]
then
echo F>>wxy.txt

fi
w=$(( $w / 16 ))
done
#########################################################Переворачиваем строки#######################
sed -n '1!G;h;$p' def.txt>fed.txt
sed -n '1!G;h;$p' mno.txt>onm.txt
sed -n '1!G;h;$p' wxy.txt>yxw.txt

#########################################################Делаем столбики строками#######################
busybox cat fed.txt | busybox tr -d "\n" > def.txt
busybox cat onm.txt | busybox tr -d "\n" > mno.txt
busybox cat yxw.txt | busybox tr -d "\n" > wxy.txt

#########################################################Помещаем в переменную значения файлов#######################
p=`cat def.txt`
echo bin: $p>igo.txt
p=`cat mno.txt`
echo oct: $p>>igo.txt
p=`cat wxy.txt`
echo hex: $p>>igo.txt
p=`cat igo.txt`
fi

#########################################################bin####################
###
rm .txt

showQ "Результат dec=$k" "$p" 2      

VINRARUS, Поздравляю с назначением)

Автор: VINRARUS 11.8.2011, 7:26

спасиба smile.gif
Ну тут будет сложновато. Нада все действия в обратном порядке делать.
Например строчку опять столбиком будет тяжеловато сделать.
И комбинацию e=$(($d%2)) например я незнаю как обратить, ведь там, как я понял, с любого числа получаються 1 или 2 (тоесть процес не обратим).
К стати етот код точно правильно общитывает?





Автор: IlluminatI 11.8.2011, 7:59

Цитата(igoripp @ Вчера, 22:49)
* Этот код для перевода десятичного числа в двоичное, восьмеричное и шестнадцатеричное. Помогите написать код для перевода bin, oct и hex в dec.

жесть... это всё безобразие надо в цикл сворачивать, причём сразу. При таком кол-ве одинаковых строк очень легко незаметить ошибку

Автор: igoripp 11.8.2011, 8:03

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

Автор: IlluminatI 11.8.2011, 8:04

в hex можно делать проверку: если от 0 до 9 то записывать цифру, а для букв можно оставить эту часть кода, а если есть что-то вроде switch() то юзать его. Для bin и oct, можно создать массив из двух элементов, с числами 2 и 8, и часть кода bin засунуть в цикл.

Автор: igoripp 11.8.2011, 8:05

Там и так цикл есть)

Добавлено позже (11.8.2011, 12:06):
Насчет хекс, ты прав) а остальное я не понял(
until это и есть цикл

Автор: IlluminatI 11.8.2011, 8:48

я сишными вставками покажу)

Код

int ss[2] = { 2, 8 };
for( int i = 0; i < 2; i++ )
{
until [ $d -eq 0 ]
do
e=$(( $d % ss[i] ))
echo $e>>def.txt
d=$(( $d / ss[i] ))
done
}

вот такой код переводит в двоичную и восьмеричную системы счисления

Автор: Programmer-tm(Мотофан.) 11.8.2011, 9:20

Ребят. Давайте подумаем, как сделать русско английский перевод нормально.
Пока у меня такая идея:

Код

Perevod()
{
slovo=`showTextEntry 0 "Translator" "Введите текст:"`
if [ "$slovo" = "" ]
then
    showQ "Translator" "Я не могу перевести пустоту... Введёте слово снова?" 1
    tmp1="$?"
    if [ "$tmp1" = "1" ]
    then
        Perevod
    else
        showNotify "Translator" "Вы отаказались от ввода..." 0 2
        exit
    fi
else
    if sed "/^$slovo/!d" $mypath/data2/bd
    then
        text="`sed "/^$slovo/!d" $mypath/data2/bd`"
        showQ "Translator" "$text" 2
    else
        showNotify "Translator" "Извините, но такого слова нету в моей базе..." 0 2
        exit
    fi
fi
}
Perevod


Ну тут он дофига ненужных строк ещё припысывает...
Вот думаю как побороть...

Автор: VINRARUS 11.8.2011, 10:23

if GROB="`sed "/^$slovo/!d" $mypath/data2/bd`"
then
text="$GROB"

так поиск будет в 2 раза быстрее.
Ну а с ненужными строками нада бороться или указуя конкретнее фразы, либо ограничивая искомое слово с обох сторон.

Автор: IlluminatI 11.8.2011, 12:01

а не проще посимвольно искать? Геморойней конечно в разы, но тогда поиск будет успешен при однокоренных словах, или выдавать из базы похожие результаты когда поиск не выдал точно такое же слово из базы.
ну к примеру, если юзер введёт слово "пистолеты" то поиск будет неуспешен, хотя слово "пистолет" будет в бд. Где-то у меня в лекциях был поиск по символам, даже привёден алгоритм.

Цитата(VINRARUS @ Сегодня, 13:23)
* if GROB="`sed "/^$slovo/!d" $mypath/data2/bd`"

если не сложно, расскажите что эта строка означает smile.gif

Автор: Programmer-tm(Мотофан.) 11.8.2011, 12:53

IlluminatI,
Это значит если найдется содержимое переменной $slovo (указана выше) в bd по адресу...
Значит она положится в переменную GROB (Плачевная переменная какая-то) не находите)
И процесс пойдет дальше под then...

...в зависимости от того найдет ли sed шото, иначе пойдет процес под else...

Автор: igoripp 11.8.2011, 19:02

User and Linux part1 и User and Linux part2 - статьи размещенные в журнале User and Linux, они дают возможность освоить основные возможности bash за полтора часа. Именно с них я и начинал своё учение.
Девид Тейнсли - LINUX и UNIX. Программирование в SHELL - очень понятно и поэтапно всё изложено. Все действия происходят используя интерпретатор sh, командного языка shell. Nо, что читаю в нынешнее время.
C. Скловская - команды Linux - справочник по командам Linux, незаменимая вещь, если надо вспомнить синтаксис и опции какой либо команды.
Д. ДЖ. Баррет - Linux. Основные команды. Карманный справочник - справочник по командам Linux, незаменимая вещь, если надо вспомнить синтаксис и опции какой либо команды.
Mendel Cooper - Advanced Bash-Scripting Guide - на русском, самое полное руководство по интерпретатору bash, командного языка shell.
Грэм Гласс, Кинг Эйблс - Unix для программистов и пользователей - в доступной и наглядной форме изложены все аспекты работы в ОС UNIX, включая обсуждение основных концепций ОС, основных утилит, различных оболочек, сетевой организации оконных систем, системного программирования, свойств и администрирования системы.



http://files.progbook.ru/qphbaiqb2myv/glass_unix_dlya_programmistov_i_polzovatelei.rar.html
http://depositfiles.com/files/9s033a5h4


Что бы открыть всё это через нативную программу Djvu Reader, переименуйте название книг в более короткие (латиница без пробелов), а затем открывайте)
Прикрепленный файл Mendel_Cooper_-_Advanced_Bash-Scripting_Guide.zip   ( 2.29 мегабайт ) Кол-во скачиваний: 71
Прикрепленный файл Д._ДЖ._Баррет_-_Linux._Основные_команды._Карманный_справочник.zip   ( 1.11 мегабайт ) Кол-во скачиваний: 50
Прикрепленный файл Девид_Тейнсли__-_LINUX_и_UNIX._Программирование_в_SHELL.zip   ( 4.29 мегабайт ) Кол-во скачиваний: 60
Прикрепленный файл User_and_Linux_part1.zip   ( 275.44 килобайт ) Кол-во скачиваний: 70
Прикрепленный файл User_and_Linux_part2.zip   ( 197.38 килобайт ) Кол-во скачиваний: 96

Автор: VINRARUS 16.8.2011, 9:54

Код
#!/bin/sh
CFGPATH=${0%/*}/nastroyka.cfg
Z2="/mmc/mmca1/musor.mp3"
Z1="MP3"
if ZZ=`sed "s/^$Z1 = .*/$Z1 = $Z2/" $CFGPATH`
then
echo "$ZZ" > $CFGPATH
echo "OK"
else
echo "Ups..."
fi

Может кому пригодится, меняет параметр в нужном конфиге.

Автор: Programmer-tm(Мотофан.) 27.8.2011, 5:33

Код

#!/bin/sh
CFGPATH=${0%/*}/1.cfg

Z2="4321" #not modify

Z1="prog" #new

Z11="fi" #old

if ZZ=`sed "s/^$Z11=$Z2/$Z1=$Z2/g" $CFGPATH` #comand modify
then
  echo "OK" #input
  echo "$ZZ" #input
else
  echo "Ups..." #input
fi


А у меня вот так норм заробило...

Автор: igoripp 30.8.2011, 13:19

Уважаемые, как заархивировать папку bd, лежащую рядом со скриптом? Файл - с легка получилось, а вот с папкой проблема... Мне не важно в какой именно архив будет, будь то *.zip, *.gz или подобные) Но важно, что б я смог скриптом этот же файл-архив распаковать!

Автор: Programmer-tm(Мотофан.) 30.8.2011, 13:58

Пакуем:

/usr/local/p7zip/7z (путь где архиватор валяется) a "$mypath/name"(собстно куда мы архив кинем и под каким именем) "/mmc/mmca1/BOX/" (папушка, которую решили пакернуть)

Распаковываем:

/usr/local/p7zip/7z(путь где архиватор валяется) x "$mypath/name.7z"(собстно куда мы архив кидали и под каким именем) -o"/mmc/mmca1/"(папушка, в которую решили извлекать)

Все, что в скобках можно похерить... Остальное - команды...

Автор: Diag 30.8.2011, 18:13

Можно для распаковки busybox unzip использовать...
unzip /путь/к/архиву.zip -d /папка/куда/извлечется/содержимое.
Ну это так, на заметку.

Да, ребят, хотел спросить.
Допустим, что через find по расширению *.cfg я нашел один файл (например, /mmc/mmca1/config.cfg). Как мне отдельно выцепить имя файла и путь к папке, где этот самый файл расположен?

Автор: Programmer-tm(Мотофан.) 30.8.2011, 18:17

Diag,
То же вариант) Ну, выберет, что больше приглянется...

Просто я парольный архиватор мутил, вот и такие команды получились почти... ну ещё -p"password" был...

Автор: VINRARUS 30.8.2011, 18:48

Diag,
busybox dirname /tama/kaka.rak
busybox basename /tama/kaka.rak


Добавлено позже (30.8.2011, 21:50):
забыл о самом главном: smile.gif

Автор: Diag 31.8.2011, 9:35

VINRARUS, благодарю.
А как мне тогда получить имя файла без расширения?

Автор: igoripp 31.8.2011, 9:47

Цитата
Распаковываем:

/usr/local/p7zip/7z(путь где архиватор валяется) x "$mypath/name.7z"(собстно куда мы архив кидали и под каким именем) -o"/mmc/mmca1/"(папушка, в которую решили извлекать)


Архивация происходит на Ура, а вот разархивация не работает( Пишу так:
Код
/usr/local/p7zip/7z x "$mypath/arh/arh.7z" -o "$mypath/bd/"



И еще вопрос, как передать командой sh файл через Bluetooch?


И еще вопрос, в папке /bd/ много файлов *.txt с разными именами, заранее неизвестными. Требуется обработка всех лежащих там текстовых файлов специальной командой по очереди, после обработки должны в папку /bd1/ поместиться эти же файлы с такими же именами, только обработанные командами... Во как загнул smile.gif


Diag, вот как:
z=`echo $q | sed s'/.(расширение без точки)//'` # где q - необработанный текст. z - обработанный текст
z=`echo $q | sed s'/.txt//'` # удаляет расширение у .txt файлов
q=`echo $q | sed s'/.txt//'` # так тоже можно

Автор: Programmer-tm(Мотофан.) 31.8.2011, 10:55

А $mypath/arh/arh.7z там точно архив лежит? с таким именем?
из-за этого может не распаковать...

Автор: igoripp 31.8.2011, 11:32

Programmer-tm(Мотофан.), 100% странно очень... А у тебя так работает?

Автор: Programmer-tm(Мотофан.) 31.8.2011, 12:10

igoripp,
Скачай тогда You_Box в теме приложений zn5 он основан на упаковке и распаковке... может там что лучше поймешь...
А у меня пашет на ура... ты в телнете проверь команды сперва...
И глянь на что ругнется... и смотри на регистр буков!!! он то же учитываем!

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

Автор: VINRARUS 31.8.2011, 16:10

Цитата
как передать
командой sh файл через
Bluetooch?

Мне неизвестны способы, только через натив
Цитата
получить имя
файла без расширения
-
q=`echo $q | sed s'/.txt//'`

sed замену в таких случаях нада комплектовать $ или ^, а вдруг файл назван например R.txt_notxt.txt
И не нада забывать что точка
означает любой символ, и ее нада экранировать так: \.

А это отрезает все после последней точки
FLM="sobaka.fu"
${FLM%.*}

Автор: Diag 31.8.2011, 16:22

Я вам премного благодарен.
И вопрос на засыпку: как удалить первый символ из имени файла (ну или со значения переменной в виде пути к файлу. А то лишний "/" вырисовывается)?

Автор: VINRARUS 31.8.2011, 17:06

Diag,
так вроде:
aga=`echo $ga | sed s'/^.//'`

Добавлено позже (31.8.2011, 20:23):
igoripp,
из разархиватора:
cd "$CD"
${0%/*}/7z x "$URL" -aou


Добавлено позже (31.8.2011, 20:38):

Цитата
Во
как загнул

ща разагнём! dribble.gif
for DUB in "`ls /db | sed '/\.txt$/!d'`"
do
echo "$DUB" | sed 's/kaka/mazahaka/' >/db7/$DUB
done

Проверил-работает.

Автор: igoripp 31.8.2011, 18:04

Код
/usr/local/p7zip/7z x "$mypath/arh/arh.7z" -o"$mypath/"

Зароботал smile.gif


VINRARUS,
Код
for DUB in "`ls /db | sed '/\.txt$/!d'`"
do
echo "$DUB" | sed 's/kaka/mazahaka/' >/db7/$DUB
done


Напиши плиз что здесь что not_i.gif

Автор: VINRARUS 31.8.2011, 19:07

for DUB in "`ls /db | sed '/\.txt
$/!d'`"
do
cat "/db/$DUB" | sed 's/kaka/
mazahaka/' >/db7/$DUB
done

Вот чють подправил smile.gif
Знач /db это путь к папке с файлами, из которой отбираються токо файлы .txt.
Потом цикл по очереди подставляет в переменную $DUB имена файлов.
Ну а потом обрабатывается каждый файл и записывается под исходным именем в другую папку.
Вместо sed
's/kaka/mazahaka/' вставляеш код нужной тебе обработки.

Автор: igoripp 31.8.2011, 19:14

VINRARUS, Programmer-tm(Мотофан.) Спасибо ребята clapping.gif

Автор: Programmer-tm(Мотофан.) 1.9.2011, 5:49

igoripp,
Да не за что) Трудись дальше... Может ветка линукс аппаратов не помрет...
Надежные агрегаты...

Автор: VINRARUS 1.9.2011, 6:40

igoripp,
пожалуста smile.gif

Автор: K()t 1.9.2011, 10:37

Цитата(Programmer-tm(Мотофан.) @ 1.9.2011, 8:49) *

igoripp,
Да не за что) Трудись дальше... Может ветка линукс аппаратов не помрет...
Надежные агрегаты...

Не знаю как остальные, а от е8 с трудом доживает до 3 года в нормальном состоянии.

Автор: Programmer-tm(Мотофан.) 1.9.2011, 13:22

K()t,
Ну у меня на зине проблем нет... Все что ломается - чиниться минимальным набором инструментов... Ну 5 разряд радиомеханика не пропить...

Автор: igoripp 5.9.2011, 5:18

Какой командой производится вызов номера?

Автор: VINRARUS 5.9.2011, 9:47

igoripp,
командой 'зеленая кнопка' laugh.gif
Скрипты не умеють звонить, это привилегия натива, развичто есть специальная нативная утилитка для этого предназначеная.

Добавлено позже (5.9.2011, 12:50):
но я такой не знаю

Автор: K()t 5.9.2011, 19:38

igoripp, была какаято китайская нативная прога, я вылаживал.
====
Кто знает свап раздел можно очищать без перезагрузки телефона. Через 4дня использования телефона 20байт свободно и как последствие тел быстро розряжается.

Автор: VINRARUS 6.9.2011, 6:02

K()t,
насколько я знаю для очищения свапа его нада выключить и включить.
Но это работает когда есть свободная оперативка, а когда забитая то выключить его низя.


Добавлено позже (6.9.2011, 9:06):
можна поэксперементировать с этим:
/proc/sys/vm/vfs_cache_pressure
/proc/sys/vm/swappiness

Автор: igoripp 13.9.2011, 12:38

echo 'obase=16; ibase=10; 64
206' | bc
Конвертация систем счисления
(десятичную в шестнадцатиричную)
Как заставить это работать?
Взято: zhakutov.blogspot.com/

Автор: igoripp 14.9.2011, 19:27

www.gnu.org/software/bc/
Скомпилируйте пожалуйста эту функцию, а то она мне очень необходима.

Автор: VINRARUS 14.9.2011, 20:50

Мне удалось найти способ ускорить работу скриптов!
В большинстве модов при запуску прог и скриптов также подгружаются некоторые либы, например для копипаста. И как оказалось это замедляет скрипты, особенно если в нем используется много утилит.
Но если эти либы убрать, то будет ощющаться прирост скорости.

Например модуль showFM почти в 2 раза у меня шустрее работает.
А одна прога с кучой обработок и вычеслений аж в 5 раз работает быстрей!
Для того чтобы убрать с подгрузки либы нада в начало скрипта добавить эту строчку:
LD_PRELOAD=
Дает результат на z6 и на zn5. На других моделях тоже должно работать.
Вот из за чего оно так работает.
Если есть в переменной либы для подгружения, то при запуску прог тратится немного времени на подгрузку либ. Но если скрипт использует какието утилиты, то либы все время подгружаются к ним, и в суме происходит ощютимая задержка. sad.gif

Добавлено позже (14.9.2011, 23:53):
Чем сложнее скрипт, тем большая вероятность его ускорить.

Автор: igoripp 15.9.2011, 4:39

VINRARUS, полностью подтверждаю этот факт, проверял на е8 на нескольких приложениях)))

Автор: mindw0rk 15.9.2011, 8:52

Цитата(igoripp @ 14.9.2011, 20:27) *

www.gnu.org/software/bc/
Скомпилируйте пожалуйста эту функцию, а то она мне очень необходима.

готово
http://ru.wikipedia.org/wiki/Bc
http://ru.wikipedia.org/wiki/Dc
Прикрепленный файл bc-1.6.7z   ( 94.74 килобайт ) Кол-во скачиваний: 30

Автор: DDA-E398 17.9.2011, 6:03

Vinrarus, напиши скрипт который будет парсить страницу гизметео и записывать в файл текущую погоду. У меня чёт не выходит...
Вот это надо парсить
http://informer.gismeteo.ru/
xml/27612.xml

Автор: VINRARUS 17.9.2011, 10:05

DDA-E398,
Тебе все прогнозы нада (их там 4)?
И как тебе записывать, переменными которые ты сам дальше обработаеш как нада или готовыми словами?

Автор: DDA-E398 17.9.2011, 15:44

Нужен только первый прогноз. Хотелось бы cfg примерно с таким содержанием
tod=
tempmax=
tempmin=
wingmax=
и т.д.
Вобщем нужны все параметры первого прогноза

Автор: VINRARUS 18.9.2011, 15:52

DDA-E398,
сделаю сьодня-завтра, ато щас нада мод доделать и выложыть. clapping.gif

Автор: DDA-E398 18.9.2011, 16:01

Лады. Буду ждать. Наконец-то на Е2 будет погода на рабочем столе.

Автор: Programmer-tm(Мотофан.) 18.9.2011, 16:11

Ну кому погоду, а кому идеи прог в голову не лезут) вот как бывает)

Автор: DDA-E398 19.9.2011, 18:09

Цитата(VINRARUS @ 18.9.2011, 19:52) *

DDA-E398,
сделаю сьодня-завтра, ато щас нада мод доделать и выложыть. clapping.gif


Ну как? Написал? Скинь архивом хоть кусок скрипта, мож дальше сам разберусь...
Заранее спасибо.

Автор: VINRARUS 19.9.2011, 18:10

dda-e398,
вот тебе парсер. Загрузку файла который будеш парсить сам доделаеш, там не сложно. Запускать нада Tada.sh

Я там сделал чтобы в назначеный файл писалися переменные со значениями.
И для их использования нада в начала скрипта, которым ты буш погоду выводить, добавить строчку на подобе:
. /home/pogoda.sh
И так в твом скрипте добавятся нужные переменные для удобнее дальнейшей обработки.


Добавлено ранее (19.9.1811, 21:12):
Заранее пожалуста smile.gif

Прикрепленный файл Pogoda.zip   ( 1.52 килобайт ) Кол-во скачиваний: 39

Автор: DDA-E398 20.9.2011, 17:55

Цитата(VINRARUS @ 19.9.2011, 22:10) *

dda-e398,
вот тебе парсер. Загрузку файла который будеш парсить сам доделаеш, там не сложно. Запускать нада Tada.sh

Я там сделал чтобы в назначеный файл писалися переменные со значениями.
И для их использования нада в начала скрипта, которым ты буш погоду выводить, добавить строчку на подобе:
. /home/pogoda.sh
И так в твом скрипте добавятся нужные переменные для удобнее дальнейшей обработки.


Добавлено ранее (19.9.1811, 21:12):
Заранее пожалуста smile.gif


Огромое спасибо!!!
Пара вопросов ещё:
1. Как сложить две переменые и поделить их на два
2. Как сделать чтоб скрипт запускался по времени? Т.е. висит в фоне и если время 3:00 то выполнялся ещё раз и опять засыпал.

Автор: VINRARUS 20.9.2011, 19:39

A сложение это додавання? smile.gif
let JAK=$KA+$KO
let DEL=$JAK/2

По запланированому времени нада делать через sleep. Или каждый час проверять который час, или разщитывать время сна заранее.
Еще, у меня например, при заблокированой клаве все скрипты и проги тел замораживает намертво до разблокировки.

Автор: DDA-E398 20.9.2011, 22:01

Погода на гизметео обновляется 4 раза в сутки (2.30, 8.30, 14.30, 20.30 МСК по зимнему времени). Как я понимаю это 3.30, 9.30, 15.30, 21.30 МСК по
летнему...
Т.е. в xml-файле есть параметр ''tod'' он прямо указывает на промежуток времени.
tod=0 это утро т.е. время с 3.30 до 9.30
tod=1 это день т.е. время с 9.30 до 15.30
и т.д.
Вобщем конструкция следующая:
1. Читаем значение tod из распарсенного конфига (кстати ты забыл про него, но методом тыка добавил его парсинг)
2. Проверяем соответствует ли tod промежутку времени
3. Если нет то обновляем.
4. Если соотвествует то считаем сколько спать до того как будет обновление на сервере и добавляем 5 минут (вдруг время на теле спешит)

Автор: VINRARUS 21.9.2011, 11:33

DDA-E398,
Проверь засыпает ли система при заблокированой клавиатуре!!!
А то если ты установил sleep 50m , и через 5 минут заблокировалась клава, то возможно если через 6 часов ты ее разблокируеш, то останется скрипту отщитать еще 45 минут, при условии если клава будет разблокирована, и скрипт так может никогда и не сработать!
Как это узнать?
Запишы в скрипт такое:

Код
sleep 25
showQ

и выполни, быстро заблокировав после этого клаву, подожди 1 мин, разблокируй, если диалог появился с опозданием сек 15-20 после разблокировки , то знач тел заморажывает все процесы и команды при блокировке.
Тогда pmtool в помощ. smile.gif

Автор: Programmer-tm(Мотофан.) 21.9.2011, 11:57

Оно вроде везде морозит... я так pmtool вписал в свою прогу... и просто пускаюсь через неё...
Правда она у меня каждый час смотрит время...

Автор: DDA-E398 21.9.2011, 13:02

Морозит... Но kDesktopInfo обновляется каждые 3 секунды. Поэтому думаю скрипт с проверкой времени к нему прикрутить

Добавлено позже (21.9.2011, 17:03):
Морозит... Но kDesktopInfo обновляется каждые 3 секунды. Поэтому думаю скрипт с проверкой времени к нему прикрутить

Автор: VINRARUS 21.9.2011, 13:06

Цитата(DDA-E398 @ Сегодня, 16:02)
* обновляется каждые 3 секунды.

а батарейку он так не схрумает раньше времени? И к стати не факт что kDesktopInfo не заморажывается.
Если да, пробуй pmtool -s (-s : Enable/Disable Low Power Modes)

Автор: DDA-E398 21.9.2011, 14:01

pmtool нет на е2... Но дескинфо при включении подсвески сразу делает обновление. Т.е. нафиг рассчёт времени главное сопоставить значение tod ко времени.

Автор: VINRARUS 21.9.2011, 14:05

DDA-E398,
а, ну тогда будет работать smile.gif

Автор: DDA-E398 21.9.2011, 16:06

Ток до меня не доходит как сопоставить tod и время...

Добавлено позже (21.9.2011, 21:49):


Кто-нить поможет?

Автор: VINRARUS 22.9.2011, 8:45

Цитата(DDA-E398 @ Вчера, 19:06)
* Ток до меня не доходит как сопоставить tod и время...

А до меня недоходит что такое "tod" pardon.gif

Автор: DDA-E398 22.9.2011, 10:59

Всё сделал! Ща мучаюсь с автообновлением и запуском при включении...

Автор: Goin13 24.9.2011, 17:09

Цитата
А до меня недоходит что такое "tod"

Тоже...

Автор: DDA-E398 24.9.2011, 22:33

tod - это имя переменной в xml скачанного с гизметео

Автор: DDA-E398 25.9.2011, 10:51

Код



#!/bin/bash

export QTDIR=/usr/lib/ezx
myfile=`basename $0`
mypath=`echo $0 | sed -e 's/'$myfile'//g'`
lang=`cat /ezx_user/download/appwrite/setup/ezx_system.cfg | grep '^LanguageType' | sed -e 's/LanguageType\ =\ //g'`
if [ -f ${mypath}lang/sd.$lang.lang ]; then
    . ${mypath}lang/sd.$lang.lang
else
    . ${mypath}lang/sd.en-us.lang
fi


umount /mmc/mmca1 > /dev/null 2>&1

if [ -d /ezxlocal/download/mystuff/MySysPartition ]
then
    umount /ezxlocal/download/mystuff/MySysPartition > /dev/null 2>&1
    umount /mmca/mmca6 > /dev/null 2>&1
fi

swapoff /dev/mmca5 > /dev/null 2>&1

split_mmca1=`showTextEntry 0 "/dev/mmca1: (MB) FAT16"`
if [ "$split_mmca1" = "" ]
then
    exit 0
fi

split_mmca5=`showTextEntry 0 "/dev/mmca5: (MB) SWAP"`
if [ "$split_mmca5" = "" ]
then
    exit 0
fi

showNotify "" "$re8"

if [ "$lang" = "ru" ]; then
re7="/dev/mmca1=${split_mmca1}M - FAT16
/dev/mmca5=${split_mmca5}M - SWAP
/dev/mmca6=свободное место - EXT3
применить настройки?
(Это займёт пару минут, и удалит всё на вашей карте памяти)"
else
re7="/dev/mmca1=${split_mmca1}M - FAT16
/dev/mmca5=${split_mmca5}M - SWAP
/dev/mmca6=free space left - EXT3
Aplly the settings ?
(It will take minutes, and all things on the SD card will be lost)"
fi


if [ $split_mmca1 -ge 1 ] && [ $split_mmca5 -ge 1 ]; then

showQ "$re1" "$re7" 1 ||
        {
echo "d
1
d
2
n
p
1

+${split_mmca1}M
t
6
n
e
2


n
l

+${split_mmca5}M
t
5
82
n
l


t
6
83
w" | fdisk /dev/mmca

        /.backup/mkdosfs /dev/mmca1
        /bin/busybox mkswap /dev/mmca5
        /bin/mkfs.ext3 /dev/mmca6
        showQ -t "Rebooting" -c "$re3" -p 3 &
        reboot -d -f -i
        }
else
        showNotify "" ""\!\!\! 1
fi
exit 0




Данный скрипт разбивает карту памяти на три раздела: FAT16, SWAP и Ext3
Перед этим он запрашивает размеры разделов. У меня флэшка 4Gb но боелее 3500 байт раздел FAT16 создать не получается...
Необходимо сделать так чтобы форматирование проходило автоматически, т.е. Чтобы раздел Swap, был всегда 64МB, Ext3 - 128MB, а размер первого раздела рассчитывался и форматировался в FAT32 и затем менялся его ID на ID FAT16

ID поменять что-то вроде этого:
Код

fdisk /dev/mmca1
t
3
83
w
mkfs -f -t vfat32 /dev/mmca1


Я так думаю?

Автор: VINRARUS 25.9.2011, 11:22

dda-e398,
Смотри эту штуку, там все сделано. smile.gif
Прикрепленный файл zPartitionMMC.zip   ( 9.73 килобайт ) Кол-во скачиваний: 27

Автор: DDA-E398 25.9.2011, 12:11

Ну вот что я написал по поводу вычисления размеров разделов

spilit_mmc=`fdisk -l /dev/mmca | grep Disk | awk '{print$3}'`
split_mmca5="64"
split_mmca6="128"

let split_mmca1=$spilit_mmc-$spilit_mmc5
let split_mmca1=$spilit_mmca1-$spilit_mmc6

так правильно? я так просто быстрее разберусь что к чему

Автор: VINRARUS 25.9.2011, 12:59

Цитата(DDA-E398 @ Сегодня, 15:11)
* так правильно?

Не совсем, переменные не должны быть с знаками синтаксиса
Код

smmc1=`fdisk -l /dev/mmca | grep Disk | awk '{print$3}'`
smmc2="64"
smmc3="128"

let smmc0=$smmc1-$smmc2-$smmc3

Автор: DDA-E398 25.9.2011, 15:56

Далее разбиваю и форматирую флэху

Код

if [ $smmca1 -ge 1 ] && [ $smmca5 -ge 1 ]; then

showQ "$re1" "$re7" 1 ||
        {
echo "d
1
d
2
n
p
1

+${smmca1}M
t
6              <--------------- ID раздела который в FAT16
n
e
2


n
l

+${smmca5}M
t
5
82
n
l


t
6
83
w" | fdisk /dev/mmca

        /.backup/mkdosfs /dev/mmca1          <------------- Форматирует в FAT16
        /bin/busybox mkswap /dev/mmca5
        /bin/mkfs.ext3 /dev/mmca6        

        showQ -t "Rebooting" -c "$re3" -p 3 &
        reboot -d -f -i
        }
else
        showNotify "" ""\!\!\! 1
fi



Указанные строчки для того чтоб форматировалось в FAT32 необходимо заменить на
Код

.
b
.
/bin/mkfs.vfat
.


Я правильно думаю?

Автор: VINRARUS 26.9.2011, 11:48

mkdosfs и в FAT 32 тоже форматирует, и вроде сам выбирает зависимо от размера раздела.
vFAT это модификация FAT.

И еще, ext2 более быстрая фс и более подходит для флешок.

Автор: Programmer-tm(Мотофан.) 26.9.2011, 11:52

VINRARUS,
А может соберем скриптовый учебник по скриптам?)

Автор: VINRARUS 26.9.2011, 18:30

Programmer-tm(Мотофан.),
не думаю что будет в этом польза.

Автор: IlluminatI 28.9.2011, 19:10

Впал в ступор от єлементарной проблемы.
В настольном bash`e есть команда tree. Нужно вывести все папки по определенному паттерну. У меня нифига не получается( не выводит нужные папки ). Расскажите кому не лень, как этой тулзой пользоваться. с меня +

Автор: VINRARUS 29.9.2011, 6:59

IlluminatI,
у меня на теле нет tree, помоч не могу.

Автор: RYORUS 4.10.2011, 15:06

Люди извините если, может, туплю crazy.gif но какую команду нужно указать, чтобы приложение открывао файл? Заранее спасибо! clapping.gif

Автор: VINRARUS 4.10.2011, 15:10

RYORUS,
по началу не вьехал в суть вопроса smile.gif
путь/к/проге -d путь/к/файлу

Автор: Pyth_ON! 7.10.2011, 10:18

Цитата(IlluminatI @ 28.9.2011, 19:10) *

Впал в ступор от єлементарной проблемы.
В настольном bash`e есть команда tree. Нужно вывести все папки по определенному паттерну. У меня нифига не получается( не выводит нужные папки ). Расскажите кому не лень, как этой тулзой пользоваться. с меня +

man tree, не?
http://linux.die.net/man/1/tree

Автор: VINRARUS 12.10.2011, 14:07

Познакомился сегодня с зомби процесами в линуксе, вот подробнее о этом crazy.gif
http://cooper.ezlibrary.com/articles/2009/02/24/zombie-processes-in-linux

Автор: VINRARUS 14.10.2011, 13:30

Вот сделал парсер для одной проги, может кому пригодится:

Код
wget http://www.anekdot.ru/rss/randomu.html -O /tmp/anecdot

sed -e '2!d' -e 's/.*<\/span><br \/><br \/>//' -e 's/<br \/><br \/><span.*//' -e 's/<br \/>/\n/g' /tmp/anecdot > /tmp/anuka

Автор: igoripp 21.10.2011, 15:06

VINRARUS,
Помоги мне плиз сделать одну фишку...
Требуется написать скрипт, суть которого такова: запускаю его, он должен проверить запущен ли процесс zIM_E8, если запущен, делаем (дейстсвие1), незапущен - (действие2).

Автор: VINRARUS 21.10.2011, 15:19

Цитата(igoripp @ Сегодня, 18:06)
* запущен ли процесс zIM_E8


Код
if killall -0 zIM_E8
then
echo "da"
else
echo "net"
fi


Автор: igoripp 21.10.2011, 15:48

VINRARUS,
спасибо, работает smile.gif Но только половина sad.gif Какой командой разворачивать свернутые приложения? Если таковой нету, то как узнать pid процесса в автоматическом режиме, что б его занести в переменную? А дальше через зтаскмамМини развернуть, уже знаю как smile.gif

Автор: VINRARUS 21.10.2011, 15:50

Цитата(igoripp @ Сегодня, 18:48)
* Но только половина

как это?
Цитата(igoripp @ Сегодня, 18:48)
* как узнать pid процесса в автоматическом режиме,

MUMU=`pidof zIM_E8`

Автор: igoripp 21.10.2011, 15:56

Цитата
как это?

моя гипотеза о том, что свернутое приложение можно запустить коммандой ./zim_e8 оказалось не верным sad.gif

Автор: Diag 22.10.2011, 11:04

Цитата
моя гипотеза о том, что свернутое приложение можно запустить коммандой ./zim_e8 оказалось не верным

zTaskManMini тебе в помощь smile.gif
Прошу прощения. Проглядел.

Автор: igoripp 22.10.2011, 12:39

Diag,
VINRARUS,

Код
if killall -0 zIM_E8
then
echo"da"
else
echo"net"
fi

конструкция данного вида не работает. Если приложение не запущено, то она запускается, выполняя команды под else. Если же приложение запущено, то никакой реакции на действия под then, else нету sad.gif Есть ли другой способ? И почему команда pid=`pidof zim_e8` возвращает несколько значений pid (603 602 601), хотя настоящий 601?

Автор: Diag 22.10.2011, 12:59

Цитата
И почему команда pid=`pidof zim_e8` возвращает несколько значений pid (603 602 601), хотя настоящий 601?

Разве под другими идентификаторами процесс не вызывается?

Проверил. Из 3-х идентификаторов только по одному смог вызвать процесс... Не знаю, что можно предложить, но можно "разбить" результат с несколькими значениями идентификатора процесса и вызывать его, перебирая все эти значения.

Автор: K()t 22.10.2011, 15:51

igoripp, посмотри скрипт запуска зРокБокса от Зорге.Р, там надеюсь найдёшь ответ на свой вопрос!

Автор: igoripp 22.10.2011, 16:50

K()t,
хорошо, так и сделаю smile.gif

Автор: K()t 25.10.2011, 7:59

Вот мой маленький скрипт

Код

#!/bin/sh
mypath=${0%/*}
rm $mypath/netexec.ini
echo -ne "[NetExecConfig]
Command = $mypath/java.sh" > $mypath/netexec.ini
touch "$mypath/netexec.fxd"
wget -0 "http://www.m.opera.com/dl/0qdsNLqfeWrB58jk8zUAXXdCDw8DZGVmYXVsdF8yMDA5LnBuZw==/mini.jar" "$mypath/mini.jar"
find /mmc/mmca1/.system -name mini.jar > $mypath/result.txt
b=`cat $mypath/result.txt`
showQ "Опера найдена!" "пути к установленым ява
$b" 2
cp -f $mypath/mini.jar $b
rm -f $mypath/result.txt
showQ "Замена завершена" " 8)" 2

Что не работает:
1)не хочет скачивать ничего с инета
2)как реализовать замену mini.jar если их больше чем два?
ps.gif писал на паре

Автор: VINRARUS 25.10.2011, 8:11

K()t, нада: wget "адрес" -0 "куда"

Код
#!/bin/sh
mypath=${0%/*}
rm $mypath/netexec.ini
echo -ne "[NetExecConfig]
Command = $mypath/java.sh" > $mypath/netexec.ini
touch "$mypath/netexec.fxd"
wget "http://www.m.opera.com/dl/0qdsNLqfeWrB58jk8zUAXXdCDw8DZGVmYXVsdF8yMDA5LnBuZw==/mini.jar" -0 "$mypath/mini.jar"
find /mmc/mmca1/.system -name mini.jar > $mypath/result.txt
b=`cat $mypath/result.txt`
showQ "Опера найдена!" "пути к установленым ява
$b" 2
for MOZG in $b
do
cp -f $mypath/mini.jar $MOZG
done
rm -f $mypath/result.txt
showQ " 8)" "Замена завершена" 2

Автор: K()t 25.10.2011, 11:04

Не работает скрипт не хочет копировать указанный файл в найденные папки

Автор: VINRARUS 25.10.2011, 12:45

K()t,
Я немного код поправил, тот что выше, кавычки убрал, попробуй.

Автор: VINRARUS 9.12.2011, 19:26

Так как я в системе мода Project Evolution 4 очень часто использую скрипты, а не натив, то понял что для чтения параметров с различных конфигов не удобно их читать скриптам с конфигов типа:

Код
vAvariyka=1
vApmd = 2
vCpufreq = 0
vCache = 100
vBTrof = 1
vBTtimer = 1

Ведь это нада обрабатывать этот файл сторонними утилитами которые тратят и процесорное время и силы при написании кода скрипта, чтения с таких конфигов скорее подходят для натива.
Но можна использовать возможности sh на полную, используя конфиг который подгружает все параметры в готовые переменные мгновенно dribble.gif .
Просто нада гдето (например в /vin/vin.sh) сохранить скрипт с набором переменных (они же параметры) подобного содержимого:
Код
#!/bin/sh
LD_PRELOAD=
CFGPATH=/vin/vin.sh
vAvariyka=1
vApmd=2
vCpufreq=0
vCache=100
vBTrof=1
vBTtimer=1
vBTsms=5

и подгружать их в нужном скрипте таким способом (прописывая эту строчку в начале скрипта):
Код
. /vin/vin.sh


ну менять параметры конечно тяжелее, чем читать их, но это не так часто требуеться. Для этого я например написал специальную утилитку для изменения параметров на SH.
rtfm.gif ___________________________________________________________

И ещё очень часто нужно те или иные файлы монтировать туда - сюда, а постоянно это делать (даже автоматически) не очень удобно и по мнению некоторых людей это плохо влияет на систему. По этому я использую в моде симлинки в замен монтирования. Файл из как правило RO fs заменяю на симлинк который ведет в папку в которой можна перезаписывать инфу. Ну и в этой папке другой симлинк ведет уже на нужный обьект. И если нужно изменить настройку (тоесть обьект на который ведет симлинк) всего лишъ нужно нужно удалить и опять создать симлинк с нужным путем.
Ну и так настройка меняется раз и на всегда, и не нужно выполнять лишних действий при загрузке системы, и легко можно узнать какая установка используется (с помощью readlink). Для смены настроечных симлинков я тоже написал утилитку на SH. smile.gif

Надеюсь кому то пригодится him.gif

Автор: VINRARUS 15.12.2011, 12:17

Сообщение перенесено сюда: http://forum.motofan.ru/index.php?showtopic=1730557
Так как это является отдельной програмкой, и мало чем относится к названию данной темы, то решил создать отдельную темку, и выложить туда новую 6ю версию zSHapmd. smile.gif
надеюсь никого не обидел этим)))
Прикрепленный файл zSHapmd.7z   ( 833 байт ) Кол-во скачиваний: 34

Автор: igoripp 29.12.2011, 8:09

Собственно вопрос, есть ли у кого книги на русском по QT версии 4.* и выше? Для мобильный устройств если можно, хочу на новогодних каникулах подучить...

Автор: DDA-E398 20.10.2012, 18:55

Собсно, провёл небольшое исследование зависимости времени выполнения скриптов от того в каком шелле они выполняются.
Выбор на наших фонах невелик, из всех известных шеллов доступны Bash и Ash (он же Sh).
На днях с помощью великого русского мата всётаки удалось скомпилить bash 4.2.37 (до этого был bash 4.1). И захотелось мне сравнить быстродействие оболочек (Bash 4.2, Bash 4.1 и Sh). Во время поиска помощи по компиляции баша наткнулся на скриптик для проверки скорости работы шеллов:

Код

for i in `seq 1 10000`;do
    echo -n "*ice"
done

Тестить вслепую нехотел, а комп невсегда коннектится с телом по телнэту, поэтому пришлось тестить в двух терминалах которые есть на телефоне: EzxTerm и Konzr. Тут же сделал первое открытие: Konzr быстрее EzxTerm более чем в три раза и не дохнет после 10-15 запуска тестового скрипта.
Но в обоих проявилась чёткая зависимость скорости выполнения тестового скрипта от того какой шелл его выполняет.
Сегодня, от нефиг делать, игрался с параметрами скрипта, выполнял его во всех трёх оболочках трёх оболочках в произвольном порядке (для чистоты эксперимента) и записывал результаты.
Все тесты проводились на Motorola ROKR E2 (624MHz, 128MB Swap, mUbuntu 2.x)
После недолгих подсчётов вывел формулы зависимости времени:

Для Bash 4.1
Код

bash = sh*2 + sh/5
sh = bash*5/11


Для Bash 4.2
Код

bash = sh*2 + sh/10
sh = bash*10/21


Для тех кто в танке поясню:
Как и следовало ожидать Sh быстрее Bash, причём чем тяжелее скрипт, тем быстрее он его выполняет.
(Например если Sh выполняет скрипт за минуту, то Bash версии 4.1 сделает его, примерно за 2 минуты 12 секунд, а Bash 4.2, чуть быстрее, за 2 минуты 6 секунд).

Также решил протестировать скрипт добавив параметр LD_PRELOAD=
Тут ситуация немного иная, т.е. для Bash даёт прирост скорости в 1.5 секунды (+/- 0.5 секунды), независимо от версии Bash, а для Sh - 1 секунду (+/- 0.5 секунды).
Соответственно к предыдущим формулам добавится:

Код

bash = bash - 1.5
sh = sh - 1


Вывод напрашивается сам собой: для наших супер-телефонов лучше использовать Sh, чтобы хоть как-то минимизировать тормоза наших девайсов, пусть даже самую малость. Хотя, если рассматривать систему в целом, то прирост в быстродействии может оказаться существенным (ну может и не очень существенным, но, по крайней мере заметным).

Быть может попробую скомпилить Zsh, пишут что это чемпион по скорости среди шеллов, но никак не могу найти точную информацию об отличии его синтаксиса от синтаксиса Bash и Sh. Мож кто из мотофанов просвятит?

Автор: Zorge.R 16.1.2013, 19:59

Залил из старого, что нашел, на github:

https://github.com/ZorgeR/repoZITO
https://github.com/ZorgeR/zMenuBKG
https://github.com/ZorgeR/zSecret
https://github.com/ZorgeR/zPart-ZN5
https://github.com/ZorgeR/zPart (E8)
https://github.com/ZorgeR/zRadio
https://github.com/ZorgeR/zroot
https://github.com/ZorgeR/zMount
https://github.com/ZorgeR/zArchyMan
https://github.com/ZorgeR/zTweet


Автор: VINRARUS 30.3.2013, 18:30

Отслеживать частоту ЦП с телнета в реальном времени:

Код
while true
do
sleep 1
cat /sys/mpm/op
done

Автор: VINRARUS 11.5.2013, 19:20

Обрезка строк (переменных) исключительно силами SH.
http://www.opennet.ru/docs/RUS/bash_scripting_guide/x4171.html

Shell позволяет делать простейшее обрезание переменных до (или после) какого то символа. rabbi.gif
Существуют сторонние команды-аналоги типо cut, sed, grep и т.д., но они будут дольше срабатывать (хотя и имеют куда больший функционал).
Но я рекомендую использовать обрезание именно с помощью Shell, так как оно намного быстрее происходит. good.gif

Дальше я буду разбирать пример только при работе с 1 строчным значением переменной.

Оно имеет такой синтаксис состоящий из 3х частей:
${ПЕРЕМЕННАЯопцияШАБЛОН}

Есть 4 наиболее полезные опции обрезания:
# -удаление самого короткого совпадения с шаблоном в начале строки
## -удаление самого длинного совпадения с шаблоном в начале строки
% -удаление самого короткого совпадения с шаблоном в конце строки
%% -удаление самого длинного совпадения с шаблоном в конце строки

А вот символы шаблонов:
? -любой 1 символ
* -любое количество любых символов (может даже соответствовать 0 символам)
\ -экранирование символов \? или \*


Полезнее всего это при работе с путями к файлу или папке.

Разные примеры при обрезании пути к файлу
Для начала запишем в переменную путь к нужному файлу (или папке), прошу заметить что в начале нету символа "/":
Код
OBREZ="mmc/mmca1/mp3/SuperBass/Bass.mp3"


Если нужно отрезать любое название файла (или любые символы после последнего / включительно), получится mmc/mmca1/mp3/SuperBass
Код
${OBREZ%/*}


Но если использовать %%, то останется только mmc (отрежет всё после первого / включительно)
Код
${OBREZ%%/*}


Такая конструкция отрежет 2 раза с права, и получится mmc/mmca1/mp3
Код
${OBREZ%/*/*}


Отрезать с права начиная словом "/mp3", выйдет mmc/mmca1
Код
${OBREZ%/mp3*}


Отрезать начиная словом mp3 c права, выйдет mmc/mmca1/mp3/SuperBass/Bass.
Код
${OBREZ%mp3*}


Отрезать с права начиная словом mp3 самым левым, выйдет mmc/mmca1/mp3/SuperBass/Bas
Код
${OBREZ%%mp3*}


Отрезать 5 символов с права, выйдет mca1/mp3/SuperBass/Bass.mp3
должно быть 5 знаков "?" подряд, просто движок форума убирает их
Код
${OBREZ%?}


Отрезать по самый первый символ / с лева, выйдет mmca1/mp3/SuperBass/Bass.mp3
Код
${OBREZ#*/}


Отрезать по самый последний символ / с лева, выйдет Bass.mp3
Код
${OBREZ##*/}


Отрезать 5 символов с лева, выйдет mca1/mp3/SuperBass/Bass.mp3
должно быть 5 знаков "?" подряд, просто движок форума убирает их
Код
${OBREZ#?}

[close]
Обрезание обычного предложения

Для начала запишем в переменную любое предложение:
Код
OBREZ="MOTOMAGX is super Linux OS"


Результат получите сами Изображение
Код
${OBREZ#*is}

Код
${OBREZ%% *}

Код
${OBREZ#* s}

Код
${OBREZ#*s}

[close]
Практическое применение

Как известно в переменной $0 хранится путь к самому скрипту который работает в данный момент (короче к самому себе).
Это выведет путь к папке, в которой находится этот скрипт, обзываемый обычно mypatch
Код
${0%/*}


Имя нашего скрипта
Код
${0##*/}


Расширение нашего скрипта
Код
${0##*.}


mypatch на уровень в верх
Код
${0%/*/*}


dribble.gif Ну и вот такой механизм я использовал в http://forum.motofan.ru/index.php?showtopic=1730506 , при выборе файла из ФМ предлагает какую папку сканировать
($1 означает например "/mmc/mmca1/MP3/Xclusive Drum & Bass (3CD) (2007)/cd3/02 - G Dub - Les Miserables.mp3"):
Код
DIRA="${1%/*}"
DIRA1="${1%/*}"
DIRA2="${1%/*/*}"
DIRA3="${1%/*/*/*}"
DIRA4="${1%/*/*/*/*}"
DIRA5="${1%/*/*/*/*/*}"

showRadio "SHELL player" "Выберите папку для сканирования:
$DIRA" "/${DIRA1##*/}" "/${DIRA2##*/}" "/${DIRA3##*/}" "/${DIRA4##*/}" "/${DIRA5##*/}"

[close]


blind.gif И помните, обрезание внутри переменной не изменяет значение самой переменной (то есть нужно каждый раз использовать обрезающую конструкцию), для перезаписи переменной используйте такую штуку:
Код
OBREZ="${OBREZ##*/}"

Автор: VINRARUS 19.6.2013, 18:36

На основе http://forum.motofan.ru/index.php?s=&showtopic=1730557&view=findpost&p=1726606 сделал утилиту которая в терминале выводит частоту и процент загрузки CPU.
Постарался сделать что бы ее работа не особо влияла на показатели (общет совершается после снятия показателей).

По умолчанию интервал показа 1 сек., но можно задать в ручную:
В секундах, например 3 секунды:

Код
/test.sh 3

Или в десятых секунды ( диапазон 1-9), например пол секунды:
Код
test.sh -u 5


Выглядит так:
Прикрепленное изображение

ПС: что бы остановить постоянный вывод не закрывая терминал - жмем ctrl+C
Прикрепленный файл test.zip   ( 506 байт ) Кол-во скачиваний: 33

Автор: VINRARUS 18.7.2013, 11:19

Неплохой мануал по awk: http://khpi-iip.mipk.kharkiv.edu/library/extent/os/usref/gl10.html
ПС: sed легче в понимании, но некоторые действия проще выполнить в awk.

Автор: DDA-E398 16.11.2013, 15:35

Немного не касаемо девайсов моторолы, но всё же...
Вобщем на роутере стоит DD-WRT и собственно в него вкручен самопальный адблок через dnsmasq
При каждом вкючении роутер тянет обновы блэклистов с серверов. Собсно это делается скриптом

Код

#!/bin/sh
sleep 10
logger WAN up script executing
if test -s /tmp/hosts0
then
        rm /tmp/hosts0
fi

logger Downloading...

wget -O - "http://winhelp2002.mvps.org/hosts.txt"  | grep 127.0.0.1 | sed '2,$s/127.0.0.1/0.0.0.0/g; s/[[:space:]]*#.*$//g;' | grep -v localhost | tr ' ' '\t' | tr -s '\t' | tr -d '\015' | sort -u >>/tmp/hosts0
wget -O - "http://someonewhocares.org/hosts/zero/hosts"  | grep 127.0.0.1 | sed '2,$s/127.0.0.1/0.0.0.0/g; s/[[:space:]]*#.*$//g;' | grep -v localhost | tr ' ' '\t' | tr -s '\t' | tr -d '\015' | sort -u >>/tmp/hosts0
wget -O - "http://jansal.googlecode.com/svn/trunk/adblock/hosts"  | grep 127.0.0.1 | sed '2,$s/127.0.0.1/0.0.0.0/g; s/[[:space:]]*#.*$//g;' | grep -v localhost | tr ' ' '\t' | tr -s '\t' | tr -d '\015' | sort -u >>/tmp/hosts0
wget -O - "http://adblock.gjtech.net/?format=hostfile"  | grep 127.0.0.1 | sed '2,$s/127.0.0.1/0.0.0.0/g; s/[[:space:]]*#.*$//g;' | grep -v localhost | tr ' ' '\t' | tr -s '\t' | tr -d '\015' | sort -u >>/tmp/hosts0
wget -O - "http://www.hostsfile.org/Downloads/hosts.txt"  | grep 127.0.0.1 | sed '2,$s/127.0.0.1/0.0.0.0/g; s/[[:space:]]*#.*$//g;' | grep -v localhost | tr ' ' '\t' | tr -s '\t' | tr -d '\015' | sort -u >>/tmp/hosts0

echo "0.0.0.0 rs.mail.ru" >>/tmp/hosts0
echo "0.0.0.0 wa.radar.imgsmail.ru" >>/tmp/hosts0
echo "0.0.0.0 mailua.hit.gemius.pl" >>/tmp/hosts0
echo "0.0.0.0 mail.radar.imgsmail.ru" >>/tmp/hosts0
echo "0.0.0.0 gstat.imgsmail.ru" >>/tmp/hosts0
echo "0.0.0.0 favicon.yandex.net" >>/tmp/hosts0
echo "0.0.0.0 headline.radar.imgsmail.ru" >>/tmp/hosts0
echo "0.0.0.0 an.yandex.ru" >>/tmp/hosts0
echo "0.0.0.0 ad.mail.ru" >>/tmp/hosts0
echo "0.0.0.0 img1.imgsmail.ru" >>/tmp/hosts0
echo "0.0.0.0 r3.mail.ru" >>/tmp/hosts0
echo "0.0.0.0 mailtest.cdnmail.ru" >>/tmp/hosts0
echo "0.0.0.0 splash.radar.imgsmail.ru" >>/tmp/hosts0
echo "0.0.0.0 ar.tns-counter.ru" >>/tmp/hosts0

grep addn-hosts /tmp/dnsmasq.conf ||
    echo "addn-hosts=/tmp/hosts0" >>/tmp/dnsmasq.conf
logger Restarting dnsmasq
killall dnsmasq
dnsmasq --conf-file=/tmp/dnsmasq.conf


Так вот в чём собсно прроблема... Некоторые домены дублируются + некоторые домены лочатся не за что (например clck.yandex.ru)
Помогите плиз допилить) Шелл я что-то стал подзабывать, хотя и юзаю никсы, но пишу в основном на перле и питоне.

Вобщем нужно добавить функцию которая будет удалять из блэклиста хорошие домены
И нужна более грамотно оформленная функция добавления доменов в блэклист

Автор: VINRARUS 18.11.2013, 21:39

Цитата(DDA-E398 @ 16.11.2013, 17:35)
* wget -O - "http://someonewhocares.org/hosts/zero/hosts" | grep 127.0.0.1

Тут вообще ошибка, так как там 0.0.0.0 все.

Автор: VINRARUS 19.11.2013, 1:35

king.gif На:

Код
#!/bin/sh

echo "bu VINRARUS"
if [ -s /tmp/hosts0 ]
then
rm -f /tmp/banlist0
mv /tmp/hosts0 /tmp/banlist0
else
rm /tmp/hosts0
echo "" > /tmp/banlist0
fi
#### mnogopotok v shell o_O ####
rm -f /tmp/banlist1
rm -f /tmp/banlist2
rm -f /tmp/banlist3
rm -f /tmp/banlist4
rm -f /tmp/banlist5
echo "`wget -O - "http://winhelp2002.mvps.org/hosts.txt"`" > /tmp/banlist1 &
echo "`wget -O - "http://someonewhocares.org/hosts/zero/hosts"`" > /tmp/banlist2 &
echo "`wget -O - "http://jansal.googlecode.com/svn/trunk/adblock/hosts"`" > /tmp/banlist3 &
echo "`wget -O - "http://adblock.gjtech.net/?format=hostfile"`" > /tmp/banlist4 &
echo "`wget -O - "http://www.hostsfile.org/Downloads/hosts.txt"`" > /tmp/banlist5 &

RR=0
until [ -f "/tmp/banlist0" -a -f "/tmp/banlist1" -a -f "/tmp/banlist2" -a -f "/tmp/banlist3" -a -f "/tmp/banlist4" -a -f "/tmp/banlist5" ]
do
sleep 1
let RR=$RR+1
done
echo "$RR sec complite download" &
#### odnopotok ^_^ ####

#kusay RAM
OMG=`cat /tmp/banlist0
cat /tmp/banlist1
cat /tmp/banlist2
cat /tmp/banlist3
cat /tmp/banlist4
cat /tmp/banlist5`
rm -f /tmp/banlist0
rm -f /tmp/banlist1
rm -f /tmp/banlist2
rm -f /tmp/banlist3
rm -f /tmp/banlist4
rm -f /tmp/banlist5

echo "Loading..."
OMG=`echo "$OMG" | sed -e 's/127\.0\.0\.1/0.0.0.0/g' -e '/0\.0\.0\.0/!d' -e 's/ *#.*//' -e '/localhost/d' -e 's/\t/ /g' -e 's/  */ /g'
cat '/home/badlist'`
if [ -s "/home/coollist" ]
then
echo "$OMG" | tr -d '\015' | sort -u | grep -v -f "/home/coolist" > /tmp/hosts0
else
echo "$OMG" | tr -d '\015' | sort -u > /tmp/hosts0
fi
#facepalm
echo "" >> /tmp/hosts0
echo "Finish!"


/home/coolist - эти адреса будут удаляться из списка жбанов, писать так:
Цитата
motofan.ru
или так
0.0.0.0 motofan.ru

/home/badlist - эти адреса будут добавляться в список жбанов, писать так:
Цитата
0.0.0.0 vinrarus.ucoz.net

Автор: DDA-E398 19.11.2013, 10:11

Спасиб большущее тебе, добрый человек!!!

Автор: VINRARUS 12.9.2014, 21:28

Немного обновил шапку. king.gif

А еще недавно случайно наткнулся на код который выводит случайное число.
Удалось даже ускорить его собственными знаниями:

Код
dd if=/dev/urandom bs=256 count=1 | tr -dc 0-9 | head -c 8

Ну я не знаю кому как, а меня давно эта штука интересовала.

Автор: VINRARUS 28.9.2014, 20:29

Ну вот, очередное преимущество shell перед bash. blind.gif
http://www.oszone.net/25284/Shellshock_bug_discovered

Автор: VINRARUS 15.3.2015, 0:06

Написал вот програмку для сравнения времени жизни заряда акумуляторов. smile.gif
Она состоит из линейного стрес-теста и минутомера который каждую минуту отщитывает в файл "Batlog_?.txt", который появится возле запускаемого скрипта.
Использование:
1) полностью зарядить телефон и отключить от зарядки
2) положить в удобное место скрипт и запустить
3) выбрать режим ЦП для сравнения (обычно это максимальный 532)
4) положить телефон на пол посредине комнаты, обнести колючей проволокой и не трогать пока он сам не вырубится от севшей батарейки
5) после включения читаем файл возле скрипта типа "Batlog_?.txt", в нем видим сколько минут протянула батарея при нагрузке и на какой частоте ЦП

Также там есть режим LOGx, он запускает лишь минутомер, без стресс-теста. Можна запустить его и пользоваться обычными функциями телефона. Предназначен для просмотра статистики времени жизни батареи при активном использовании (он не будет считать то время которое телефон бездействует).

Моя http://forum.motofan.ru/index.php?s=&showtopic=1731987&view=findpost&p=1768007 выдала такие результаты:
минуты (частота ЦП)
418 (399 MHz)
185 (532 MHz)
139 (740 MHz)
Прикрепленный файл BAT_KILLER.zip   ( 1.02 килобайт ) Кол-во скачиваний: 42

Автор: VINRARUS 2.10.2015, 13:34

Вот вам написанный мною бенчмарк проверки реальной скорости записи на флешку, это оказалось намного сложнее чем я думал. wacko.gif

Код
echo > '/mmc/mmca1/bu_VINRARUS.tmp';sync; echo -n 'Write speed: ';time sh -c 'dd if=/dev/zero of=/mmc/mmca1/bu_VINRARUS.tmp bs=5M count=1; sync'  2>&1 | sed -e '/real/!d' -e 's/.*m /5120 /' -e 's/s/ \/ p/' | dc | sed 's/\..*/ kB\/s/';rm -f /mmc/mmca1/bu_VINRARUS.tmp


Добавлено позже (2.10.2015, 17:02):
А вот тест скорости чтения с диска (флешки). И тут совсем все плохо в Linux. blind.gif Если бы не сторонний софт то реальная проверка скорости чтения была бы невозможна, так как при чтении или записи любого файла в Linux он остается в оперативной памяти, а там уж скорости космические.
Код
sync; echo -n 'Read speed : ';hdparm -t /dev/mmca 2>&1 | sed -e '/disk reads/!d' -e 's/.* = //'

Автор: VINRARUS 2.10.2015, 20:41

Вот за 5 минут накидал гуй для него на самом телефоне. Теперь можно сразу с Linux телефонa запускать. smile.gif
Прикрепленное изображение
Требует наличия busybox_full.
Прикрепленный файл zBenchMMC.zip   ( 531 байт ) Кол-во скачиваний: 22

Автор: VINRARUS 25.10.2015, 22:27

http://aidalinux.ru/w/Sed

Автор: VINRARUS 21.11.2015, 16:22

crazy.gif Люди, при обработке чужого текста (написанного в винде) не забывайте избавляться от символа возврата каретки:

Код
tr -d '\r'

А то я немножко повеселился с ней только что. laugh.gif

Автор: VINRARUS 24.2.2016, 2:20

Проблема в цикле for:

Код

LIST="1111
22222222
33 3
44444444"

for ONO in `echo "$LIST"`
do
echo $ONO
done

что такое цикл for?

Этот механизм в 1 переменную по очереди подставляет значения из списка.
for имя_переменной in список_значений_через_пробел_или_перенос
do
действие с имя_переменной
done
[close]

Костыль для цикла for, шоб он не ломал строчки по пробелах, а токо по переносах:
Код

LIST="1111
22222222
333 3
44444444"

IFSbak="$IFS"
IFS="
"
for ONO in `echo "$LIST"`
do
echo $ONO
done
IFS="$IFSbak"

Автор: VINRARUS 22.3.2016, 21:01

Код
AUTOSIZE(){
#SIZE_EXTRACTOR 1.2
#2147483647k max
zSIZE=$1
if [ "$zSIZE" -lt 1024 ]
then
let zSIZE=1024+$zSIZE
fi
let zSIZE=$zSIZE*10000/1024
zSIZEM=${zSIZE%%?}
zSIZEK=${zSIZE#$zSIZEM}
if [ "$zSIZEK" -gt 9000 ]
then
let zSIZEM=$zSIZEM+1
zSIZEK=0
elif [ "${zSIZEK##?}" != 000 ]
then
let zSIZEK=${zSIZEK%%???}+1
else
zSIZEK=${zSIZEK%%???}
fi
if [ "$1" -lt 1024 ]
then
let zSIZEM=$zSIZEM-1
fi
zSIZE="$zSIZEM.$zSIZEK"
echo "$zSIZE"
}

Интересную функцию вот написал - она перетворяет килобайты в мегабайты и округливает до десятых в большую сторону.
А то в SHELL округлить в меньшую сторону запросто, а в большую пришлось потрудиться (к тому же когда в 1 МБ 1024 Кб. smile.gif
Код
AUTOSIZE 12345
12.1


Автор: VINRARUS 30.3.2016, 16:45

Секундомер на SHELL с точностью до 1/10 секунды (ну почти grin.gif ), будет полезен для ознакомления новичкам. pooh_go.gif

Код

MILI(){
N2=0
echo -n "
$N1" &
while [ "$N2" -lt 9 ]
do
usleep 100000
let N2=$N2+1
echo -n " .$N2" &
done
}
N1=0
while true
do
MILI &
sleep 1
let N1=$N1+1
done

Даже такой пустяк не просто заставить правильно работать на маломощных системах (133 МГц это вам не "2ядра+2гига", нужно оптимизировать).
По этому интересно наблюдать как милисекунды не могут догнать целые секунды на 133 МГц. Что бы исправить ставим usleep 77000 или подымаем частоту ЦП.
Нужно понимать что команда sleep внутренняя и исполняется самим SHELL, в то время как usleep запускается через busybox в новом процессе, из за этого и происходит отставание

Автор: VINRARUS 30.8.2016, 7:28

Shell имеет встроенную команду назначения переменных read, которой я чото не пользовался раньше.
Она способна 1й строчкой заменить 28 строчек кода аналогичных движений. dribble.gif

Код
#новый код
read A0 A1 A2 A3 A4 AA </proc/stat

Она читает файл /proc/stat, разбивает 1ю строчку (типа 1 2 3 4 5 7) по пробелах и записывает в переменные A0 A1 A2 A3 A4 полученые фрагменты, ну а остальное в AA.
старый код для примера
Код
#старый код
a=0
GW=`cat /proc/stat`
for GG in $GW
do
case $a in
1)
A1=$GG
;;
2)
A2=$GG
;;
3)
A3=$GG
;;
4)
A4=$GG
break
;;
5)
break
;;
6)
echo ARRR
;;
esac
let a=$a+1
done
[close]

Автор: EXL 30.8.2016, 8:56

Цитата(VINRARUS @ Сегодня, 13:28)
* Она способна 1й строчкой заменить 28 строчек кода аналогичных движений.


В современных языках программирования в качестве такой фичи используется множественное присваивание, e.g. Python:

Код
s = '18 10 0.00 0.01 500 26.18 32.20 586.39'
pm25, pm10, hcho, voc, co2, temp, humidity, summ = s.split(' ')

Автор: VINRARUS 16.9.2016, 11:18

Програмка для отслеживания запущеных програм.
Работает постоянно и без пауз, по этому нагружает ЦП на 100%, но зато ловит команды не плохо. smile.gif
Не баг но фича: при закрытии процесов вставляется пустая строка.

Код
#!/bin/sh
echo bu VINRARUS 2016
PSN=`ps`
NUM=1
while true
do
PSO="$PSN
"
PSN=`ps`
LIST=`echo "$PSO$PSN" | sort -u | sed -n "/$NUM/,\\${p;}" | sed "/ ps/d"`
echo "$LIST" | sed -e '/ ps $/d' -e "/$NUM /d"
LIS=`echo "$LIST" | awk '{print $1} ' | sort -u -n`
NUM=`echo "$LIS" | sed -e '$!d'`
done

Был бы он раньше - было бы намного проще ковырять прошивки.
ПС: вставляйте busybox туда где нужно вашему моду.

Автор: VINRARUS 20.1.2017, 1:58

Радость то какая! clapping.gif Выпуск утилиты http://www.gnu.org/software/sed/

Цитата
Спустя почти восемь лет с момента выпуска ветки 4.2 сформирован релиз утилиты GNU sed 4.3, в рамках которой развивается реализация неинтерактивного текстового редактора, обычно применяемого для создания фильтров, модификации текстовых файлов и замены блоков по шаблону.

Ключевым улучшением новой версии является значительное ускорение операций сопоставления по регулярным выражениям, которые теперь выполняются быстрее в 10 раз. Кроме того, по возможности отныне применяется неблокирующий ввод/вывод, что также положительно сказывается на производительности. Из новой функциональности отмечается появление опции "--sandbox", при указании которой блокируется выполнение команд "r", "w" и "e".


Проверено, простейшая замена выполняется в 10 раз быстрее!!!!! dribble.gif
Код
# time /home/sed -n -e s/1/a/g -e s/2/b/g -e s/3/c/g -e s/4/d/g -e s/5/e/g -e s/6/f/g -e s/7/g/g -e s/8/h/g -e s/9/z/g -e s/0/o/g /usr/data_resource/vin/7zip/7z.so
real    0m 1.06s
user    0m 1.05s
sys     0m 0.01s
# time sed -n -e s/1/a/g -e s/2/b/g -e s/3/c/g -e s/4/d/g -e s/5/e/g -e s/6/f/g -e s/7/g/g -e s/8/h/g -e s/9/z/g -e s/0/o/g /usr/data_resource/vin/7zip/7z.so
real    0m 11.47s
user    0m 11.43s
sys     0m 0.02s

Ну в некоторых других задачах прирост в 4 раза, а в исключительных случаях в 80 раз! newconfus.gif
Код

# time /home/sed -n s/[a-z]/0/g /usr/data_resource/vin/7zip/7z.so
real    0m 0.72s
user    0m 0.72s
sys     0m 0.00s  
# time sed -n s/[a-z]/0/g /usr/data_resource/vin/7zip/7z.so    real    0m 3.04s -n s/[a-z]/0/g /usr/data_resource/vin/7zip/7z.so
user    0m 3.03s
sys     0m 0.02s

#

# time /home/sed -n  -e '/./{H;$!d;}' -e 'x;/AAA/!d;' /usr/data_resource/vin/7zip/7z.so
real    0m 0.21s
user    0m 0.21s
sys     0m 0.00s
# time sed -n  -e '/./{H;$!d;}' -e 'x;/AAA/!d;' /usr/data_resource/vin/7zip/7z.so
real    0m 16.79s
user    0m 16.72s
sys     0m 0.03s
#

Бинарник под arm прикрепил.
Прикрепленный файл sed-4.3_arm.zip   ( 176.46 килобайт ) Кол-во скачиваний: 25

Автор: VINRARUS 10.4.2017, 19:55

Пример того как из под shell можна отлавливать действия натива НАПРЯМУЮ. dribble.gif
Возможности этой штуки огромны в умелых руках, вплоть до отлова клавиш или отлова звонков например. clapping.gif

Код
/usr/SYSqtapp/mediaplayer/mediaplayer -d "/usr/data_resource/videos/pingvin.3gp" | while read out
do
case "$out" in
"end MP_AvPlayer::onPlayFinished")
    echo "Finish"
;;
"exit MP_PlayerImpl::~MP_PlayerImpl")
    echo "EXIT"
;;
"enter MP_AvPlayer::stop()")
    echo "Stop"
;;
esac
done

Просто заменяем echo любой командой (шобы не блокировать натив после тяжолой команды ставим символ &), или заменяем значение перед дужкой лубой строкой из вывода натива.


Качества етого способа:
+работает в реальном времени
+не тратит ресурсы (на грани погрешности)
+не плодит новых процесов (все исполняется в 1м sh)
-нужно запускать натив в обертке
-глушит вывод (хотя можна дописать кому нада: echo "$out")
-переменные переназначеные внутри цыкла не сохраняются после цыкла
-незначительно замедляет натив в обертке (зависит от количества его строк и количества условий внутри цыкла)
-полная заморозка натива пока внутри цыкла выполняется команда (если там длительная команда то и висяк будет все это время)

Автор: Programmer-tm(Мотофан.) 31.7.2017, 10:28

Когда-то давно написался редактор конфигов... Пока идет допилка одной софтины выложу его отдельно, авось и пригодится кому...
Способ работы с ним:
Обращаемся из приложения примерно так:
config_mgr.sh /путь/до/конфига/конфиг.cfg [параметр]
Этим мы получем в ответе значение параметра.
config_mgr.sh /путь/до/конфига/конфиг.cfg [параметр] [значение]
Этим мы поменяем значение на заданное...
Внимание!!!
Есть точки значения 0 и 00
0 - забивает пустоту
00 - нолик...
Смотри не перепутай, Кутузов (с)
Вот, собственно и все...

Код

#!/bin/sh

# Programmer-tm (Motofan)
# Просмотрщик и редактор конфигурационного файла программы.

# Имя конфигурационного файла принимаем первым:
conf="$1"
# Вторым идет конкретный параметр в файле конфигурации:
par="$2"
# И третим идет конкретное значение этого параметра (если нам надо его поменять!):
zn="$3"

# Проверим наличие нового значения:
if [ "$zn" = "" ]
then
    # Значения нет:
    zn0=`cat "$conf" | grep "^$par" | sed s/$par=//g`
    # Выведем текущее значение параметра:
    echo "$zn0"
    # Покинем программу...
    exit
else
    # Если же новое значение есть, тогда:
    zn0=`cat "$conf" | grep "^$par" | sed s/$par=//g`
    # Мы спервоначалу сравним его с тем, что уже есть:
    if [ "$zn" = "$zn0" ]
    then
        # Коль они равны, то менять мы ничего не будем...
        echo "1"
        exit
    else
        # Если же новое значение мы задали как ноль, то стираем предыдущее значение и откланиваемся пользователю...
        if [ "$zn" = "0" ]
        then
            X=`sed 's/'$par=$zn0'/'$par='/' "$conf"`
            echo "$X" > "$conf"
            echo "null"
        else
            if [ "$zn" = "00" ]
            then
                X=`sed 's/'$par=$zn0'/'$par=0'/' "$conf"`
                echo "$X" > "$conf"
                echo "zero"
            else
                # Если что-то не срослось, и предыдущих функций не хватило, то просто заменим одно значение на другое...
                X=`sed 's/'$par=$zn0'/'$par=$zn'/' "$conf"`
                echo "$X" > "$conf"
                echo "0"
                exit
            fi
        fi
    fi
fi

Автор: VINRARUS 1.8.2017, 18:02

Цитата(Programmer-tm(Мотофан.) @ Вчера, 13:28)
* Внимание!!!
Есть точки значения 0 и 00
0 - забивает пустоту
00 - нолик...
Смотри не перепутай, Кутузов (с)

blind.gif Вот тебе без костылика, и немного точности добавил:
Код
#!/bin/sh

# Programmer-tm (Motofan)
# fix bu VINRARUS

# Просмотрщик и редактор конфигурационного файла программы.

# Имя конфигурационного файла принимаем первым:
conf="$1"
# Вторым идет конкретный параметр в файле конфигурации:
par="$2"
# И третим идет конкретное значение этого параметра (если нам надо его поменять!):
zn="$3"

# Проверим наличие нового значения:
##if [ "$zn" = "" ]
##не, лучше пощитаем количество аргументов, шоб если 3й пустой не пропустить его
if [ "$#" != "3" ]
then
    # Значения нет:
##альтернатива 1 командой (состоящая из 2х действий благодаря ключу -e: удалим все строки которые не начинаются с искомого параметра и в найденом удалим название параметра)+прямой вывод:
    sed -e "/^$par=/!d" -e "s/^$par=//" $conf
    # Покинем программу...
    ##и не просто покинем програму, а покинем програму с кодом завершения сэда
    exit $?
else
    # Если же новое значение есть, тогда:
    ##тоже 1й командой заменим, но оставим знак = перед значением
    zn0=`sed -e "/^$par=/!d" -e "s/^$par//" $conf`
    # Мы спервоначалу сравним его с тем, что уже есть:
    if [ "=$zn" = "$zn0" ]
    then
        # Коль они равны, то менять мы ничего не будем...
        echo "1"
        exit 0
    elif [ -z "$zn0" ]
    then
        ##если переменная $zn0 пустая значит в том файле отсутствует нужный параметр (иначе если б параметр был пустой то у нас бы остался знак = который мы сэдом оставили), пожалуемся:
        echo "EROR: not parametr '$par' in $conf"
        ##закидаем ошыбками:
        exit 1
    else
        ##просто заменим параметр в файле, не взирая на содержымое 3го аргумента (да хоть пустота, хоть 0, хоть 00), работая непосредственно с файлом (благодаря ключу -i):
        sed -i "s/^$par=.*/$par=$zn/" $conf
        ##покинем програму с кодом завершения сэда
        exit $?
    fi
fi

Автор: Programmer-tm(Мотофан.) 2.8.2017, 14:23

VINRARUS,
Интересная загогулина... Увидел некоторые свои опусы... Но со своей стороны понятнее мой код. Хоть и твой скорее думается на проце...

Автор: VINRARUS 25.10.2017, 19:01

https://habrahabr.ru/post/47706/ grin.gif
Также с нее можна узнать на сколько bash отличается от shell. clapping.gif

Автор: fill.sa 26.10.2017, 13:06

Цитата(VINRARUS @ Вчера, 20:01)
* узнать на сколько bash отличается от shell

bash от shell ?? может bash от других оболочек, bash это ж тоже shell.

походу ты не знаеш что такое shell и путаеш его c sh или ash.
Цитата(VINRARUS @ Вчера, 21:19)
* Любой код shell пойдет на /bin/bash.

нелюбой, в этом и суть оболочек(допусти pdksh или tcsh оболочка), что у каждой своя специфика, многие вещи в стиле юникса приведены к единой структуре, а некоторые все-равно различаются.

Автор: VINRARUS 27.10.2017, 21:03

bash это shell (частично), но shell это не bash wink.gif

Цитата(fill.sa @ Сегодня, 11:42)
* походу ты не знаеш что такое shell и путаеш его c sh или ash.

Shell это posix совместимый язык програмирования. А sh, ash, bash это интерпритаторы, которые именно shell код должны запускать одинаково.
А вот https://en.wikipedia.org/wiki/Bash_(Unix_shell), имеющий bashismы (то есть элементы работающие токо в /bin/bash) это уже НЕ shell, а его диалект (проще говоря другой язык). Есть bash оболочка (upd: то есть интерпретатор), а есть bash язык.

Простой пример несовместимости кода bash с sh:
Код
TEST_IQ(){ echo "Wat is 49*24?"
if ! read -t10 A
then
echo "you slowpoke"
elif [ "$A" = "$((49*24))" ]
then
echo "you genius"
else
echo "you stupid"
fi
}
TEST_IQ

Язык bash от shell отличается отдаленно и образно как С++ от С (если я правильно понимаю смысл С++).

Автор: VINRARUS 12.1.2018, 22:32

Графическая игра https://github.com/vaniacer/piu-piu-SH на bash. dribble.gif
К сожалению на экране 240х320 дальше меню не запускается. sad.gif
Но на мощном ПК прямо в терминале: делаем на весь экран и любуемся чудесами псевдографики. smile.gif
ПС: там есть бос.


Прикрепленный файл piu-piu.rar   ( 15.45 килобайт ) Кол-во скачиваний: 10

Автор: fill.sa 2.2.2018, 18:20

Как зациклить проверку наличия файла с 1 по 9?
На ум приходит что-то такое, но оно неработает

Код
$1=1
while [ ! -f "/file$1" ];
do
echo "file$1"
touch /file$1
$1=$1+1
done

Автор: VINRARUS 2.2.2018, 20:10

Цитата(fill.sa @ Сегодня, 20:20)
* Как зациклить проверку наличия файла с 1 по 9?

Ну вот, оптимальный код постоянно проверяющий наличие 9 файлов с окончанием из цыфры (цыфры можна заменить любыми символами, или даже словами, в любом количестве), и создающий файл при его отсутствии. Правда смысла этого не понял...
Код
FILE=/tmp/ff
while true
do
  for FU in 1 2 3 4 5 6 7 8 9
  do
    if [ ! -f "$FILE$FU" ]
    then
      echo "create $FILE$FU"
      touch "$FILE$FU"
    fi
  done
  sleep 1
done

Или если нужна проверка токо 1 раз то убираем вечный цыкл:
Код
FILE=/tmp/ff
  for FU in 1 2 3 4 5 6 7 8 9
  do
    if [ ! -f "$FILE$FU" ]
    then
      echo "create $FILE$FU"
      touch "$FILE$FU"
    fi
  done


По поводу твого кода

Не понял логики while [ ! -f "/file$1" ], ведь все равно цыкл лиш 1 раз отработает и закроется так как создаст файл - это равноценно if.

Кто тебя так научил переменные назначать?
$1 так вообще не меняются, лиш при помощи ключей запуска скрипта или функции.
N="значение"
А математические операции (в данном случае +1) делаются так:
Код
N=1
let N=$N+1

или так (POSIX совместимо):
Код
N=1
N=$(($N+1))

или так:
Код
N=1
let N++

[close]

Автор: fill.sa 2.2.2018, 22:19

VINRARUS,
сишка потихоньку занимает голову ))
будем проверять твой код завтра.

Автор: EXL 5.2.2018, 9:18

Цитата(fill.sa @ 3.2.2018, 5:19)
* сишка потихоньку занимает голову ))


Почему бы тогда не сделать на ней? Насколько я помню, там у местного QFile имеется метод exist()

http://doc.qt.io/archives/2.3/qfile.html#900285

Автор: fill.sa 5.2.2018, 11:02

EXL,
нужно именно для баша было тогда.

Автор: VINRARUS 11.3.2018, 16:48

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

Код
curl -k "${url}&signature=${signature}" -C - -o "/tmp/tmp/$name" 2> /tmp/curl.log

записав в файл, но при обработке этого лога не мог понять почему последняя строчка не меняется.
Оказалось curl разделяет последнюю строку не переносами, а символами переноса каретки. shok.gif
Пришлось заменять символ каретки на перенос через tr:
Код
curl -k "${url}&signature=${signature}" -C - -o "/tmp/tmp/$name" 2>&1 | tr -s '\015' '\n' > /tmp/curl.log


Первый раз вижу шобы символ каретки (CR) встречался без символа переноса (LF), обычно там где они встрочаются, в дос подобных ОС, они всегда в паре (CRLF). Это так же глупо выглядит как дверная ручка в бетонной стене. crazy.gif

Автор: EXL 14.3.2018, 18:12

VINRARUS,
Похоже на какой-то баг, если честно.

Автор: fill.sa 16.3.2018, 9:39

VINRARUS,
ты же любитель баша, тебе может будет интерестно такое задание. Для мода на ауру нужно.
Нужно в UserMenuRegistry в ветку "игры и приложения" добавить свои uuid номера.

Самое главное это как-можно простой и короткой командой сделать чтобы не нагружать систему.

Автор: VINRARUS 17.3.2018, 14:32

Я не помню как на Z6, но предположу шо там UserMenuRegistry=UserMenuTree в зине.

Цитата(fill.sa @ Вчера, 11:39)
* Нужно в UserMenuRegistry в ветку "игры и приложения" добавить свои uuid номера.

Это не сложно, можна было и топорно сделать, но вот более грамотно:
Код
JAVA='67dc1191-2928-4938-abce-1a73cb5ce490'
ADD=';11111111-2222-3333-4444-555555555555;66666666-7777-8888-999999999999'
sed -i "/\[$JAVA]/{n;s/\$/;$ADD/;}" /ezxlocal/download/appwrite/am/UserMenuRegistry

Цитата(fill.sa @ Вчера, 11:39)
* Самое главное это как-можно простой и короткой командой сделать чтобы не нагружать систему.

Вот короче, с рандомным uuid:
Код
sed -i "/\[67dc1191-2928-4938-abce-1a73cb5ce490]/{n;s/\$/;`cat /proc/sys/kernel/random/uuid`/;}" /ezxlocal/download/appwrite/am/UserMenuRegistry

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)