BASH Scripting

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

BASH Scripting

Сообщение KiWi »

Спасибо сказали:
Аватара пользователя
sergeyvp
Сообщения: 807
ОС: ubuntu

Re: BASH Scripting

Сообщение sergeyvp »

IFL писал(а):
21.05.2007 11:46
Продолжение следует...

Так может лучше это всё в виде статей оформить и разместить здесь ссылки?
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: BASH Scripting

Сообщение KiWi »

sergeyvp писал(а):
21.05.2007 11:53
Так может лучше это всё в виде статей оформить и разместить здесь ссылки?

Всё это писалось специально для этого раздела.
И размещено "досрочно" только из-за того, что кое-кому приспичило, а здесь уже есть что почитать.

Так что какие-то перемещения -- только после окончательного завершения и вылизывания.
Спасибо сказали:
Аватара пользователя
4yKoTkA
Сообщения: 183
ОС: Gentoo GNU/Linux.FreeBSD

Re: BASH Scripting

Сообщение 4yKoTkA »

Хорошо, сухо и доходчиво.. Спасибо большое.
Спасибо сказали:
Mellon
Сообщения: 655
Статус: Powered by Gentoo
ОС: Gentoo

Re: BASH Scripting

Сообщение Mellon »

вот такая штука :)
есть


надо получить

Код: Выделить всё

abc def
123 456
Некоммерческий файлообмен не может сравниваться с кражей, так как кража лишает кого-то возможности использовать украденный объект. ©
--------------------
Переворачиватель пингвинов
Спасибо сказали:
Аватара пользователя
MadDog
Бывший модератор
Сообщения: 2298
Статус: Добрый банщик

Re: BASH Scripting

Сообщение MadDog »

а "abc" и "def" лежат в файликах? Если да, то man paste
MadDog's Blog
Внимательно читать: Как правильно задавать вопросы
No fate but what we make
Спасибо сказали:
Mellon
Сообщения: 655
Статус: Powered by Gentoo
ОС: Gentoo

Re: BASH Scripting

Сообщение Mellon »

не обязательно, в первую очередь это два списка из которых надо получить третий "расположив рядом" элементы первоначальных списков
В принципе, можно списки занести во временные файлы, но хотелось бы без лишней суеты.
Например:

Код: Выделить всё

var1="abc
123"
var2="def
456"

"сложить" в третью переменную

Код: Выделить всё

var3="abc def
123 456"


как-то полгода назад такую же задачку решал, но забыл напрочь :(
Некоммерческий файлообмен не может сравниваться с кражей, так как кража лишает кого-то возможности использовать украденный объект. ©
--------------------
Переворачиватель пингвинов
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: BASH Scripting

Сообщение sash-kan »

Mellon,

Код: Выделить всё

var3=$(paste <(echo $var1|xargs -n 1 echo) <(echo $var2|xargs -n 1 echo))
так длинно потому, что в переменные вставляются не \n, а пробелы.
если запихнуть \n, тогда короче:

Код: Выделить всё

var3=$(paste <(echo $var1) <(echo $var2))

p.s. но изобретать велосипед, согласен, очень увлекательно. сам этим занимаюсь регулярно. у меня под столом уже склад велосипедов.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Mellon
Сообщения: 655
Статус: Powered by Gentoo
ОС: Gentoo

Re: BASH Scripting

Сообщение Mellon »

круто! спасибо :) да... как-то зашоренность мешает оч сильно, ты это хорошо с перенаправлением придумал, до меня как-то не доходило :D
Некоммерческий файлообмен не может сравниваться с кражей, так как кража лишает кого-то возможности использовать украденный объект. ©
--------------------
Переворачиватель пингвинов
Спасибо сказали:
Аватара пользователя
AMD
Сообщения: 478
Статус: Maestro
ОС: Linux Kubuntu 7.10

Re: BASH Scripting

Сообщение AMD »

4yKoTkA писал(а):
21.05.2007 12:42
Хорошо, сухо и доходчиво.. Спасибо большое.


Я бы даже сказал !!!СУПЕР!!! - давно хотел выучить bash все руки не доходили а здесь все так хорошо обьяснено

Кстати [if] [case] [while] [goto] [repeat] [for] чтото подобное есть в bashe?

Я бы непротив если ктото бы обьяснил это

А также запуск программ под sudo или su какие особености?
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: BASH Scripting

Сообщение eduard_pustobaev »

Всё есть. Но есть ещё и Bash programing introduction howto на русском. Не говоря уж об Advanced bash scripting guide.
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: BASH Scripting

Сообщение diesel »

AMD писал(а):
22.06.2007 01:23
4yKoTkA писал(а):
21.05.2007 12:42
Хорошо, сухо и доходчиво.. Спасибо большое.


Я бы даже сказал !!!СУПЕР!!! - давно хотел выучить bash все руки не доходили а здесь все так хорошо обьяснено

Кстати [if] [case] [while] [goto] [repeat] [for] чтото подобное есть в bashe?

Я бы непротив если ктото бы обьяснил это

Есть. я думаю это будет в следующих выпусках :)

Могу примерно показать.

Код: Выделить всё

if [ "$test" == "smth" ]; then
    echo "OK";
else
    echo "Not OK";
fi


фигурные скобки на самом деле это вызов команды test(т.е. можно писать test). к чему говорю - для того чтобы посмотреть все возможные значения при сравнении ( ==, != , -f, -d ) можно смотреть в man test. Правда насколько я понимаю bash использует built-in test.

Код: Выделить всё

 i=0; while [ $i -ne "10" ]; do  i=$((i+1)); done; echo $i


фактически test возвращает просто 1 или 0, поэтому вместо test может быть любая операция, ведущая себя аналогично:

Код: Выделить всё

ls| while read i; do echo $i; done


и вот так тоже можно напечатать список файлов в директории. :)

и вот так:

Код: Выделить всё

for i in `ls`; do  echo "$i"; done



а можно делать условия и без if'ов:

Код: Выделить всё

grep -E '^diesel' /etc/passwd >/dev/null && echo "есть такая учетная запись на этом компьютере" || echo "нет такой учетной записи на этом компьютере"


&& - "и" || - "или"; особенность выполнения такая же как и в скриптовых языках, т.е. "или" выполняется подряд до первой единицы, "и" выполняется подряд до первого нуля (или до конца выражения есс-но).

примерно так.

AMD писал(а):
22.06.2007 01:23
А также запуск программ под sudo или su какие особености?

это к шеллу прямого отношения не имеет.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: BASH Scripting

Сообщение t.t »

diesel писал(а):
22.06.2007 02:12
фигурные скобки на самом деле это вызов команды test(т.е. можно писать test). к чему говорю - для того чтобы посмотреть все возможные значения при сравнении ( ==, != , -f, -d ) можно смотреть в man test.
man [
(;
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: BASH Scripting

Сообщение diesel »

t.t писал(а):
07.08.2007 14:29
diesel писал(а):
22.06.2007 02:12
фигурные скобки на самом деле это вызов команды test(т.е. можно писать test). к чему говорю - для того чтобы посмотреть все возможные значения при сравнении ( ==, != , -f, -d ) можно смотреть в man test.
man [
(;

к сожалению не везде. в Debian - есть такой ман, а вот в RHEL4, Fedora7(подозреваю и в других клонах RH), не позаботились :(
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: BASH Scripting

Сообщение Liksys »

http://gazette.linux.ru.net/rus/articles/a...uide/index.html
Оч полезный документ.
Спасибо сказали:
Аватара пользователя
Red Gremlin
Сообщения: 512
Статус: самоучка
ОС: Rosa 2016 Fresh

Re: BASH Scripting

Сообщение Red Gremlin »

diesel писал(а):
08.08.2007 01:10
t.t писал(а):
07.08.2007 14:29
diesel писал(а):
22.06.2007 02:12
фигурные скобки на самом деле это вызов команды test(т.е. можно писать test). к чему говорю - для того чтобы посмотреть все возможные значения при сравнении ( ==, != , -f, -d ) можно смотреть в man test.
man [
(;

к сожалению не везде. в Debian - есть такой ман, а вот в RHEL4, Fedora7(подозреваю и в других клонах RH), не позаботились :(


В мандриве тоже не позаботились
"В мире есть случайность, есть предопределенность и есть то, что ты планируешь совершить."
Спасибо сказали:
Аватара пользователя
Voice
Сообщения: 1073
Статус: столлманист
ОС: Debian GNU/Linux

Re: BASH Scripting

Сообщение Voice »

diesel писал(а):
08.08.2007 01:10
к сожалению не везде. в Debian - есть такой ман, а вот в RHEL4, Fedora7(подозреваю и в других клонах RH), не позаботились :(

А man test?
(Нет возможности проверить)
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
Спасибо сказали:
Vishay
Сообщения: 12

Re: BASH Scripting

Сообщение Vishay »

Hello All !

А можно ли на bash написать скрипт, который будет обрабатывать командную строку вида:

"1a 07 ed 01 5A 99 3F 04 7 6C 0D A",

проверяющий, что каждый аргумент командной строки имеет длину не более 2 символов, интерпретируя каждый аргумент как пару шестнадцатеричных символов, конвертирующий этот аргумент в байт и записывающий эти байты в файл, либо перенаправляющий в стандартный ввод другой программы.
М.б. в Unix'e есть что-то подобное уже готовое в перечне утилит или bash-скриптов. Только требуется компактная реализация, а не что-то типа objcopy ?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: BASH Scripting

Сообщение sash-kan »

Vishay, на bash-е это будет очень тяжело. если вообще возможно. проще с применением других общераспространенных программ.
что-то типа этого:

Shell

$ echo '1a 07 ed 01 5A 99 3F 04 7 6C 0D A'|xargs -n 1 echo |while read a; \ do b=$(echo $a|sed -e 's/\([0-9a-fA-F]\{2\}\)\|.*/\1/'); if [ "$b" != "" ] ; then echo -ne \\x$b; fi; done|hexdump 0000000 071a 01ed 995a 043f 0d6c 000000a
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Keiosu
Сообщения: 4
ОС: Win32/Moonshine

Re: BASH Scripting

Сообщение Keiosu »

Здравствуйте. Мне нужно написать скрипт, который выводил бы подробную информацию об определенном процессе. Ну ка кэто сделать впринципи понятно. может есть какая-нибудь команда, которая выводит подробную инфу о процессе. Вот переменной присвоить результат ее выполнения и выводить. Но мне еще надо сделать возможность выбора столбцов отображения информации о процессе. Т.е. либо показывать кем он запущен, PPID, STIME и т.д. либо нет. Вот тут и вопрос, как бы так сделать? Может в баш есть циклы, тогда можно было бы узнавать значение каждого элемента массива и если это пробел или таб, значит начинается новый столбец и принимать решение выводить дальше или нет. Но это сложновато. Есть у кого предложения как мне справиться с моей задачей?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: BASH Scripting

Сообщение sash-kan »

Keiosu, man ps на предмет опции -o
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Keiosu
Сообщения: 4
ОС: Win32/Moonshine

Re: BASH Scripting

Сообщение Keiosu »

Спасибо, ps -p 2557 -o ...
то что мне нужно, но вот еще одна проблема.
Возможность менять столбцы дана ползовательлю во время выполнения работы программы.
т.е. просто ввести в терминал
ps -p 2557 -o pid,tid,class,rtprio,ni,pri,psr,pcpu,pmem,stat,wchan:14,comm
либо
ps -p 2557 -o pid,tid,class,rtprio,ni,pri,psr,pcpu,pmem
для смены столбцов не получится.
Надо бы как-то формировать эту команду и запускать на выполнение. т.е. фактически команда должна из строки превращаться в команду и выполняться в терминале.
Я вот не знаю как так можно %) Есть у кого идеи?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: BASH Scripting

Сообщение sash-kan »

Код: Выделить всё

$ a="ps -p 2557 -o pid,tid,class,rtprio,ni,pri,psr,pcpu,pmem"
$ $(echo $a)
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Keiosu
Сообщения: 4
ОС: Win32/Moonshine

Re: BASH Scripting

Сообщение Keiosu »

Хм, ну да... Спасибо!
И последний, наеврное самый сложный вопрос %)
Как бы организовать отрисовку графичеких менюшек как в фаре? Вроде фар все это выводит в текстовом режиме и там все это нарисовано обычными символами. Можете привести пример как нарисовать так хотя бы один или несколько символов, там квадрат или прямоугольник
__________
|пункт 1***|
|пункт 2***|
|*********|
|*********|
|*********|
|*********|
|_________|

Как-то так *CRAZY*
Спасибо сказали:
Аватара пользователя
drujebober
Сообщения: 179
ОС: Debian GNU/Linux lenny

Re: BASH Scripting

Сообщение drujebober »

dialog посмотри, им как раз можно делать менюшки в стиле фар
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: BASH Scripting

Сообщение diesel »

drujebober писал(а):
09.12.2007 00:17
dialog посмотри, им как раз можно делать менюшки в стиле фар

угу :) и не только (:
http://muaddeep.googlepages.com/dialog_example.png
Спасибо сказали:
Keiosu
Сообщения: 4
ОС: Win32/Moonshine

Re: BASH Scripting

Сообщение Keiosu »

Ух ты. Просто замечательно : )
Если есть у кого примеры таких диалогов, оставьте здесь пожалуйста. Чем больше примеров, тем качественнее конечный результат :wacko:
Спасибо сказали:
bartelby
Сообщения: 9
ОС: debian/FreeBSD

Re: BASH Scripting

Сообщение bartelby »

Мне надо дописать в файл "123" после строки содержащее слово "test"
содержания файла "print"

cat print >> 123 (так допишет в конец файла)
а как сделать чтобы он в середину файла писал
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: BASH Scripting

Сообщение Portnov »

sed -i -e '/test/ r print' 123

info sed.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Blackover
Сообщения: 35

Re: BASH Scripting

Сообщение Blackover »

Есть текстовый файл mirrorlist (список серверов) и текстовая переменная $filename (название файла).
Как прочитать и сложить с $name каждую строчку файла, получив новую строку с путями, разделенными пробелами (для дальнейшего параллельного скачивания)? никак не врублюсь в синтаксис awk
Спасибо сказали: