Sponsored Content
Top Forums Shell Programming and Scripting Help it works but its to SLOW Post 302178725 by Garlandxj on Wednesday 26th of March 2008 08:59:03 AM
Old 03-26-2008
Help it works but its to SLOW

I am a novice at shell scripting. I have managed to cobble together a script that does exactly what I need it to do. However I am gathering information from 700+ devices. This script takes hours to complete the task. Is there a better way of doing it than what I have listed here? This script processes line by line from the file. Might there be a way to process multiple lines at the same time? Any help would be great.

I would also like to hear feed back about the script itself. How did I do for my first unix script, what would make it better.
I have posted the working script below. (community strings changed of course)

NOTE: Has to be shell script, Perl is on the box but I don't have access to it.

Code:
#

#======================================================================#
#This section tests for the file device.log, and removes if it exists  #
#======================================================================#
if [ device.log ]
then
rm device.log
fi
cat adoa.txt | while read device              
do
#======================================================================#
#This section will pull the ip address from DNS and assign the value   #
#To the variable "ip".  It will then test to see if the variable "ip"  #
#Has a Null (value of no length) or if it contains data. If a value is #
#Found it is stored in the variable "dns" If no data is found in the   #
#variable "ip" it will assign the string value of "Not in DNS"  to the #
#variable "dns"                                                        #
#======================================================================#
#
	ip=`(host $device | awk ' /has/ {print $4}')` 
	if [ "$ip" ]
	then 
		dns="$ip"
#
#		
#
#
#======================================================================#
#This section will Ping the variable "device" and record a yes or no   #
#Answer in the variable "routable". Error messages such as unknown     #
#Host are sent to /dev/null to prevent them from displaying            #
#======================================================================#
#
	answer=`(ping -c 1 -q -w 2 -n  $device 2>/dev/null | grep received | awk '{print $4}')`
	if
        [ $answer = 0 ];
        then answer="NO"
        else answer="YES"
        fi
#
#======================================================================#
#This section will test the read and read/write snmp community strings #
#Yes or No answer is stored in the variable "snmpread" and "snmpwrite" #
#This section also collects the device system name and stores it in    #
#the variable "routername"
#======================================================================#
#
	if
	[ $answer = "YES" ];
        then

	routername=`(snmpget -t 2 -r 0 -Oqv -Os -v 2c -c (Read only community string) $device 2>/dev/null  SNMPv2-MIB::sysName.0)`
        if [ "$routername" = "" ];
        then snmpread="NO"
	routername="N/A"
        else snmpread="YES"
        fi
        snmpwrite=`(snmpget -t 2 -r 0 -Oqv -Os -v 2c -c (Read Write community string) $device 2>/dev/null  SNMPv2-MIB::sysName.0)`
        if [ "$snmpwrite" = "" ];
        then snmpwrite="NO"
        else snmpwrite="YES"
        fi

if [ "$snmpwrite" = "YES" ];
then
devicenumber=`(snmpwalk -v 2c -OQs -c  (Read Write community string) $device  1.3.6.1.2.1.4.20.1.2 | grep $ip | awk ' /=/ {print $3}')`
interface=`(snmpwalk -v 2c -OQs -c  (Read Write community string) $device  1.3.6.1.2.1.2.2.1.2 | grep -w ifDescr.$devicenumber | awk '/=/ {print $3}')`
else
interface="N/A"
fi
#======================================================================#
#this section takes the values of the variables and outputs them to    #
#the file device.log and echos the values on the screen as well        #
#this section is for the ouput of completed script                     #
#======================================================================#
echo "$device,$routername,$dns,$answer,$snmpread,$snmpwrite,$interface" >> device.log 
echo "$device,$routername,$dns,$answer,$snmpread,$snmpwrite,$interface"

	

#
#======================================================================#
#when device is not reachable by  ping this section assigns values to  #
#variables not tested and exits script                                 #
#======================================================================#
#
        
          else
                snmpread="NO"
                snmpwrite="NO"
		interface="N/A"
		routername="N/A"
echo "$device,$routername,$dns,$answer,$snmpread,$snmpwrite,$interface" >> device.log
echo "$device,$routername,$dns,$answer,$snmpread,$snmpwrite,$interface"

fi

#
#=====================================================================#
# If device is not is DNS this section assigns values to variables    #
# Not tested and exits script                                         #
#=====================================================================#
#

 else
                dns="Not in DNS"
                answer="NO"
                snmpread="NO"
                snmpwrite="NO"
		interface="N/A"
		routername="N/A"
echo "$device,$routername,$dns,$answer,$snmpread,$snmpwrite,$interface" >> device.log
echo "$device,$routername,$dns,$answer,$snmpread,$snmpwrite,$interface"
  
fi


done

 

8 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

slow ftp

On one of of solaris 7 boxes whenever i telnet or ftp it takes sometime before i get the prompt...any quick ideas where I should look...Thanks (3 Replies)
Discussion started by: suntan
3 Replies

2. Post Here to Contact Site Administrators and Moderators

Slow

The site has gone slow for quite some time... Can you do somethin abt it (2 Replies)
Discussion started by: DPAI
2 Replies

3. SCO

Slow cd response

Hi All We have one SCO Server here and it never gives us any trouble. Until Now!! Well its not earth shattering but we have one user who is complaining of a very slow response time when changing to his Home Directory. Other users who have similar profiles are OK. I have su'd to this user and I can... (0 Replies)
Discussion started by: JohnOB
0 Replies

4. UNIX for Dummies Questions & Answers

scp is slow

All of the sudden scp got really slow ... from 2-3 seconds to 30 seconds. This happened for 5 hours, and then it went back to running fast. Why? If I use the -q qualifier which "Disables the progress meter" could this have any adverse effect? Thanks (1 Reply)
Discussion started by: tomstone_98
1 Replies

5. UNIX for Dummies Questions & Answers

How ls | wc -l works?

ls displays files in tabbed output. Say a directory contains 3 files. ls will list all 3 in one line. So, I expect ls | wc -l to give 1, but it counts the nr of files and gives 3. Can someone explain how this works? (3 Replies)
Discussion started by: krishmaths
3 Replies

6. Programming

how this works?

pls explain me how this works.... DECODE (SUBSTR (field, 1, 1),'''', '''''' || field || '''','''' || field || '''') here field is a column in an oracle table.... (7 Replies)
Discussion started by: vijay_0209
7 Replies

7. UNIX for Dummies Questions & Answers

>./a.pl works, >a.pl - does not

When I try to execute script, I get message: >aa.pl zsh: command not found: aa.pl but >./aa.pl works OK. What to change in environment to force the former way to work? Thank you, Alex Z (4 Replies)
Discussion started by: zzol
4 Replies

8. UNIX for Advanced & Expert Users

How this works?

I have a program............ #include<stdio.h> #include<unistd.h> main() { if(fork == 0) { printf("Hi every body:p!!!!!!!!!!"); } } This program works with out any error. here fork is not a system call. It just act as a variable.But how it works without declaring it? What data type it... (19 Replies)
Discussion started by: carolsanjeevi
19 Replies
All times are GMT -4. The time now is 11:56 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy