* [Comm] shell logical expressions
@ 2007-08-17 10:29 Eugene Prokopiev
2007-08-17 11:05 ` Michael Shigorin
2007-08-17 11:10 ` Denis Kirienko
0 siblings, 2 replies; 11+ messages in thread
From: Eugene Prokopiev @ 2007-08-17 10:29 UTC (permalink / raw)
To: Community
Здравствуйте!
Нужно выполнить несколько команд, если хотя бы одна вернула не 0, тоже
вернуть не 0 и выругаться. Делаю примерно так:
#!/bin/sh
[ `drbdadm state all | awk -F'/' '{print $1}'` == "Primary" ]
partition=$?
grep drbd0 /proc/mounts > /dev/null
filesystem=$?
if [ $partition != '0' ] || [ $filesystem != '0' ] ; then
mail -s "HAD Monitor fail" root << EOF
drbd state:
`cat /proc/drbd`
mount state:
`grep drbd0 /proc/mounts`
EOF
exit 1
else
exit 0
fi
Но не оставляет ощущение кривизны куска кода с if. Можно правильнее/проще?
--
С уважением,
Прокопьев Евгений
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] shell logical expressions
2007-08-17 10:29 [Comm] shell logical expressions Eugene Prokopiev
@ 2007-08-17 11:05 ` Michael Shigorin
2007-08-20 6:17 ` Eugene Prokopiev
2007-08-20 6:18 ` Eugene Prokopiev
2007-08-17 11:10 ` Denis Kirienko
1 sibling, 2 replies; 11+ messages in thread
From: Michael Shigorin @ 2007-08-17 11:05 UTC (permalink / raw)
To: Community
On Fri, Aug 17, 2007 at 02:29:05PM +0400, Eugene Prokopiev wrote:
> Нужно выполнить несколько команд, если хотя бы одна вернула не
> 0, тоже вернуть не 0 и выругаться. Делаю примерно так:
>
> #!/bin/sh
> [ `drbdadm state all | awk -F'/' '{print $1}'` == "Primary" ]
> partition=$?
> grep drbd0 /proc/mounts > /dev/null
> filesystem=$?
Я бы переписал где-то так:
[ `drbdadm state all | awk -F'/' '{print $1}'` == "Primary" ] \
&& grep drbd0 /proc/mounts > /dev/null \
&& exit 0
mail .....
Почитай скрипты из пакетов (с)авторства ldv@ и legion@ (в т.ч.
control, alterator-*) -- там много интересного можно подметить
;-)
У Лёши за последний год или два стиль очень интересный и сжатый
стал. При этом читается и работает.
> if [ $partition != '0' ] || [ $filesystem != '0' ] ; then
> mail -s "HAD Monitor fail" root << EOF
> drbd state:
> `cat /proc/drbd`
>
> mount state:
> `grep drbd0 /proc/mounts`
> EOF
> exit 1
> else
> exit 0
> fi
>
> Но не оставляет ощущение кривизны куска кода с if. Можно правильнее/проще?
>
--
---- WBR, Michael Shigorin <mike@altlinux.ru>
------ Linux.Kiev http://www.linux.kiev.ua/
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] shell logical expressions
2007-08-17 10:29 [Comm] shell logical expressions Eugene Prokopiev
2007-08-17 11:05 ` Michael Shigorin
@ 2007-08-17 11:10 ` Denis Kirienko
2007-08-20 6:25 ` Eugene Prokopiev
1 sibling, 1 reply; 11+ messages in thread
From: Denis Kirienko @ 2007-08-17 11:10 UTC (permalink / raw)
To: community
Eugene Prokopiev пишет:
> Здравствуйте!
>
> Нужно выполнить несколько команд, если хотя бы одна вернула не 0, тоже
> вернуть не 0 и выругаться. Делаю примерно так:
cmd1 && cmd2 || { echo "ERROR" ; exit 1 ; }
не подойдет?
--
Денис
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] shell logical expressions
2007-08-17 11:05 ` Michael Shigorin
@ 2007-08-20 6:17 ` Eugene Prokopiev
2007-08-20 8:37 ` Michael Shigorin
2007-08-20 6:18 ` Eugene Prokopiev
1 sibling, 1 reply; 11+ messages in thread
From: Eugene Prokopiev @ 2007-08-20 6:17 UTC (permalink / raw)
To: shigorin, ALT Linux Community
> Я бы переписал где-то так:
>
> [ `drbdadm state all | awk -F'/' '{print $1}'` == "Primary" ] \
> && grep drbd0 /proc/mounts > /dev/null \
> && exit 0
> mail .....
Т.е. exit 0 выполнится всегда? Это не то, что нужно
--
С уважением,
Прокопьев Евгений
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] shell logical expressions
2007-08-17 11:05 ` Michael Shigorin
2007-08-20 6:17 ` Eugene Prokopiev
@ 2007-08-20 6:18 ` Eugene Prokopiev
1 sibling, 0 replies; 11+ messages in thread
From: Eugene Prokopiev @ 2007-08-20 6:18 UTC (permalink / raw)
To: shigorin, ALT Linux Community
> Почитай скрипты из пакетов (с)авторства ldv@ и legion@ (в т.ч.
> control, alterator-*) -- там много интересного можно подметить
> ;-)
>
> У Лёши за последний год или два стиль очень интересный и сжатый
> стал. При этом читается и работает.
спасибо, почитаю
--
С уважением,
Прокопьев Евгений
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] shell logical expressions
2007-08-17 11:10 ` Denis Kirienko
@ 2007-08-20 6:25 ` Eugene Prokopiev
2007-08-20 7:48 ` Denis Kirienko
0 siblings, 1 reply; 11+ messages in thread
From: Eugene Prokopiev @ 2007-08-20 6:25 UTC (permalink / raw)
To: dk, ALT Linux Community
Denis Kirienko пишет:
> Eugene Prokopiev пишет:
>> Здравствуйте!
>>
>> Нужно выполнить несколько команд, если хотя бы одна вернула не 0, тоже
>> вернуть не 0 и выругаться. Делаю примерно так:
>
> cmd1 && cmd2 || { echo "ERROR" ; exit 1 ; }
>
> не подойдет?
если cmd1 или cmd2 (или обе вместе - и это уже постановке задачи не
удовлетворяет) вернули 0, выполнится то, что в {}, т.к. результат ИЛИ
еще не известен, т.е. вернется не 0
если cmd1 и cmd2 вернули не 0, то {} не выполнится, т.к. результат ИЛИ
уже известен, и ругани не будет, хотя вернется и правда не 0
--
С уважением,
Прокопьев Евгений
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] shell logical expressions
2007-08-20 6:25 ` Eugene Prokopiev
@ 2007-08-20 7:48 ` Denis Kirienko
2007-08-20 9:35 ` Eugene Prokopiev
0 siblings, 1 reply; 11+ messages in thread
From: Denis Kirienko @ 2007-08-20 7:48 UTC (permalink / raw)
To: community
Eugene Prokopiev пишет:
>>> Нужно выполнить несколько команд, если хотя бы одна вернула не 0, тоже
>>> вернуть не 0 и выругаться. Делаю примерно так:
>> cmd1 && cmd2 || { echo "ERROR" ; exit 1 ; }
>> не подойдет?
> если cmd1 или cmd2 (или обе вместе - и это уже постановке задачи не
> удовлетворяет) вернули 0, выполнится то, что в {}, т.к. результат ИЛИ
> еще не известен, т.е. вернется не 0
>
> если cmd1 и cmd2 вернули не 0, то {} не выполнится, т.к. результат ИЛИ
> уже известен, и ругани не будет, хотя вернется и правда не 0
Как раз наоборот. Если cmd1 и cmd2 вернули обе ноль, то {} не
выполняется и вернется 0.
Если хотя бы одна из cmd1 или cmd2 вернули не ноль, то выполняется {}.
Поэкспериментируйте, заменив команды на true (возвращает 0) и false
(возвращает 1).
Но Мишин вариант мне нравится больше.
--
Денис
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] shell logical expressions
2007-08-20 6:17 ` Eugene Prokopiev
@ 2007-08-20 8:37 ` Michael Shigorin
0 siblings, 0 replies; 11+ messages in thread
From: Michael Shigorin @ 2007-08-20 8:37 UTC (permalink / raw)
To: ALT Linux Community
On Mon, Aug 20, 2007 at 10:17:50AM +0400, Eugene Prokopiev wrote:
> >[ `drbdadm state all | awk -F'/' '{print $1}'` == "Primary" ] \
> >&& grep drbd0 /proc/mounts > /dev/null \
> >&& exit 0
> >mail .....
> Т.е. exit 0 выполнится всегда?
Нет. Проверь с заменой команд на true и false в комбинациях.
(я проверил дальше по треду, где были cmd1/cmd2)
--
---- WBR, Michael Shigorin <mike@altlinux.ru>
------ Linux.Kiev http://www.linux.kiev.ua/
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] shell logical expressions
2007-08-20 7:48 ` Denis Kirienko
@ 2007-08-20 9:35 ` Eugene Prokopiev
2007-08-20 9:45 ` Michael Shigorin
2007-08-20 10:01 ` Andrew Borodin
0 siblings, 2 replies; 11+ messages in thread
From: Eugene Prokopiev @ 2007-08-20 9:35 UTC (permalink / raw)
To: dk, ALT Linux Community
> Поэкспериментируйте, заменив команды на true (возвращает 0) и false
> (возвращает 1).
Ага! А я то думал, что 0 == false, а все остальное == true :)
В shell это, выходит совсем не так ;)
--
С уважением,
Прокопьев Евгений
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] shell logical expressions
2007-08-20 9:35 ` Eugene Prokopiev
@ 2007-08-20 9:45 ` Michael Shigorin
2007-08-20 10:01 ` Andrew Borodin
1 sibling, 0 replies; 11+ messages in thread
From: Michael Shigorin @ 2007-08-20 9:45 UTC (permalink / raw)
To: ALT Linux Community
On Mon, Aug 20, 2007 at 01:35:58PM +0400, Eugene Prokopiev wrote:
> > Поэкспериментируйте, заменив команды на true (возвращает 0) и
> > false (возвращает 1).
> Ага! А я то думал, что 0 == false, а все остальное == true :)
> В shell это, выходит совсем не так ;)
И в C это тоже не так... :)
"Правда всегда одна", а вот ошибок можно насовершать разных.
Соответственно и кодов ошибок надо иметь достаточно.
--
---- WBR, Michael Shigorin <mike@altlinux.ru>
------ Linux.Kiev http://www.linux.kiev.ua/
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] shell logical expressions
2007-08-20 9:35 ` Eugene Prokopiev
2007-08-20 9:45 ` Michael Shigorin
@ 2007-08-20 10:01 ` Andrew Borodin
1 sibling, 0 replies; 11+ messages in thread
From: Andrew Borodin @ 2007-08-20 10:01 UTC (permalink / raw)
To: ALT Linux Community
On Mon, Aug 20, 2007 at 01:35:58PM +0400, Eugene Prokopiev wrote:
> > Поэкспериментируйте, заменив команды на true (возвращает 0) и false
> > (возвращает 1).
> Ага! А я то думал, что 0 == false, а все остальное == true :)
> В shell это, выходит совсем не так ;)
Принято, что если программа завершается нормально, то она
возвращает 0. Это Для test это true.
--
С уважением,
А. Бородин.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2007-08-20 10:01 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-08-17 10:29 [Comm] shell logical expressions Eugene Prokopiev
2007-08-17 11:05 ` Michael Shigorin
2007-08-20 6:17 ` Eugene Prokopiev
2007-08-20 8:37 ` Michael Shigorin
2007-08-20 6:18 ` Eugene Prokopiev
2007-08-17 11:10 ` Denis Kirienko
2007-08-20 6:25 ` Eugene Prokopiev
2007-08-20 7:48 ` Denis Kirienko
2007-08-20 9:35 ` Eugene Prokopiev
2007-08-20 9:45 ` Michael Shigorin
2007-08-20 10:01 ` Andrew Borodin
ALT Linux Community general discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
public-inbox-index community
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.community
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git