String and Number Comparison In Shell Scripting
In shell, you will need to compare either string or number. There is a subtle different between the two and here I will try to explain that in details.
Case 2: string '06' and '6' are different string, so it will equate to false. However, for number comparison 06 is 6 and therefore number 6 equals to 6
For string comparison, you will use these operators
=
(string equal)!=
(sting not equal)
For number comparison, you will use these operators
-eq
(number eqaul)-ne
(number not equal)-gt
(number greater than)-ge
(number greater than or equal)-lt
(number less than)-le
(number less than or equal)
So what's the different between the two equals. Let's find out from the these two cases
6 = 6
vs6 -eq 6
06 = 6
vs06 -eq 6
Case 2: string '06' and '6' are different string, so it will equate to false. However, for number comparison 06 is 6 and therefore number 6 equals to 6
$if [ 6 = 6 ]; then echo equal; else echo not equal; fi equal $if [ 6 -eq 6 ]; then echo equal; else echo not equal; fi equal $if [ 06 = 6 ]; then echo equal; else echo not equal; fi not equal $if [ 06 -eq 6 ]; then echo equal; else echo not equal; fi equal
In other scripting languages, like Tcl, anything number with a '0' in front is considered octal (base 8). So '09' is invalid in Tcl. Whereas in shell, they simply treat every number as decimal.
$if [ 09 -eq 9 ]; then echo equal fi equal $tclsh %if { 06 == 6 } { puts equal } equal %if { 09 == 9 } { puts equal } expected integer but got "09" (looks like invalid octal number) %
Labels: shell script
0 Comments:
Post a Comment
<< Home