2015-08-08 60 views
1

我正在编写一个应用程序脚本,它可以帮助用户绑定到我们服务器的打开目录(如果不存在的话)。它将测试命令的输出是否为空,并帮助删除任何旧的打开的目录并添加新的目录。在某些条件下不执行的命令

我遇到了一些问题,如果脚本遇到某些情况,我应该如何将新的域名添加到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)存在NEW服务器。没做什么。

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

请提供'dscl localhost -list/LDAPv3'的示例输出。 – Gene

+1

感谢您指出这一点,基因。根据要求添加样本输出。 – Tan

+0

“else”语句的第二个条件并不清楚,但是您什么时候认为'i'将等于0?'i'被设置为由'dscl'按顺序返回的每个单词,并且该输出似乎只包含域名,从来没有整数0. – chepner

回答

1

本声明:

[[ $i != 0 ]]; 

不检查变量为空。它只是验证它不等于整数0

而是尝试这样的事:

[[ ! -z $i ]] 

-z操作将检查字符串的长度为零。设置! -z将检查长度是否不为零。

+0

这样做更有意义了,我已经将它添加到了如果'dscl'不返回任何内容,似乎有助于添加新域名的主代码: 'if check_new return 0; then \t dsconfigldap -v -a {NOD} fi' – Tan

相关问题