Команда не выполняется при определенных условиях

Я пишу сценарий для приложения, которое поможет пользователям связываться с открытым каталогом нашего сервера, если он не существует. Он проверит, является ли вывод команды пустым или нет, и поможет удалить любой старый открытый каталог и добавить новый.

У меня возникают проблемы с тем, как мне следует добавить новое доменное имя на Open Directory Server, если сценарий испытывает определенные условия. Что я делаю неправильно? Смотрите вывод для примеров...

#!/bin/bash -x 

# FUNCTIONS

# Verify that foo.com exists
function check_new () {

# LOCAL VARIABLES
OLD="bar.com"
NEW="foo.com"

for i in `dscl localhost -list /LDAPv3`; do
    if [[ $i !=  0 ]]; then
        dsconfigldap -v -r ${OLD} && dsconfigldap -v -a ${NEW}
    else 
        dsconfigldap -v -a ${NEW}
    fi
done
}

# MAIN CODE 

exec 1> >(logger -s -t $(basename $0)) 2>&1
check_new; exit 0 

ОБРАЗЕЦ ВЫХОДА

Случай 1) Серверы не существуют (ничего не возвращает, если мы не расширим $? статус выхода. Мы должны добавить новое доменное имя.

$ dscl localhost -list /LDAPv3; echo $?
0

Случай 2) Старый сервер существует. Мы должны удалить старый сервер и добавить новый.

$ dscl localhost -list /LDAPv3; echo $?
bar.com
0

Случай 3) Старые и новые серверы существуют. Игнорируйте новый сервер и удалите старый.

$ dscl localhost -list /LDAPv3; echo $?
foo.com
bar.com
0

Случай 4) НОВЫЙ сервер существует. Ничего не делать.

$ dscl localhost -list /LDAPv3; echo $?
foo.com
0

1 ответ

Это утверждение:

[[ $i !=  0 ]];

Не проверяет, является ли переменная пустой. Это только подтверждает, что оно не равно целому числу 0.

Вместо этого попробуйте что-то вроде этого:

[[ ! -z $i ]]

-z Оператор проверит, равна ли длина строки нулю. настройка ! -z проверим, если длина не равна нулю.

Другие вопросы по тегам