Команда не выполняется при определенных условиях
Я пишу сценарий для приложения, которое поможет пользователям связываться с открытым каталогом нашего сервера, если он не существует. Он проверит, является ли вывод команды пустым или нет, и поможет удалить любой старый открытый каталог и добавить новый.
У меня возникают проблемы с тем, как мне следует добавить новое доменное имя на 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
проверим, если длина не равна нулю.