スクリプトで sed コマンドを使用して、HOST で始まる行を検索し、一致するホスト名のパターンをチェックして、欠落しているホスト名を LDAP 構成ファイルに追加しようとしています。
LDAP.CONF のサンプル エントリ
HOST nzlsfn55.zeus.ghsewn.com nzlsfn60.zeus.ghsewn.com nznsfn60.zeus.ghsewn.com
sed を使用してパターンを検索し、不足しているエントリを追加する方法を教えてください。
ホストのリストがあり、不足しているホストを追加したい場合:
#!/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
私は自分のタスクを達成するために以下のコードを使用しました。私のコードにはもっと簡単な方法や改善が必要だと確信しています-皆さんの入力に感謝します
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
私はこれに使用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