motofan logo
7 страниц V « < 4 5 6 7 >        
> 

Написание скриптов #!/bin/sh for UNIX, Кто поможет?

VINRARUS
сообщение 17.6.2011, 17:56 Закрепленное сообщение!


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



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

Вот мои рукописные мануалы для совсем новичков:
Основы. Синтаксис, кавычки, переменные, условные операторы
Розширенная инфа о if

Подробный мануал с примерами по ВСЕМ функциям SH
Портативная версия еще одного мануала
Книги в формате Djvu

Примеры работы с текстом через sed и мануал PRO и мануал NUB
Примеры работы с текстом через awk и мануал
Обрезка текста внутри переменных - чорт ногу сломит =] О логике шаблонов.

Где быстро найти инфу?
Тут вводите в строчку поиска манов любую утилиту, например echo, и 95% вероятности что получите инфу по всем функциям и ключам
Вот инфа по НЕКОТОРЫМ утилитам, также можна пользоваться поиском

ПС

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

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

3. Также нужно знать что код от bash иногда может не работать корректно на shell (sh), хотя и очень редко.
Это из за того что древним программистам делать было нечего, когда не было еще интернета, и они понапридумывали кучу модификаций.
Хорошо хоть код под чистый shell подойдет ко всем им, из за чего он считается эталоном. smile.gif
А не bash как считают юные линуксойды.
[close]


Сообщение отредактировал VINRARUS - 12.12.2020, 21:32
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Zorge.R
сообщение 16.1.2013, 19:59


Ветеран
Group Icon

Группа: System Administrators
Сообщений: 1 915
Регистрация: 4.10.2006
Из: рук в руки
Пользователь №: 101 800
Модель телефона: Note 9 Copper 512Gb
Прошивка: 1CR

Рейтинг: 2510



Залил из старого, что нашел, на 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


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Отслеживать частоту ЦП с телнета в реальном времени:
Код
while true
do
sleep 1
cat /sys/mpm/op
done


Сообщение отредактировал VINRARUS - 30.3.2013, 18:32
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 11.5.2013, 19:20


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Обрезка строк (переменных) исключительно силами SH.
Источник

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 Ну и вот такой механизм я использовал в Shell Player 2.0 , при выборе файла из ФМ предлагает какую папку сканировать
($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 - 11.5.2013, 20:19
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 19.6.2013, 18:36


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



На основе zSHapmd v8 сделал утилиту которая в терминале выводит частоту и процент загрузки CPU.
Постарался сделать что бы ее работа не особо влияла на показатели (общет совершается после снятия показателей).

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

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


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

ПС: что бы остановить постоянный вывод не закрывая терминал - жмем ctrl+C

Сообщение отредактировал VINRARUS - 19.6.2013, 18:39
Прикрепленный файл test.zip   ( 506 байт ) Кол-во скачиваний: 143
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 18.7.2013, 11:19


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Неплохой мануал по awk: http://khpi-iip.mipk.kharkiv.edu/library/e...usref/gl10.html
ПС: sed легче в понимании, но некоторые действия проще выполнить в awk.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DDA-E398
сообщение 16.11.2013, 15:35


Ветеран
*****

Группа: Пользователи
Сообщений: 372
Регистрация: 12.3.2008
Из: Нижегородская обл.
Пользователь №: 166 356
Модель телефона: E2, A910, Е398, ATRIX2
Прошивка: разные


Настроение:
Роботаю...



Рейтинг: 340



Немного не касаемо девайсов моторолы, но всё же...
Вобщем на роутере стоит 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


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Цитата(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


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



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


Сообщение отредактировал VINRARUS - 19.11.2013, 10:21
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DDA-E398
сообщение 19.11.2013, 10:11


Ветеран
*****

Группа: Пользователи
Сообщений: 372
Регистрация: 12.3.2008
Из: Нижегородская обл.
Пользователь №: 166 356
Модель телефона: E2, A910, Е398, ATRIX2
Прошивка: разные


Настроение:
Роботаю...



Рейтинг: 340



Спасиб большущее тебе, добрый человек!!!
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 12.9.2014, 21:28


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



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

А еще недавно случайно наткнулся на код который выводит случайное число.
Удалось даже ускорить его собственными знаниями:
Код
dd if=/dev/urandom bs=256 count=1 | tr -dc 0-9 | head -c 8

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

Сообщение отредактировал VINRARUS - 12.9.2014, 21:29
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 28.9.2014, 20:29


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Ну вот, очередное преимущество shell перед bash. blind.gif
В командной оболочке Bash найдена серьёзная уязвимость
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 15.3.2015, 0:06


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



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

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

Моя Galilio 1100 мАч выдала такие результаты:
минуты (частота ЦП)
418 (399 MHz)
185 (532 MHz)
139 (740 MHz)

Сообщение отредактировал VINRARUS - 13.9.2016, 15:01
Прикрепленный файл BAT_KILLER.zip   ( 1.02 килобайт ) Кол-во скачиваний: 107
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 2.10.2015, 13:34


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Вот вам написанный мною бенчмарк проверки реальной скорости записи на флешку, это оказалось намного сложнее чем я думал. 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


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Вот за 5 минут накидал гуй для него на самом телефоне. Теперь можно сразу с Linux телефонa запускать. smile.gif
Прикрепленное изображение
Требует наличия busybox_full.

Сообщение отредактировал VINRARUS - 2.10.2015, 21:48
Прикрепленный файл zBenchMMC.zip   ( 531 байт ) Кол-во скачиваний: 89
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 25.10.2015, 22:27


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Еще более глубокая инфа о регулярных выражениях sed.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 21.11.2015, 16:22


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



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

А то я немножко повеселился с ней только что. laugh.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 24.2.2016, 2:20


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Проблема в цикле 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 - 5.2.2017, 22:16
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 22.3.2016, 21:01


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Код
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


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Секундомер на 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.3.2016, 16:49
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 30.8.2016, 7:28


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



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


Rock The Microphone
********

Группа: Администраторы
Сообщений: 3 144
Регистрация: 12.5.2007
Из: г. Новосибирск
Пользователь №: 134 652
Модель телефона: XT894 / XT897
Прошивка: Различные


Настроение:
null



Рейтинг: 4654



Цитата(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


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Програмка для отслеживания запущеных програм.
Работает постоянно и без пауз, по этому нагружает ЦП на 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 - 9.11.2016, 1:25
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 20.1.2017, 1:58


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Радость то какая! clapping.gif Выпуск утилиты GNU sed 4.3
Цитата
Спустя почти восемь лет с момента выпуска ветки 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 прикрепил.

Сообщение отредактировал VINRARUS - 20.1.2017, 2:17
Прикрепленный файл sed-4.3_arm.zip   ( 176.46 килобайт ) Кол-во скачиваний: 98
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 10.4.2017, 19:55


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Пример того как из под 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


Мотофан
*******

Группа: Пользователи
Сообщений: 1 681
Регистрация: 21.3.2010
Из: Из мира сего
Пользователь №: 215 291
Модель телефона: Moto X Play
Прошивка: Модифицированная...


Настроение:
Делать невозможное возможным...



Рейтинг: 620



Когда-то давно написался редактор конфигов... Пока идет допилка одной софтины выложу его отдельно, авось и пригодится кому...
Способ работы с ним:
Обращаемся из приложения примерно так:
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


Сообщение отредактировал Programmer-tm(Мотофан.) - 31.7.2017, 10:32
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 1.8.2017, 18:02


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Цитата(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


Сообщение отредактировал VINRARUS - 1.8.2017, 18:10
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Programmer-tm(Мотофан.)
сообщение 2.8.2017, 14:23


Мотофан
*******

Группа: Пользователи
Сообщений: 1 681
Регистрация: 21.3.2010
Из: Из мира сего
Пользователь №: 215 291
Модель телефона: Moto X Play
Прошивка: Модифицированная...


Настроение:
Делать невозможное возможным...



Рейтинг: 620



VINRARUS,
Интересная загогулина... Увидел некоторые свои опусы... Но со своей стороны понятнее мой код. Хоть и твой скорее думается на проце...
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 25.10.2017, 19:01


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Отличная статья о том как правильно допускать ошыбки в shell. grin.gif
Также с нее можна узнать на сколько bash отличается от shell. clapping.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fill.sa
сообщение 26.10.2017, 13:06


Гуру
******

Группа: Разработчики
Сообщений: 1 240
Регистрация: 8.2.2011
Из: Беларусь
Пользователь №: 223 758
Модель телефона: z6 V8
Прошивка: Linux SAedition MOD

Рейтинг: 400



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

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

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

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

Сообщение отредактировал fill.sa - 4.11.2017, 18:44
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 27.10.2017, 21:03


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



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

Shell это posix совместимый язык програмирования. А sh, ash, bash это интерпритаторы, которые именно shell код должны запускать одинаково.
А вот язык программирования bash, имеющий 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 - 8.11.2017, 15:44
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 12.1.2018, 22:32


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



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

Прикрепленный файл piu-piu.rar   ( 15.45 килобайт ) Кол-во скачиваний: 117
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fill.sa
сообщение 2.2.2018, 18:20


Гуру
******

Группа: Разработчики
Сообщений: 1 240
Регистрация: 8.2.2011
Из: Беларусь
Пользователь №: 223 758
Модель телефона: z6 V8
Прошивка: Linux SAedition MOD

Рейтинг: 400



Как зациклить проверку наличия файла с 1 по 9?
На ум приходит что-то такое, но оно неработает
Код
$1=1
while [ ! -f "/file$1" ];
do
echo "file$1"
touch /file$1
$1=$1+1
done


Сообщение отредактировал fill.sa - 2.2.2018, 18:20
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 2.2.2018, 20:10


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Цитата(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


Гуру
******

Группа: Разработчики
Сообщений: 1 240
Регистрация: 8.2.2011
Из: Беларусь
Пользователь №: 223 758
Модель телефона: z6 V8
Прошивка: Linux SAedition MOD

Рейтинг: 400



VINRARUS,
сишка потихоньку занимает голову ))
будем проверять твой код завтра.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
EXL
сообщение 5.2.2018, 9:18


Rock The Microphone
********

Группа: Администраторы
Сообщений: 3 144
Регистрация: 12.5.2007
Из: г. Новосибирск
Пользователь №: 134 652
Модель телефона: XT894 / XT897
Прошивка: Различные


Настроение:
null



Рейтинг: 4654



Цитата(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


Гуру
******

Группа: Разработчики
Сообщений: 1 240
Регистрация: 8.2.2011
Из: Беларусь
Пользователь №: 223 758
Модель телефона: z6 V8
Прошивка: Linux SAedition MOD

Рейтинг: 400



EXL,
нужно именно для баша было тогда.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 11.3.2018, 16:48


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



С интересной проблемой столкнулся: хотел взять терминальный вывод от програмы
Код
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

...но у маководов именно так.

Сообщение отредактировал VINRARUS - 25.9.2021, 9:06
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
EXL
сообщение 14.3.2018, 18:12


Rock The Microphone
********

Группа: Администраторы
Сообщений: 3 144
Регистрация: 12.5.2007
Из: г. Новосибирск
Пользователь №: 134 652
Модель телефона: XT894 / XT897
Прошивка: Различные


Настроение:
null



Рейтинг: 4654



VINRARUS,
Похоже на какой-то баг, если честно.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fill.sa
сообщение 16.3.2018, 9:39


Гуру
******

Группа: Разработчики
Сообщений: 1 240
Регистрация: 8.2.2011
Из: Беларусь
Пользователь №: 223 758
Модель телефона: z6 V8
Прошивка: Linux SAedition MOD

Рейтинг: 400



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

Самое главное это как-можно простой и короткой командой сделать чтобы не нагружать систему.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 17.3.2018, 14:32


Куратор темы

Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1211



Я не помню как на 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
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Написание скриптов #!/bin/sh for UNIX, Кто поможет? · Motorola на Linux OS · Forum
 

7 страниц V « < 4 5 6 7 >
Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 4.7.2025, 23:46

Форум живёт: