Comparing Version Numbers


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Comparing Version Numbers
# 1  
Old 12-17-2008
Question Comparing Version Numbers

Hi There!

Apologies if this has been asked previously but I couldn't find the answer I was hoping for.

Basically, all I want to do is compare the OS X version against the version that I require in my script. So I'm retrieving the OS version using defaults read, but how can I compare this against another version number to see which is the greatest / newest?

Many thanks in advance...
davewg
Smilie
# 2  
Old 12-17-2008
You have to know ahead of time or lookup what the newest version is: off the net with maybe wget or from a file.. The OS does not know anything about what the newest version is.

I really do not understand what you are doing. If you are deploying something that requires version c of the OS (or some utility) on a box running version a, what do you intend to do in your code?

Code like that should abend with an error message complaining about versions, in the worst case.

A more user-friendly approach is to do what sysconf() does - learn about the system, then call code which is friendly to the environment. Find a way not to have to issue a nasty message. Especially if you want users to actually use the code.
# 3  
Old 12-17-2008
Maybe it's in case software is running in a NFS mounted system on different systems.

Say you have AIX, you could capture the output of "oslevel" and run a test against it in the script. Actually probably better to use "uname -a" for portability.
# 4  
Old 12-17-2008
It's just for a script in an installer package that needs to check the OS version to ensure it's suitable.

So I have for example decided that 10.4.6 is the required version my install needs and a variable with that value is already set in my script. Then, my script runs and detects that the OS X version of the target is 10.4.11. All I need to do now is to compare them, and then I can return the appropriate result to the installer...
# 5  
Old 12-17-2008
Oh. details like that help a lot.
One way to do this try this for starters-
Code:
#!/bin/ksh
# input versionstring1   versionstring2  example: 10.10.1  10.8.3
# returns 0 if string1 = string2  
#          <0 if string1 < string2 
#           >0  if string1 > string2
# this assumes xx.xx.xx for version number
vercmp()
{
     IFS=.
     echo "$1"  | read a1 b1 c1
     echo "$2"  | read a2 b2 c2
     IFS=" "
     r1=$((a1 - a2))
     r2=$((b1 - b2))
     r3=$((c1 - c2))
     tot=$((r1 + r2 + r3))
     if [ $tot -eq 0 ] ; then
         print 0
         return 0
     fi
     if [[ $r1 -gt 0 || $r2 -gt 0 || $r3 -gt 0 ]] ; then  # changed
         print 1
         return 0
     fi
     retval="-1"        # changed
     echo  "$retval"  # changed

}

#usage:
if [ $(vercmp 10.10.1 10.2.4) -gt -1 ] ; then
       echo "version okay"
else
       echo "version too old"
fi


Last edited by jim mcnamara; 12-17-2008 at 02:03 PM..
# 6  
Old 12-17-2008
Apologies I should of been more clear in my post but thank you for your response.

I tried running the example code, but unforunately some errors were returned in Terminal (terminal shell set to /bin/ksh);

/Scripts/check[21]: [: ']' missing
/Scripts/check[21]: 8: not found [No such file or directory]
/Scripts/check[21]: -3: not found [No such file or directory]
/Scripts/check[25]: print: -1: unknown option
Usage: print [-enprs] [-f format] [-u fd] [string ...]
/Scripts/check[30]: [: argument expected
version too old

any ideas what the problem could be?
# 7  
Old 12-17-2008
my bad - see the lines highlighted in red
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Comparing a list of numbers is less than a variable

Hello everyone, I want to compare a list of numbers in the file TEST01 to the variable $Post. Also remove any duplicate numbers. Create an if then statement indicating if the numbers listed in TEST01 is less than the number value of $Post then print an error message. Here is the contents of... (5 Replies)
Discussion started by: seekryts15
5 Replies

2. Shell Programming and Scripting

Comparing decimal numbers between 0 and 1

For numbers between 0 and 1 the below logic is not working. Output of above shall be "correct" but its echoing "incorrect".Kindly suggest a=.1 if then echo correct else echo incorrect fi Video tutorial on how to use code tags in The UNIX and Linux Forums. (3 Replies)
Discussion started by: itsvikas
3 Replies

3. Shell Programming and Scripting

Comparing Negative Numbers with If/Else

ValA=-29344 if ; then echo "NEGATIVE" else echo "POSITIVE" fi Can someone please tell me how else they would go about doing the above? When i do it, i get errors such as: (10 Replies)
Discussion started by: SkySmart
10 Replies

4. Shell Programming and Scripting

Where to being Comparing numbers?

Hi. I do not know how to compare numbers and need help. In my script I have to figure the MAX, MIN, & Avg. Sales amounts. Please help me. In the code, "transaction" is a counter. #!/bin/bash clear transaction=0 sales=0 total=0 while test $sales ... (9 Replies)
Discussion started by: Ccccc
9 Replies

5. Shell Programming and Scripting

Comparing two numbers with decimal point

How to compare two numbers with decimal points ? Is there a way in bash to do this? (33 Replies)
Discussion started by: kinny
33 Replies

6. Shell Programming and Scripting

Comparing Decimal Numbers

Im trying to compare two numbers with decimals but its not working as expected. a=1 b=1.1 if then echo "equal" fi When I do this it says that the numbers are equal. Ultimately Im using -le and -ge in the if statements but I tested with -eq for simplicity. Any way to make this... (3 Replies)
Discussion started by: Grizzly
3 Replies

7. Shell Programming and Scripting

comparing with numbers.

How to compare a variable with a value like 00:00:10 ? Thanks (4 Replies)
Discussion started by: nagendramv
4 Replies

8. UNIX for Dummies Questions & Answers

comparing numbers in a file

Hello, I'm searching for a quick method to read numeric values from a file or a defined variable and identifying the largest number. For instance if the following numbers are in a file or defined to a variable: 09192007 09202007 09182007 09172007 09162007 What "short" method could be used to... (7 Replies)
Discussion started by: dusk2dawn
7 Replies

9. Shell Programming and Scripting

comparing two numbers with the decimals

Can someone tell me how do I comapre two numbers with the decimals in UNIX shell scripting I understand "-gt" can be used only for integers Regards, Giri (4 Replies)
Discussion started by: chittari
4 Replies

10. UNIX for Dummies Questions & Answers

Comparing two numbers

Hello, I kinda newbie in unix so I would like so help.I know that there is a command that compares two integer numbers test (eg. #$1=0 ).I would like to know if it is possible to compare any number with another (eg. 2.3=0 or 3.7!=0 4.5>2.2). Thank you in advance. (1 Reply)
Discussion started by: TabloMaxos
1 Replies
Login or Register to Ask a Question