LINUX.ORG.RU

Вопрос по shell


0

1

Всем привет и хорошего вечера.

Возникла необходимость сделать следующую штуку в posix /bin/sh.
Надо проверить наличие всех трёх параметров и если хоть одного не хватает сделать echo «Oh, no! O_o» и выйти. Делаю:

[ -z $1 ] && [ -z $2 ] && [ -z $3 ] && { echo «Oh, no! O_o» ; exit 1 ; }

Ведёт себя не так как я хочу.

ЧЯДНТ?

Проверь наличие только третьего. Если его нет, значит какого-то не хватает.

TGZ ★★★★
()
Ответ на: комментарий от joy4eg

Не хочу использовать if then else fi. Не хочу. Просто не хочу.

Othniel
() автор топика
Ответ на: комментарий от TGZ

>Проверь наличие только третьего. Если его нет, значит какого-то не хватает.

Ты гениален! Действительно :) Но всё же, на будущее хотелось бы знать, а то вдруг буду проверять переменные.

Othniel
() автор топика

> [ -z $1 ] && [ -z $2 ] && [ -z $3 ] && { echo «Oh, no! O_o» ; exit 1 ; }

[ -z «$1» ] && [ -z «$2» ] && [ -z «$3» ] && { echo «Oh, no! O_o» ; exit 1 ; }

Но, как правильно заметили:

[ -z «$3» ] && { echo «Oh, no! O_o» ; exit 1 ; }

sin_a ★★★★★
()
Ответ на: комментарий от joy4eg

Точно! Тоже хороший вариант. Но И/ИЛИ тоже хочу научится делать.

Othniel
() автор топика
Ответ на: комментарий от outsider

>тут не надо exit 1

С чего бы это? Мне надо выйти из скрипта с кодом возврата 1.

Othniel
() автор топика
Ответ на: комментарий от Othniel

Кавычки не обязательны, но желательны, ибо если там будет некий символ, а не буква, вся проверка упадет с ошибкой...

joy4eg ★★★★★
()
Ответ на: комментарий от Othniel

На случай пустой переменной. Потому что тогда у -z не будет параметра, что очевидно будет являться синтаксической ошибкой.

sin_a ★★★★★
()

Не уверен насчет posix sh, но на rhel 6 такое работает:

[ «$#» -eq 3 ] && echo ok && exit 1

fagot ★★★★★
()
Ответ на: комментарий от joy4eg

>Кавычки не обязательны

Если речь идет о неконтролируемом пользовательском вводе и грамотных скриптах - то еще как обязательны :)

fagot ★★★★★
()

Надо проверить наличие всех трёх параметров и если хоть одного не хватает

Если хоть одного, а не всех трех, то надо использовать не &&, а ||. Нет?

botkin
()
Ответ на: комментарий от botkin

>Если хоть одного, а не всех трех, то надо использовать не &&, а ||.

Да.

Othniel
() автор топика

Всем отписавшимся спасибо.

Othniel
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.