Test if $1 OR $2 are null with "-z" - BASH

Значение% h в файле конфигурации должно быть задокументировано на странице руководства соответствующей программы. Вот несколько примеров для % h :

  • smb.conf - имя хоста в Интернете, на котором работает Samba.

  • date - то же, что и% b (сокращенное название месяца в локали (например, январь))

  • ssh_config - различное (например, имя удаленного хоста)

  • sshd_config - домашний каталог пользователь аутентифицируется

1
06.08.2016, 03:56
4 ответа

Используйте || вместо && , например,

if [ -z "$var" ] || [ -z "$var1" ]

В руководстве bash это объясняется:

И и Списки OR - это последовательности одного или нескольких конвейеров, разделенных управляющими операторами && и || соответственно. Списки И и ИЛИ выполняются с левой ассоциативностью.

5
29.04.2021, 00:11

То, что вы просите, уже упоминалось:

if [ -z "$var" ] || [ -z "$var1" ]; then
  echo "one or both are empty."
fi

Однако стоит упомянуть, что если это единственное использование этих переменных, вам не нужно устанавливать их как переменные.

Вы можете проверить статус выхода команды непосредственно в if построит - и на самом деле [ - это команда, а не специальный токен оболочки. (Это в точности эквивалентно команде test ; см. man [)

Насколько я понимаю, вывод вашей первой команды sudo ДОЛЖЕН содержать "Оптимальный "и вывод второго ДОЛЖЕН содержать" сбой ", в противном случае вы хотите вызвать предупреждение.

На мой взгляд, вы могли бы сделать это гораздо яснее, например так:

if sudo /usr/StorMan/arcconf GETCONFIG 1 LD 0 | grep -q Optimal &&
   sudo /usr/StorMan/arcconf GETCONFIG 1 LD 1 | grep -q fail
then
  echo "All is well."
else
  echo "Error condition!"
fi
2
29.04.2021, 00:11

Если вы хотите, чтобы «либо» стало пустым, попробуйте ИЛИ || ?

if [ -z "$var" ] || [ -z "$var1" ]

... Неужели это так просто?

1
29.04.2021, 00:11

Два решения являются:

if [[ -z $a || -z $b ]];      ### (not A) OR (not B)
if ! [[ $a && $b ]];          ### not (A and B)

более переносимыми:

if [ -z "$a" ] || [ -z "$b" ];
if ! ( [ "$a" ] && [ "$b" ] );

Эти параметры могут работать, но отклонены POSIX (> 4 аргумента: результаты не указаны.):

if [ -z "$a" -o -z "$b" ];
if [ ! \( "$a" -a "$b" \) ];
1
29.04.2021, 00:11

Теги

Похожие вопросы