программирование на *sh (bash scripting)
Модератор: Bizdelnick
-
zrd
- Сообщения: 21
программирование на *sh
Требуется руководство для создания пакетных исполняемых файлов с условным переходом.
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: программирование на *sh
В смысле? Имеется ввиду баш-скриптинг? Если да то.. а поискать? Конкретно, в этом сообщении ссылка.(zrd @ Четверг, 11 Ноября 2004, 13:27) писал(а):для создания пакетных исполняемых файлов с условным переходом
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
Bolverk
- Бывший модератор
- Сообщения: 1571
- ОС: Cygwin
Re: программирование на *sh
По программированию на bash есть много howto. Должны быть и для других шеллов, но если глубоко не копать, то разницы не должно быть особой. Еще вариант - почитать те скрипты, которые у тебя установлены в /bin, /usr/bin, еще где.
покажет все шелл-скрипты в /bin и /usr/bin.
Код: Выделить всё
grep -HI "^#\!/bin/sh" /bin/* /usr/bin/* 2>>/dev/null-
zrd
- Сообщения: 21
Re: программирование на *sh
Спасибо огромное.
В качестве оправдания, что не воспользовался поиском, могу лишь сказать, что в в nix системах я... ну не зря же я в соответствующем разделе создал топик
Будем разбираться. :thumbsup:
В качестве оправдания, что не воспользовался поиском, могу лишь сказать, что в в nix системах я... ну не зря же я в соответствующем разделе создал топик
Будем разбираться. :thumbsup:
-
zrd
- Сообщения: 21
Re: программирование на *sh
Здравствуйте.
Мне необходимо в текстовом файле найти определенную строку, далее, в зависимости от результата нахождения оной следует выполнять или не выполнять (по условному переходу) определенные операции.
Помогите пожалуйста разобраться с grep. Я вроде уже все перечитал, что нашел, но никак не могу понять как пользоваться выходом. Хотелось бы значение выхода передать переменной и потом уже на основании ее значения задавать условие. Если есть какой вариант рациональней, посоветуйте, плз.
В хелпе говорится о стандартых выходах (0-нашел, 1-не нашел, 2-ошибка), но как их использовать там ничего не сказано.
Мне необходимо в текстовом файле найти определенную строку, далее, в зависимости от результата нахождения оной следует выполнять или не выполнять (по условному переходу) определенные операции.
Помогите пожалуйста разобраться с grep. Я вроде уже все перечитал, что нашел, но никак не могу понять как пользоваться выходом. Хотелось бы значение выхода передать переменной и потом уже на основании ее значения задавать условие. Если есть какой вариант рациональней, посоветуйте, плз.
В хелпе говорится о стандартых выходах (0-нашел, 1-не нашел, 2-ошибка), но как их использовать там ничего не сказано.
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: программирование на *sh
Это не греп, это шелл. Заключите команду в обратные апострофы: $STR=`grep 1 2`(zrd @ Четверг, 18 Ноября 2004, 12:07) писал(а):Помогите пожалуйста разобраться с grep. Я вроде уже все перечитал, что нашел, но никак не могу понять как пользоваться выходом. Хотелось бы значение выхода передать переменной и потом уже на основании ее значения задавать условие.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
Skull
- Модератор
- Сообщения: 2089
- ОС: ALT Linux
Re: программирование на *sh
(zrd @ Четверг, 18 Ноября 2004, 12:07) писал(а):Мне необходимо в текстовом файле найти определенную строку, далее, в зависимости от результата нахождения оной следует выполнять или не выполнять (по условному переходу) определенные операции.
Так как при нахождении grep возвращает строку - это очень просто:
Код: Выделить всё
if [ `grep 'text' file` ]
then
echo 'Found'
else
echo 'Not found'
fiКод: Выделить всё
grep 'text' file >/dev/null;if [ $? = '0' ];then echo 'Found'; else echo 'Not found';fiSkull
-
Bolverk
- Бывший модератор
- Сообщения: 1571
- ОС: Cygwin
Re: программирование на *sh
Skull
:thumbsup: Только что вышел на $? в man bash, секция PARAMETERS, подсекция Special Parameters.
:thumbsup: Только что вышел на $? в man bash, секция PARAMETERS, подсекция Special Parameters.
-
zrd
- Сообщения: 21
Re: программирование на *sh
Выдает ошибку
Вот листинг:
Что я не так сделал?
zrd добавил в 18.11.2004 13:11
Насколько я понимаю, в конструкции
часть заменяет ключ -q.
То есть, конструкция служит для подавления вывода в stdout.
Так?
Код: Выделить всё
=: command not foundВот листинг:
Код: Выделить всё
#!/bin/bash
$STR = `grep "qwerty qwer" "text.txt"`
echo $STR
if [ "$STR" = 0 ]; then
echo String is present
else
echo String is absent
fi
exit 0Что я не так сделал?
zrd добавил в 18.11.2004 13:11
(Skull @ Четверг, 18 Ноября 2004, 12:35) писал(а):или же проверять после выполнения grep'а значение переменной $?:
Код: Выделить всё
grep 'text' file >/dev/null;if [ $? = '0' ];then echo 'Found'; else echo 'Not found';fi
Насколько я понимаю, в конструкции
Код: Выделить всё
grep 'text' file >/dev/nullчасть
Код: Выделить всё
>/dev/nullТо есть, конструкция служит для подавления вывода в stdout.
Так?
-
Bolverk
- Бывший модератор
- Сообщения: 1571
- ОС: Cygwin
Re: программирование на *sh
Не, не, не. t.t перепутал output команды и ее exit status...
Вот наваял по-быстрому, не исключены глупые ошибки в деталях, но идея, думаю, понятна.
А man bash все-таки почитай... перед сном... вместо снотворного...
Вот наваял по-быстрому, не исключены глупые ошибки в деталях, но идея, думаю, понятна.
Код: Выделить всё
#!/bin/bash
STR="qwerty"
grep -q $STR text.txt
STATUS=$?
[ $STATUS -eq 0 ] && echo String is present
[ $STATUS -eq 1 ] && echo String is absent
[ $STATUS -eq 2 ] && echo File not foundА man bash все-таки почитай... перед сном... вместо снотворного...
-
zrd
- Сообщения: 21
Re: программирование на *sh
Получилось!
В таком виде все замечательно работает.
Всем большущее спасибо
Код: Выделить всё
#!/bin/bash
grep -q "qwerty qwer" "text.txt"
if [ $? = '0' ]
then
echo 'String is present'
else
echo 'String is absent'
fi
exit 0В таком виде все замечательно работает.
Всем большущее спасибо
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: программирование на *sh
Ага, соображаю сейчас плохо.(Bolverk @ Четверг, 18 Ноября 2004, 13:16) писал(а):Не, не, не. t.t перепутал output команды и ее exit status...
P.S. А тему закрывать не надо. Вдруг ещё какой смежный вопрос..
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
Bolverk
- Бывший модератор
- Сообщения: 1571
- ОС: Cygwin
Re: программирование на *sh
(zrd @ Четверг, 18 Ноября 2004, 12:37) писал(а):Код: Выделить всё
#!/bin/bash grep -q "qwerty qwer" "text.txt" if [ $? = '0' ] then echo 'String is present' else echo 'String is absent'
Или файла нет
Я то думал тебе что-то более продвинутое надо... Для такого не надо выяснять exit status, просто
Код: Выделить всё
if grep -q "qwerty qwer" "text.txt"; then echo 'String is present'; else echo 'String is absent'; fi-
madskull
- Сообщения: 1019
- Статус: Экс-металлюга
Re: программирование на *sh
(Bolverk @ Четверг, 18 Ноября 2004, 23:22) писал(а):Я то думал тебе что-то более продвинутое надо... Для такого не надо выяснять exit status, просто
Код: Выделить всё
if grep -q "qwerty qwer" "text.txt"; then echo 'String is present'; else echo 'String is absent'; fi
Простите, пожалуйста...
Код: Выделить всё
grep -q "qwerty qwer" "text.txt" && echo 'String is present' || echo 'String is absent'З.Ы. А я даже и не знал про -q ...
Век живи - век учись, а всё равно дурнем помрешь
ArchLinux / IceWM
-
Bolverk
- Бывший модератор
- Сообщения: 1571
- ОС: Cygwin
Re: программирование на *sh
За что?
(madskull @ Четверг, 18 Ноября 2004, 23:06) писал(а):З.Ы. А я даже и не знал про -q ...
Век живи - век учись, а всё равно дурнем помрешь
Кто бы уж говорил! Вот это я долго не забуду. Очень хороший пример того, что можно сделать на shell!
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: программирование на *sh
кстати, я тоже всегда пишу конструкции типа [ expr ] && {...} || {...} вместо if...then...else
не знаю почему... привычка....
не знаю почему... привычка....
слава роботам!
-
zrd
- Сообщения: 21
Re: программирование на *sh
(elide @ Пятница, 19 Ноября 2004, 0:17) писал(а):кстати, я тоже всегда пишу конструкции типа [ expr ] && {...} || {...} вместо if...then...else
не знаю почему... привычка....
А можно попросить растолковать на пальцах? Ну, для этих... как их... для чайников - вот!
-
madskull
- Сообщения: 1019
- Статус: Экс-металлюга
Re: программирование на *sh
Код: Выделить всё
block1 && block2 || block3А что тут растолковывать?
После выполнения block1 интерпретатор анализирует код возврата, и если истина (0) то выполняется block2. Если ложь (!=0) - то block2 пропускается и отрабатывается block3.
Причем, внимание.
Если написать block1 || block3 && block2 , то результат будет совсем другим.
Если после block1 будет истина, то, как и ожидается, отработает block2
А если ложь, то отработает block3 и по его (блока 3) коду возврата будет решаться судьба block2.
ArchLinux / IceWM
-
zrd
- Сообщения: 21
Re: программирование на *sh
(madskull @ Пятница, 19 Ноября 2004, 12:15) писал(а):Код: Выделить всё
block1 && block2 || block3
А что тут растолковывать?..
Так оно действительно гораздо интересней.
Будем осваивать -).
Спасибо!