命令未在某些条件下执行

时间:2015-08-08 01:39:59

标签: macos bash shell scripting dscl

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

如果脚本遇到某些条件,我会遇到如何向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 

SAMPLE OUTPUT

案例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 个答案:

答案 0 :(得分:1)

本声明:

[[ $i !=  0 ]];

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

而是尝试这样的事情:

[[ ! -z $i ]]

-z运算符会检查字符串的 长度 是否为零。设置! -z将检查长度是否为零。