Pulling correct value from Mapfile

Hi all,

I am trying to pull one value from a Mapfile, but the result is that I am getting all the values. The Mapfile maps the host name from the Backup Server to the host name in our Network Monitoring Server, as shown here:

Mapfile

cat zabbixhosts 
Helpdesk-fd:Server_Helpdesk
Knowledge-fd:Server_Knowledge
BaculaServer-fd:Server_Bacula
Zabbix-fd:Server_Zabbix_1.4.2

The section of script that is failing is here:

client=$(tail -n 38 /var/lib/bacula/log | grep -m 1 -F "Client" | awk -F" " '{ print $2; }')
echo Client is $client
echo

# get hostname from the Hostsfile
ZABBIX_HOST=`grep "[$client]" $ZABBIX_HOSTSFILE`

if [ $? -eq 0 ]; then
        hostname=`echo "$ZABBIX_HOST" | cut -f2 -d:`
else
        hostname=""
fi
echo Hostname is $hostname

When I run that script the output is as follows:

./bacula2zabbix.sh 
Client is "BaculaServer-fd"

Hostname is Server_Helpdesk Server_Knowledge Server_Bacula Server_Zabbix_1.4.2

Any advice would be greatly appreciated.
Thanks.

I tried the same code snippet.The result is

Client is "BaculaServer-fd"

Hostname is Server_Bacula

ZABBIX_HOSTSFILE="path of map file"
I made two changes:

1.Initialized ZABBIX_HOSTSFILE to map file name

2.Removed []
grep "[$client]" $ZABBIX_HOSTSFILE
grep "$client" $ZABBIX_HOSTSFILE

Thanks for the quick reply.

When you say 'initialize' the host file name, I guess you mean do I have this:

ZABBIX_HOSTSFILE="/etc/bacula/zabbixhosts";

Yes, I have that already. That's why there is a result to the output in the first post.

When I remove the [ ] as suggested, the output is now:

Client is "BaculaServer-fd"

Hostname is

Any more ideas?

hostname=`grep $client zabbixhosts | cut -f2 -d:`

I tried to simulate your scenario in my linux machine. Assuming that your client variable contains <BaculaServer-fd >.
From the above code, variable hostname contains Server_Bacula if grep is successfull and will contain no value if it fails. Something like this....

$ cat zabbixhosts
Helpdesk-fd:Server_Helpdesk
Knowledge-fd:Server_Knowledge
BaculaServer-fd:Server_Bacula
Zabbix-fd:Server_Zabbix_1.4.2
 
$ echo $client
sai
 
$  hostname=`grep $client zabbixhosts | cut -f2 -d:` ; echo $hostname
 
$ client="BaculaServer-fd"
 
$ hostname=`grep $client zabbixhosts | cut -f2 -d:` ; echo $hostname
Server_Bacula
 
$ hostname=`grep -w $client zabbixhosts | cut -f2 -d:`; echo $hostname
Server_Bacula
 

reddybs, thanks for your reply.

If I change "[$client]" to $client, then I get no hostname output.
If I use -w with grep, then I get no hostname output.

So now I have this, but still the output is incorrect.

echo Client is $client
echo

# get hostname from the Hostsfile
hostname=`grep "[$client]" $ZABBIX_HOSTSFILE | cut -f2 -d:` ; echo $hostname

and the output:

Client is "BaculaServer-fd"

Server_Helpdesk Server_Knowledge Server_Bacula Server_Zabbix_1.4.2

Any more ideas?