20 страниц V « < 17 18 19 20 >        
> Написание скриптов #!/bin/sh for UNIX, Кто поможет?
VINRARUS
сообщение 17.6.2011, 17:56 Закрепленное сообщение!


Куратор темы

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

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

Рейтинг: 1075



Ура! В теме появилася шапочка. 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 - 22.3.2016, 11:08
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DDA-E398
сообщение 19.11.2013, 10:11


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

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


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



Рейтинг: 327



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


Куратор темы

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

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

Рейтинг: 1075



Немного обновил шапку. 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 052
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1075



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


Куратор темы

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

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

Рейтинг: 1075



Написал вот програмку для сравнения времени жизни заряда акумуляторов. 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 килобайт ) Кол-во скачиваний: 36
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 2.10.2015, 13:34


Куратор темы

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

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

Рейтинг: 1075



Вот вам написанный мною бенчмарк проверки реальной скорости записи на флешку, это оказалось намного сложнее чем я думал. 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 052
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1075



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

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


Куратор темы

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

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

Рейтинг: 1075



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


Куратор темы

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

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

Рейтинг: 1075



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

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


Куратор темы

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

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

Рейтинг: 1075



Проблема в цикле 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 052
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044

Рейтинг: 1075



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

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

20 страниц V « < 17 18 19 20 >
Ответ в темуСоздание новой темы
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 25.3.2017, 5:50

Форум живёт: