ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [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