motofan logo
26 страниц V « < 23 24 25 26 >        
> 

Написание скриптов #!/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
сообщение 25.9.2021, 22:25


Куратор темы

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

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

Рейтинг: 1211



Цитата(EXL @ Сегодня, 17:52)
* На MotoMAGX он нормально на дефолтном Shell отработает?

Да.
Цитата(EXL @ Сегодня, 17:52)
* Если да

ДА! smile.gif
Цитата(EXL @ Сегодня, 17:52)
* То есть откидываем последнее расширение.

Не, ну это элементарно:
Код
find ./ -type f -name "*.tar*" | while read FILE; do F="${FILE%.*}"; echo "$FILE ${F##*/}"; done

Цитата(EXL @ Сегодня, 17:52)
* А какой на MotoMAGX дефолтный Shell? Ash?

Он, с мотопатчем каким то.

Добавлено позже (26.9.2021, 1:27):
Цитата(EXL @ Вчера, 17:52)
* И xargs -0 тоже нельзя?

blind.gif Вроде можна:
Код
Mobilinux(TM) 4.1, Linux/armv6l 2.6.10_dev
MotoMAGX: LinuxJava 6.3, ZiniMOD beta 2
01:26:17 <_<
# xargs -help
xargs: invalid option -- h
BusyBox v1.01 (---) multi-call binary

Usage: xargs [COMMAND] [OPTIONS] [ARGS...]

Executes COMMAND on every item given by standard input.

Options:
        -r      Do not run command for empty readed lines
        -x      Exit if the size is exceeded
        -0      Input filenames are terminated by a null character
        -t      Print the command line on stderr before executing it.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
EXL
сообщение 26.9.2021, 5:29


Rock The Microphone
********

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


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



Рейтинг: 4609



VINRARUS,
Спасибо!

Цитата(VINRARUS @ Сегодня, 5:25)
* Он, с мотопатчем каким то.

Этот ash похоже входит в состав BusyBox?

Цитата(VINRARUS @ Сегодня, 5:25)
* blind.gif Вроде можна:

О, интересно! Тогда это должно работать?

Код

$ find ~/Downloads/test -type f -name "*.gz*" -print0 | xargs -0 -n1 sh -c 'echo "$0" `basename "$0" .gz`'
/home/exl/Downloads/test/filename.tar.gz filename.tar
/home/exl/Downloads/test/namefile.tar.gz namefile.tar
/home/exl/Downloads/test/file name.tar.gz file name.tar

$ find ~/Downloads/test/ -type f -name "*.tar*" -print0 | xargs -0 -n1 sh -c 'echo "$0" `basename "$0" | sed "s/\.tar//g"`'
/home/exl/Downloads/test/filename.tar.gz filename.gz
/home/exl/Downloads/test/namefile.tar.gz namefile.gz
/home/exl/Downloads/test/file name.tar.gz file name.gz

Осталось только узнать, есть ли параметр -print0 у find или busybox find в MotoMAGX grin.gif
Юзер в онлайне!В друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 26.9.2021, 9:41


Куратор темы

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

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

Рейтинг: 1211



Цитата(EXL @ Сегодня, 8:29)
* Этот ash похоже входит в состав BusyBox?

Да.
Код
  Mobilinux(TM) 4.1, Linux/armv6l 2.6.10_dev
MotoMAGX: LinuxJava 6.3, ZiniMOD beta 2
12:41:56 x_x
# busybox
BusyBox v1.01 (---) multi-call binary

Usage: busybox [function] [arguments]...
   or: [function] [arguments]...

        BusyBox is a multi-call binary that combines many common Unix
        utilities into a single executable.  Most people will create a
        link to busybox for each function they wish to use and BusyBox
        will act like whatever it was invoked as!

Currently defined functions:
        [, addgroup, adduser, arping, ash, awk, basename, bunzip2, busybox, bzcat, cat, chgrp, chmod, chown, chroot, chvt, clear, cmp, cp, cpio,
        crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser, devfsd, df, dirname, dmesg, dos2unix, du, dumpleases, echo, egrep, env,
        expr, false, fbset, fdisk, fgrep, find, fold, free, ftpget, ftpput, getty, grep, gunzip, gzip, halt, hdparm, head, hexdump, hostid, hostname,
        httpd, hwclock, id, ifconfig, ifdown, ifup, inetd, init, insmod, install, ip, ipaddr, ipcalc, iplink, iproute, iptunnel, kill, killall,
        klogd, last, length, linuxrc, ln, loadkmap, logger, login, logname, losetup, ls, lsmod, makedevs, md5sum, mesg, mkdir, mkfifo, mknod,
        mkswap, mktemp, modprobe, more, mount, mt, mv, nameif, nc, netstat, nslookup, od, openvt, passwd, patch, pidof, ping, ping6, pivot_root,
        poweroff, printf, ps, pwd, rdate, readlink, realpath, reboot, renice, reset, rm, rmdir, rmmod, route, rpm2cpio, run-parts, rx, sed, seq,
        sh, sha1sum, sleep, sort, start-stop-daemon, strings, stty, su, sulogin, swapoff, swapon, sync, sysctl, syslogd, tail, tar, tee, telnet,
        telnetd, test, tftp, time, top, touch, tr, traceroute, true, tty, udhcpc, udhcpd, umount, uname, uniq, unix2dos, unzip, uptime, usleep,
        uudecode, uuencode, vconfig, vi, vlock, watch, wc, wget, which, who, whoami, xargs, yes, zcat
[close]

Цитата(EXL @ Сегодня, 8:29)
* Осталось только узнать, есть ли параметр -print0 у find или busybox find в MotoMAGX

Нет.
Код
# find --help
BusyBox v1.01 (---) multi-call binary

Usage: find [PATH...] [EXPRESSION]

Search for files in a directory hierarchy.  The default PATH is
the current directory; default EXPRESSION is '-print'

EXPRESSION may consist of:
        -follow         Dereference symbolic links.
        -name PATTERN   File name (leading directories removed) matches PATTERN.
        -print          Print (default and assumed).

        -type X         Filetype matches X (where X is one of: f,d,l,b,c,...)
        -perm PERMS     Permissions match any of (+NNN); all of (-NNN);
                        or exactly (NNN)
        -mtime TIME     Modified time is greater than (+N); less than (-N);
                        or exactly (N) days

ps.gif А чего ты хоч достичь?

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


Rock The Microphone
********

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


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



Рейтинг: 4609



Цитата(VINRARUS @ Сегодня, 16:41)
* Нет

Ясно, спасибо! Тогда заюзаю твои команды.

Цитата(VINRARUS @ Сегодня, 16:41)
* ps.gif А чего ты хоч достичь?

Да немного облегчаю себе жизнь biggrin.gif
Юзер в онлайне!В друзьяВизиткаП/Я
К началу страницы
+Ответить
EXL
сообщение 3.10.2021, 22:07


Rock The Microphone
********

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


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



Рейтинг: 4609



VINRARUS,
А на MotoMAGX-телефонах вроде Z6 и ZN5 команда pidof доступна из коробки, или нужно её запускать типа busybox pidof как какой-нибудь tar?
Юзер в онлайне!В друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 9.10.2021, 14:13


Куратор темы

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

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

Рейтинг: 1211



EXL, ну судя по не меняющемся щотчике pid команда pidof это часть ash, то есть в скрипте не рождает новый процес, так как есть внутренней утилитой.
Но из под натива желательно через busybox pidof запускать, если не из под ash.

Сообщение отредактировал VINRARUS - 9.10.2021, 14:15
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
EXL
сообщение 9.10.2021, 16:22


Rock The Microphone
********

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


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



Рейтинг: 4609



VINRARUS,
Спасибо, я изначально сделал через busybox на всякий случай, но облажался подставив в команду полный путь вместо обычного имени программы, тут расписал этот случай: Софт для ZN5 и прочих MotoMAGX: MGX и PEP.

А получилось так потому что на старом ноуте под Fedora 33 команда:

Код
busybox pidof -s /usr/lib64/firefox/firefox
239377

Работала отлично. Тогда как на MotoMAGX если подставить полный путь, то pidof ничего не выдаст:

Код
# busybox pidof -s /usr/SYSqtapp/phone/phone

# busybox pidof -s phone
1108

И ещё, кстати, внутренняя pidof функция ash игнорирует параметр -s:
Код
# pidof phone
1108 1124 1201
# pidof -s phone
1108 1124 1201
# busybox pidof phone  
1108 1124 1201
# busybox pidof -s phone
1108

Тогда как на "большом брате" таких приколов нет, но видимо потому что там Bash.
Юзер в онлайне!В друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 9.10.2021, 16:45


Куратор темы

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

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

Рейтинг: 1211



Цитата(EXL @ Сегодня, 19:22)
* Тогда как на "большом брате" таких приколов нет, но видимо потому что там Bash.

В Bash нет встроеного pidof, оно внешнее. wink.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
EXL
сообщение 9.10.2021, 17:02


Rock The Microphone
********

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


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



Рейтинг: 4609



Цитата(VINRARUS @ Сегодня, 23:45)
* В Bash нет встроеного pidof, оно внешнее. wink.gif

Точно, в пакет procps-ng входит.
Код
$ rpm -qf /usr/bin/pidof
procps-ng-3.3.16-2.fc33.x86_64
Юзер в онлайне!В друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 9.10.2021, 17:14


Куратор темы

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

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

Рейтинг: 1211



EXL, так быстро проверяется:
Код
ps; pidof; ps

Если pid 2х ps на 1 отличается значит команда внутренняя, а если на 2 то скорее всего внешняя. smile.gif

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

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

 



Текстовая версия Сейчас: 24.4.2024, 8:42

Форум живёт: