Объединеие условий в операторе if

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
BAV_Lug
сержант
Сообщения: 299
Зарегистрирован: 2006-06-02 15:38:28
Откуда: Харьков

Объединеие условий в операторе if

Непрочитанное сообщение BAV_Lug » 2008-12-10 11:19:30

Вопрос собственно такой
Как правильно записать такую проверку

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

if [ ! -r /var/run/mpd1.pid ] и [ ! -r /var/run/mpd2.pid ]
then 
......

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Объединеие условий в операторе if

Непрочитанное сообщение hizel » 2008-12-10 13:37:46

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

if [ ! -r /var/run/mpd1.pid -a ! -r /var/run/mpd2.pid ];
then
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Гость
проходил мимо

Re: Объединеие условий в операторе if

Непрочитанное сообщение Гость » 2008-12-10 14:11:03

еще можно

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

if [ ! -r /var/run/mpd1.pid ] && [ ! -r /var/run/mpd2.pid ]
then
    # code
fi
или

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

if ! { [ -r /var/run/mpd1.pid ] || [ -r /var/run/mpd2.pid ]; }
then
    # code
fi
или

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

if ! [ -r /var/run/mpd1.pid -o -r /var/run/mpd2.pid ]
then
    # code
fi
или

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

if [ ! \( -r /var/run/mpd1.pid -o -r /var/run/mpd2.pid \) ]
then
    # code
fi
или

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

if ! [ \( -r /var/run/mpd1.pid -o -r /var/run/mpd2.pid \) ]
then
    # code
fi

а все конструкцию вида

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

if list
then
    # code
fi
можно заменить на

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

list && {
    # code
}
т.е. можно даже так

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

[ ! -r /var/run/mpd1.pid ] && [ ! -r /var/run/mpd2.pid ] && {
    # code
}
или так

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

[ ! \( -r /var/run/mpd1.pid -o -r /var/run/mpd2.pid \) ] && {
    # code
}
ps, вариаций очень много, но во всех случаех играет роль только exit code = 0 (для логического `и') и exit code > 0 (для логического `или'). Т.е. совершенно необязательно использовать test(1).

BAV_Lug
сержант
Сообщения: 299
Зарегистрирован: 2006-06-02 15:38:28
Откуда: Харьков

Re: Объединеие условий в операторе if

Непрочитанное сообщение BAV_Lug » 2008-12-10 15:27:10

Всем спасибо за ответы