Solved

bash script to run two commands and return single value

Posted on 2010-09-14
8
1,643 Views
Last Modified: 2013-12-21
Hey all, Im not good at scripting but im trying to run two snmpget commands (lets say snmp1 and snmp2) aginst a server with a bash script. Then I want to take snmp1 and subtract it from snmp2 and display the results. Im running into an issue with this.

The snmpget commands return a string that contains the OID path and then the value at the end. Im trying to parse out only the value to a variable. The parsing works fine but i can't figure out how to get the values assigned to the variables. Im using awk (also tried cut) to parse and it always prints instead of assigning to the variable.

Im sure im missing something small but Im totally lost.

Could someone help me out with my code or suggest a better way to do this?

Thanks


#!/bin/bash


totalokconnects='snmpwalk -v 1 -c public 10.0.0.19 .1.3.6.1.4.1.1971.6.2.9.126.6.0'
totalstreamattempts='snmpwalk -v 1 -c public 10.0.0.19 .1.3.6.1.4.1.1971.6.2.9.126.7.0'

good=$totalokconnects  | awk '{print $4}'
total=$totalstreamattempts | awk '{print $4}'

totalerrors=$(($total-$good))

Open in new window

0
Comment
Question by:that1guy15
8 Comments
 
LVL 84

Expert Comment

by:ozo
ID: 33678128
good=`$totalokconnects  | awk '{print $4}'`
0
 
LVL 48

Expert Comment

by:Tintin
ID: 33678634

good=$(echo $totalokconnects  | awk '{print $4}')
total=$(echo $totalstreamattempts | awk '{print $4}')

Open in new window

0
 
LVL 18

Expert Comment

by:TobiasHolm
ID: 33680301
Hi!

You have wrong type of "fnutts" on line 4 and 5 (you need to execute those lines as commands).
And ozo forgot the echo command.

A working script:
#!/bin/bash


totalokconnects=`snmpwalk -v 1 -c public 10.0.0.19 .1.3.6.1.4.1.1971.6.2.9.126.6.0`
totalstreamattempts=`snmpwalk -v 1 -c public 10.0.0.19 .1.3.6.1.4.1.1971.6.2.9.126.7.0`

good=`echo $totalokconnects  | awk '{print $4}'`
total=`echo $totalstreamattempts | awk '{print $4}'`

totalerrors=$(($total-$good))

Open in new window

0
 
LVL 84

Expert Comment

by:ozo
ID: 33680323
I did not forget the echo command,
I based it on
totalokconnects='snmpwalk -v 1 -c public 10.0.0.19 .1.3.6.1.4.1.1971.6.2.9.126.6.0'
not on
totalokconnects=`snmpwalk -v 1 -c public 10.0.0.19 .1.3.6.1.4.1.1971.6.2.9.126.6.0`
0
Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

 
LVL 84

Accepted Solution

by:
ozo earned 500 total points
ID: 33680338
although an easier way might be
totalokconnects=(`snmpwalk -v 1 -c public 10.0.0.19 .1.3.6.1.4.1.1971.6.2.9.126.6.0`)
good=${totalokconnects[3]}
0
 
LVL 18

Expert Comment

by:TobiasHolm
ID: 33680348
>I based it on totalokconnects='snmp...

aah! I see! Then that version also works!! Multiple ways of the same result!! :)

ozo's version:
#!/bin/bash


totalokconnects='snmpwalk -v 1 -c public 10.0.0.19 .1.3.6.1.4.1.1971.6.2.9.126.6.0'
totalstreamattempts='snmpwalk -v 1 -c public 10.0.0.19 .1.3.6.1.4.1.1971.6.2.9.126.7.0'

good=`$totalokconnects  | awk '{print $4}'`
total=`$totalstreamattempts | awk '{print $4}'`

totalerrors=$(($total-$good))

Open in new window

0
 
LVL 18

Expert Comment

by:TobiasHolm
ID: 33680372
>although an easier way might be...

Yes, and create an string array instead. Much more elegant solution ozo!
0
 
LVL 23

Author Comment

by:that1guy15
ID: 33686683
Sorry for taking so long to get back. I have been working on other projects.

The first two recommendations didnt work but ozo's second recommendation did

>although an easier way might be
totalokconnects=(`snmpwalk -v 1 -c public 10.0.0.19 .1.3.6.1.4.1.1971.6.2.9.126.6.0`)
good=${totalokconnects[3]}

Took me a little bit to realize you were using ` instead of '. I thought i had good eyes but i guess not :)

Thanks for the help!
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

This document is written for Red Hat Enterprise Linux AS release 4 and ORACLE 10g.  Earlier releases can be installed using this document as well however there are some additional steps for packages to be installed see Metalink. Disclaimer: I hav…
If you use Debian 6 Squeeze and you are tired of looking at the childish graphical GDM login screen that is used by default, here's an easy way to change it. If you've already tried to change it you've probably discovered that none of the old met…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now