motofan logo
26 страниц V « < 19 20 21 22 23 > »         
> 

Написание скриптов #!/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
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
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 килобайт ) Кол-во скачиваний: 60
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
fill.sa
сообщение 2.2.2018, 18:20


Гуру
******

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

Рейтинг: 400



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


Rock The Microphone
********

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


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



Рейтинг: 4598.5



Цитата(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 226
Регистрация: 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
********

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


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



Рейтинг: 4598.5



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


Гуру
******

Группа: Разработчики
Сообщений: 1 226
Регистрация: 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
 

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

 



Текстовая версия Сейчас: 28.3.2024, 9:22

Форум живёт: