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

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

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


Куратор темы

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

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

Рейтинг: 1165



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


Rock The Microphone
********

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


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







Цитата(VINRARUS @ 25.9.2021, 20:44) *
На тебе "однострочник" без мучений с утилитами:
Код
find ./ -type f -name "*.tar*" | while read FILE; do F1="${FILE%.tar*}"; F2="${FILE##*.tar}"; echo "$FILE ${F1##*/}$F2"; done

wink.gif

Кстати, я правильное понимаю, что если вместо echo в этом однострочнике будет использоваться утилита, которая принимает на вход два аргумента, а не строку, по типу ./app <arg1> <arg2>, то нужно будет сделать так?

Код
echo "$FILE" "${F1##*/}$F2"
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 10.10.2021, 16:59


Куратор темы

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

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

Рейтинг: 1165



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


Куратор темы

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

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

Рейтинг: 1165



shell функцыя имитирующая awk '{print $4}' (тоесть выводит номер столбца в строке разделённой пробелами (разделители в переменной TAB настраиваются)), но в отличии от отдельной утилиты срабатывает намного шустрее внутри shell програмы.
В переменную $AWK выводится столбец указаного номера, а в $GAWK начиная от указаного номера до конца (например для ls полезно, когда имена могут иметь пробелы).
Код
#!/bin/sh
AWK(){
#bu VINRARUS
#use: AWK "V I N R A R U S" 4
#out in $AWK and $GAWK
TAB=" "
N=1
AWK="$1 "
until [ "$N" = "$2" ]
do
    AWK="${AWK#*$TAB}"
    GAWK="${AWK#$TAB}"
    until [ "$AWK" = "$GAWK" ]
    do
        AWK="$GAWK"
        GAWK="${AWK#$TAB}"
    done
    N="$((N+1))"
done
GAWK="${GAWK%%$TAB}"
AWK="${AWK%%$TAB*}"
}

Примеры использования:
Цитата
AWK "V I N R A R U S" 4
echo "$AWK"
#R
echo "$GAWK"
R A R U S

Так например можна узнать размер файла в shell:
Цитата
INFO=`ls -l /file.txt`
AWK "$INFO" 5
echo "$AWK"
#1234
AWK "$INFO" 9
echo "$GAWK"
#file.txt

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

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

 



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

Форум живёт: