用于检查客户端计算机上LDAP.CONF上的LDAP条目数并更新缺少的条目的脚本

时间:2012-10-01 22:22:09

标签: linux bash sed

我正在尝试在脚本中使用sed命令来搜索以HOST开头的行,然后检查主机名的匹配模式,并在LDAP配置文件中添加缺少的模式。

在LDAP.CONF中输入示例

HOST nzlsfn55.zeus.ghsewn.com nzlsfn60.zeus.ghsewn.com  nznsfn60.zeus.ghsewn.com

现在我如何搜索模式并使用sed添加缺少的条目,我们将非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

如果您有一个主机列表,并希望添加缺少的主机:

#!/bin/bash

for arg; do
    grep &>/dev/null "^HOST \+.*\<$arg\>" ||
        sed -i "s/$/ $arg/" /etc/ldap/ldap.conf
done

使用如下脚本:

./script host1 host2 host3

在测试前备份您的/etc/ldap/ldap.conf。 (未在那里测试)

修改

要符合您的新要求,请参阅以下代码:

#!/bin/bash

hosts="host1 host2 host3"

for arg in $hosts; do
    grep &>/dev/null "^HOST \+.*\<$arg\>" ||
        sed -i "s/$/ $arg/" /etc/ldap/ldap.conf
done

答案 1 :(得分:0)

我会使用GNU awk。假设您在名为hosts.txt的文件中有一个主机列表(以行分隔),您可以运行以下命令:

awk -f script.awk hosts.txt /etc/ldap/ldap.conf > new_ldap.conf

script.awk的内容:

FNR==NR {
    hosts[$0]++
    next
}

/^HOST/ {
    for (j=2; j<=NF; j++) {
        array[$j]++
    }
    for (i in hosts) {
        if (!(i in array)) {
            $0 = $0 OFS i
        }
    }
    delete array
}1

答案 2 :(得分:0)

我使用下面的代码来完成我的任务,我相信我的代码需要更简单的方法或改进 - 感谢大家的输入

if [-e /etc/openldap/ldap.conf];     然后

        entries=`grep -i host /etc/openldap/ldap.conf`

        count=`grep -i host /etc/openldap/ldap.conf | wc -w`


else

        echo " no ldap.conf file available "
        exit

fi

#if condition checking for no host entry

if [ $count -eq 0 ];
then


        echo " no host entry available in config file "
        exit

fi


#if condition checking for less than 3 ldap entries

if [ $count -eq 4 ];
then

        echo " `hostname` has the following ldap entries : $entries "
else

        #less then than 3 entries will get updated here
        if [ $count -lt 4 ];
        then

        sed -i.bak 's/^host.*\|^HOST.*/host nzlsfn55.zeus.ghsewn.com nzlsfn60.zeus.ghsewn.com  nznsfn60.zeus.ghsewn.com/' /etc/openldap/ldap.conf

        echo " Sucessfully added LDAP hosts"

        fi