read -p "Enter your name of rocommunity string you wish to set and press [ENTER]: " string
sed -i '/rocommunity/s/public/$string/' /opt/adapter/Adapter/snmp/conf/snmpd.conf
here the value of string is "spider..Now do i use to replace with sed command as mentioned above.
---------- Post updated at 12:53 AM ---------- Previous update was at 12:31 AM ----------
the script runs succesfully but the value is not replaced to i pass on when prompted for.
[root@Mediaspire siddhesh]# ./rommonity_new.sh
`/opt/adapter/Adapter/snmp/conf/snmpd.conf' -> `/var/tmp/snmpd.conf_27Mar2012'
`/opt/adapter/ManagementTool/conf/MTInternalConfig.properties' -> `/var/tmp/MTInternalConfig.properties_27Mar2012'
Hello, You are about to change the rocommunity string in /opt/adapter/Adapter/snmp/conf/snmpd.conf.
Enter your name of rocommunitry string you wish to set andpress [ENTER]:data
It replace the one specified in sed command but not the value for it.
Please advice.
Show the input you have and the output you want. Your sed expression may not be right -- without seeing the data it's supposed to match and change, I really can't tell.
Also show the current contents of your script.
I really don't reccomend using things like sed -i without backing up the originals first. Destroying your original configuration files by accident would be a big problem.
#Defining Variable
#------------------------
IP_LIST=/root/IP_LIST
ADAPTER_HOME=/opt/adapter
SNMP=/opt/adapter/Adapter/snmp/conf/snmpd.conf
BACKUP_DIR=/var/tmp
DATE=`date +%Y%m%d%H%M%S`
LOG=/root/community_logs
TMP=/tmp/value
#Backing Up Orginal Files
#-------------------------
echo "Backing up the original configuration file to $BACKUP_DIR" > $LOG.$DATE
cp -pv $ADAPTER_HOME/Adapter/snmp/conf/snmpd.conf $BACKUP_DIR/snmpd.conf_$(date +%d%b%Y)
cp -pv $ADAPTER_HOME/ManagementTool/conf/MTInternalConfig.properties $BACKUP_DIR/MTInternalConfig.properties_$(date +%d%b%Y)
echo "Orignal Log file back-up done succesfully" >$LOG.$DATE
echo "Hello, You are about to change the rocommunity string in "/opt/adapter/Adapter/snmp/conf/snmpd.conf"."
read -p "Enter your name of rocommunitry string you wish to set andpress [ENTER]:" string
sed -i "/rocommunity/s/public/$string/" /opt/adapter/Adapter/snmp/conf/snmpd.conf
exit 0
I want the value which i enter to be replace in /opt/adapter/Adapter/snmp/conf/snmpd.conf file for rocommunity variable.
I also have a IP_LIST file which has ip addresses defined for all node. how do i get this sed command u use the same.
It works for me without "read" variable
IP_LIST=<path_to_file>
for ipaddr in $(cat IP_LIST); do
ssh ${ipaddr} "sed -i '/rocommunity/s/public/sp1der/' /opt/adapter/Adapter/snmp/conf/snmpd.conf"
done
How do i incorporate in my script
IP_LIST=/root/IP_LIST
read STRING
for ipaddr in $(cat IP_LIST); do
ssh ${ipaddr}sed -i "s/rocommunity public/rocommunity $STRING/" /opt/adapter/Adapter/snmp/conf/snmpd.conf
When executed it give error as below
Hello, You are about to change the rocommunity string in /opt/adapter/Adapter/snmp/conf/snmpd.conf.
sp1der
./rommonity_new.sh: line 68: syntax error: unexpected end of file
[root@Mediaspire siddhesh]#
Please advice.
-Siddhesh
---------- Post updated at 11:38 AM ---------- Previous update was at 07:33 AM ----------
Hello,
The script worked well.
I need following information. The below mentioned script changes the value of variable rocommunity from public to sp1der on all nodes.
#!/bin/bash
#########################################################################################################
# Shellscript : rocommunity_change.sh - To change the community string
# Version : V1.0
# Owner : Siddhesh Khavnekar <siddhesh.khavnekar@mobixell.com>
# Date : 2012-03-28
# Category : Files Management
#########################################################################################################
# Description : This scipt will change rocommuniy from snmpd.conf on all nodes
# IP_LIST : Locating all your remote servers' ip addresses in ip_file one per line!
#########################################################################################################
#Defining Variable
#------------------------
IP_LIST=/root/IP_LIST
ADAPTER_HOME=/opt/adapter
SNMP=/opt/adapter/Adapter/snmp/conf/snmpd.conf
BACKUP_DIR=/var/tmp
DATE=`date +%Y%m%d%H%M%S`
LOG=/root/community_logs
TMP=/tmp/value
#Backing Up Orginal Files
#-------------------------
echo "Backing up the original configuration file to $BACKUP_DIR" >> $LOG.$DATE
cp -pv $ADAPTER_HOME/Adapter/snmp/conf/snmpd.conf $BACKUP_DIR/snmpd.conf_$(date +%d%b%Y)
cp -pv $ADAPTER_HOME/ManagementTool/conf/MTInternalConfig.properties $BACKUP_DIR/MTInternalConfig.properties_$(date +%d%b%Y)
echo "Orignal config file back-up done succesfully" >> $LOG.$DATE
echo "Hello, Please enter the name for you wish to set for variable rocommunity string in "/opt/adapter/Adapter/snmp/conf/snmpd.conf"."
read STRING
for ipaddr in $(cat $IP_LIST); do
ssh ${ipaddr} "sed -i 's/rocommunity public/rocommunity $STRING/' /opt/adapter/Adapter/snmp/conf/snmpd.conf"
done
echo "Hello, Please enter the name for you wish to set for variable rocommunity string in "/opt/adapter/Adapter/snmp/conf/snmpd.conf"."
read STRING
for ipaddr in $(cat $IP_LIST); do
ssh ${ipaddr} "sed -i 's/rocommunity public/rocommunity $STRING/' /opt/adapter/Adapter/snmp/conf/snmpd1.conf"
done
#Verification of changes done.
#-------------------------------------
grep -w 'ServerSNMPGetArgs' $ADAPTER_HOME/Adapter/snmp/conf/snmpd.conf | grep -w sp1der >> /dev/null
if
[ $(echo $?) = 0 ]; then
echo "rocommunity string set to sp1der sucessfully in MTInternalConfig.properties for ServerSNMPGetArgs." >> $LOG.$DATE
else
echo "Could not set the rocommunity string to sp1der in MTInternalConfig.properties for ServerSNMPGetArgs. Check the file permission." >> $LOG.$DATE
fi
exit 0
Now in the verfication part it verifies for only one node on which the script is running. I want this to very on all the nodes where it was changed earlier. The IP addresses are already mentioned in IP_LIST file.
#Verification of changes done.
#-------------------------------------
grep -w 'rocommunity' $ADAPTER_HOME/Adapter/snmp/conf/snmpd.conf | grep -w sp1der >> /dev/null
if
[ $(echo $?) = 0 ]; then
echo "rocommunity string set to sp1der sucessfully in MTInternalConfig.properties for ServerSNMPGetArgs." >> $LOG.$DATE
else
echo "Could not set the rocommunity string to sp1der in MTInternalConfig.properties for ServerSNMPGetArgs. Check the file permission." >> $LOG.$DATE
fi
exit 0
Need to change the above mentioned part in code. Please advice.
Your code contains many useless uses of cat and useless uses of backticks. If the list of IP's grows large enough, or any of the hostnames contain spaces, your script may malfunction.
Instead of for X in $(cat foo) you should generally do
while read X
do
...
done <inputfile
which can read from any size of file without problems and won't split on spaces, just lines.
Also, you don't need to check the value of $? here. If you put the grep straight into the if-statement itself the effect is the same. So:
while read IP
do
if ssh "$IP" grep "'^ *rocommunity *spider *$'" $ADAPTER_HOME/Adapter/snmp/conf/snmpd.conf >/dev/null </dev/null
then
echo "$IP rocommunity set to spider"
else
echo "$IP rocommunity not set to spider!"
fi
# stdin for the entire loop will be $IP_LIST, so the read reads from that file by default
# stdout for entire loop will be $LOG.$DATE, so the echo appends to that file by default
done < $IP_LIST >> $LOG.$DATE