BASH Scripting
Модераторы: /dev/random, Модераторы разделов
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
-
sergeyvp
- Сообщения: 807
- ОС: ubuntu
Re: BASH Scripting
Так может лучше это всё в виде статей оформить и разместить здесь ссылки?
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: BASH Scripting
Всё это писалось специально для этого раздела.
И размещено "досрочно" только из-за того, что кое-кому приспичило, а здесь уже есть что почитать.
Так что какие-то перемещения -- только после окончательного завершения и вылизывания.
-
4yKoTkA
- Сообщения: 183
- ОС: Gentoo GNU/Linux.FreeBSD
Re: BASH Scripting
Хорошо, сухо и доходчиво.. Спасибо большое.
-
Mellon
- Сообщения: 655
- Статус: Powered by Gentoo
- ОС: Gentoo
Re: BASH Scripting
вот такая штука 
есть
надо получить
есть
Код: Выделить всё
abc
123Код: Выделить всё
def
456надо получить
Код: Выделить всё
abc def
123 456Некоммерческий файлообмен не может сравниваться с кражей, так как кража лишает кого-то возможности использовать украденный объект. ©
--------------------
Переворачиватель пингвинов
--------------------
Переворачиватель пингвинов
-
MadDog
- Бывший модератор
- Сообщения: 2298
- Статус: Добрый банщик
Re: BASH Scripting
а "abc" и "def" лежат в файликах? Если да, то man paste
-
Mellon
- Сообщения: 655
- Статус: Powered by Gentoo
- ОС: Gentoo
Re: BASH Scripting
не обязательно, в первую очередь это два списка из которых надо получить третий "расположив рядом" элементы первоначальных списков
В принципе, можно списки занести во временные файлы, но хотелось бы без лишней суеты.
Например:
"сложить" в третью переменную
как-то полгода назад такую же задачку решал, но забыл напрочь
В принципе, можно списки занести во временные файлы, но хотелось бы без лишней суеты.
Например:
Код: Выделить всё
var1="abc
123"
var2="def
456""сложить" в третью переменную
Код: Выделить всё
var3="abc def
123 456"как-то полгода назад такую же задачку решал, но забыл напрочь
Некоммерческий файлообмен не может сравниваться с кражей, так как кража лишает кого-то возможности использовать украденный объект. ©
--------------------
Переворачиватель пингвинов
--------------------
Переворачиватель пингвинов
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: BASH Scripting
Mellon, так длинно потому, что в переменные вставляются не \n, а пробелы.
если запихнуть \n, тогда короче:
p.s. но изобретать велосипед, согласен, очень увлекательно. сам этим занимаюсь регулярно. у меня под столом уже склад велосипедов.
Код: Выделить всё
var3=$(paste <(echo $var1|xargs -n 1 echo) <(echo $var2|xargs -n 1 echo))если запихнуть \n, тогда короче:
Код: Выделить всё
var3=$(paste <(echo $var1) <(echo $var2))p.s. но изобретать велосипед, согласен, очень увлекательно. сам этим занимаюсь регулярно. у меня под столом уже склад велосипедов.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
Mellon
- Сообщения: 655
- Статус: Powered by Gentoo
- ОС: Gentoo
Re: BASH Scripting
круто! спасибо
да... как-то зашоренность мешает оч сильно, ты это хорошо с перенаправлением придумал, до меня как-то не доходило 
Некоммерческий файлообмен не может сравниваться с кражей, так как кража лишает кого-то возможности использовать украденный объект. ©
--------------------
Переворачиватель пингвинов
--------------------
Переворачиватель пингвинов
-
AMD
- Сообщения: 478
- Статус: Maestro
- ОС: Linux Kubuntu 7.10
Re: BASH Scripting
Я бы даже сказал !!!СУПЕР!!! - давно хотел выучить bash все руки не доходили а здесь все так хорошо обьяснено
Кстати [if] [case] [while] [goto] [repeat] [for] чтото подобное есть в bashe?
Я бы непротив если ктото бы обьяснил это
А также запуск программ под sudo или su какие особености?
-
eduard_pustobaev
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
Re: BASH Scripting
Всё есть. Но есть ещё и Bash programing introduction howto на русском. Не говоря уж об Advanced bash scripting guide.
В дисгармонии со вселенной.
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: BASH Scripting
Есть. я думаю это будет в следующих выпусках
Могу примерно показать.
Код: Выделить всё
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 "нет такой учетной записи на этом компьютере"&& - "и" || - "или"; особенность выполнения такая же как и в скриптовых языках, т.е. "или" выполняется подряд до первой единицы, "и" выполняется подряд до первого нуля (или до конца выражения есс-но).
примерно так.
это к шеллу прямого отношения не имеет.
Спасибо сказали:
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: BASH Scripting
к сожалению не везде. в Debian - есть такой ман, а вот в RHEL4, Fedora7(подозреваю и в других клонах RH), не позаботились
-
Liksys
- Сообщения: 2910
Re: BASH Scripting
http://gazette.linux.ru.net/rus/articles/a...uide/index.html
Оч полезный документ.
Оч полезный документ.
-
Red Gremlin
- Сообщения: 512
- Статус: самоучка
- ОС: Rosa 2016 Fresh
Re: BASH Scripting
В мандриве тоже не позаботились
"В мире есть случайность, есть предопределенность и есть то, что ты планируешь совершить."
-
Voice
- Сообщения: 1073
- Статус: столлманист
- ОС: Debian GNU/Linux
Re: BASH Scripting
А man test?
(Нет возможности проверить)
"И может собственных Платонов и быстрых разумом Невтонов российская земля рождать."
М. В. Ломоносов
М. В. Ломоносов
-
Vishay
- Сообщения: 12
Re: BASH Scripting
Hello All !
А можно ли на bash написать скрипт, который будет обрабатывать командную строку вида:
"1a 07 ed 01 5A 99 3F 04 7 6C 0D A",
проверяющий, что каждый аргумент командной строки имеет длину не более 2 символов, интерпретируя каждый аргумент как пару шестнадцатеричных символов, конвертирующий этот аргумент в байт и записывающий эти байты в файл, либо перенаправляющий в стандартный ввод другой программы.
М.б. в Unix'e есть что-то подобное уже готовое в перечне утилит или bash-скриптов. Только требуется компактная реализация, а не что-то типа objcopy ?
А можно ли на 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
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
Здравствуйте. Мне нужно написать скрипт, который выводил бы подробную информацию об определенном процессе. Ну ка кэто сделать впринципи понятно. может есть какая-нибудь команда, которая выводит подробную инфу о процессе. Вот переменной присвоить результат ее выполнения и выводить. Но мне еще надо сделать возможность выбора столбцов отображения информации о процессе. Т.е. либо показывать кем он запущен, PPID, STIME и т.д. либо нет. Вот тут и вопрос, как бы так сделать? Может в баш есть циклы, тогда можно было бы узнавать значение каждого элемента массива и если это пробел или таб, значит начинается новый столбец и принимать решение выводить дальше или нет. Но это сложновато. Есть у кого предложения как мне справиться с моей задачей?
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: BASH Scripting
Keiosu, man ps на предмет опции -o
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
Keiosu
- Сообщения: 4
- ОС: Win32/Moonshine
Re: BASH Scripting
Спасибо, 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
для смены столбцов не получится.
Надо бы как-то формировать эту команду и запускать на выполнение. т.е. фактически команда должна из строки превращаться в команду и выполняться в терминале.
Я вот не знаю как так можно %) Есть у кого идеи?
то что мне нужно, но вот еще одна проблема.
Возможность менять столбцы дана ползовательлю во время выполнения работы программы.
т.е. просто ввести в терминал
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
Код: Выделить всё
$ a="ps -p 2557 -o pid,tid,class,rtprio,ni,pri,psr,pcpu,pmem"
$ $(echo $a)Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
Keiosu
- Сообщения: 4
- ОС: Win32/Moonshine
Re: BASH Scripting
Хм, ну да... Спасибо!
И последний, наеврное самый сложный вопрос %)
Как бы организовать отрисовку графичеких менюшек как в фаре? Вроде фар все это выводит в текстовом режиме и там все это нарисовано обычными символами. Можете привести пример как нарисовать так хотя бы один или несколько символов, там квадрат или прямоугольник
__________
|пункт 1***|
|пункт 2***|
|*********|
|*********|
|*********|
|*********|
|_________|
Как-то так *CRAZY*
И последний, наеврное самый сложный вопрос %)
Как бы организовать отрисовку графичеких менюшек как в фаре? Вроде фар все это выводит в текстовом режиме и там все это нарисовано обычными символами. Можете привести пример как нарисовать так хотя бы один или несколько символов, там квадрат или прямоугольник
__________
|пункт 1***|
|пункт 2***|
|*********|
|*********|
|*********|
|*********|
|_________|
Как-то так *CRAZY*
-
drujebober
- Сообщения: 179
- ОС: Debian GNU/Linux lenny
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: BASH Scripting
-
Keiosu
- Сообщения: 4
- ОС: Win32/Moonshine
Re: BASH Scripting
Ух ты. Просто замечательно : )
Если есть у кого примеры таких диалогов, оставьте здесь пожалуйста. Чем больше примеров, тем качественнее конечный результат
Если есть у кого примеры таких диалогов, оставьте здесь пожалуйста. Чем больше примеров, тем качественнее конечный результат
-
bartelby
- Сообщения: 9
- ОС: debian/FreeBSD
Re: BASH Scripting
Мне надо дописать в файл "123" после строки содержащее слово "test"
содержания файла "print"
cat print >> 123 (так допишет в конец файла)
а как сделать чтобы он в середину файла писал
содержания файла "print"
cat print >> 123 (так допишет в конец файла)
а как сделать чтобы он в середину файла писал
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: BASH Scripting
sed -i -e '/test/ r print' 123
info sed.
info sed.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
Blackover
- Сообщения: 35
Re: BASH Scripting
Есть текстовый файл mirrorlist (список серверов) и текстовая переменная $filename (название файла).
Как прочитать и сложить с $name каждую строчку файла, получив новую строку с путями, разделенными пробелами (для дальнейшего параллельного скачивания)? никак не врублюсь в синтаксис awk
Как прочитать и сложить с $name каждую строчку файла, получив новую строку с путями, разделенными пробелами (для дальнейшего параллельного скачивания)? никак не врублюсь в синтаксис awk