more than 2^31 bytes are displayed as negative value.
Because ksh can handle integer range of -2^31 ... 2^31-1
On ksh, this is like this;
$ echo $((2147483647)) # 2^31-1 2147483647 $ echo $((2147483647+1)) # 2^31 -2147483648
Here's a concept code to check two strings representing big non-negative integer values.
#!/bin/ksh
function isgreater {
# check presence of arguments
#
[ $# -lt 2 ] && return -- -1
x=$1
y=$2
# Are arguments both form of positive integer?
#
# !!! INCOMPLETE: not checking correct pattern!!!
#
case "XX${x}YY${y}ZZ" in
XX[0-9]*YY[0-9]*ZZ)
: # ok, do nothing
;;
*)
return -- -2 # ng, string is not positive integer
;;
esac
# Compare it
#
if [ ${#x} -gt ${#y} ]; then
return 0
elif [ ${#x} -eq ${#y} ]; then
if [ $x -gt $y ]; then
return 0
else
return 1
fi
else
return 1
fi
}
isgreater $1 $2
case $? in
0) echo $1 is greater than $2. ;;
1) echo $1 is NOT greater than $2. ;;
*) echo argument format error ;;
esac
Note