The original message is posted below.
I got a couple of good ideas from George Guethlein and Wayne Sweatt that
I was able to go off of. Here is an excerpt of what I responded with to
George:
"When ksh performs it's compare operation (especially in the case
statement) it compares string types and not numeric types. When you
perform a compare in a case statement using numbers, it (ksh) only
recognizes the first digit of a multi-digit number. Here's an example of
what I mean:
junk=19
case $junk in
[1-9]) echo "between 1 and nine"
;;
[10-19]) echo "between 10 and 19"
;;
[20-29]) echo "between 20 and 29"
;;
esac
Here, ksh doesn't recognize any number over 9 because any such number
over 9 consists of two characters. Give it a try. Here's what I've come
up with to take care of the problem (building on George's solution):
junk=13
case $junk in
[1-9]) echo "between 1 and nine"
;;
1[0-9]) echo "between 10 and 19"
;;
2[0-9]) echo "between 20 and 29"
;;
esac
Here, two digit numbers (in the 10 through 29 range) are recognized
because I've told ksh to compare two specific characters in each case.
If I wanted to go into the 100's range with my numbers, I'd have to use
a case statement that's something like this:
case $junk in
[1-9]) echo "between 1 and nine"
;;
1[0-9]) echo "between 10 and 19"
;;
2[0-9]) echo "between 20 and 29"
;;
3[0-9]) echo "between 30 and 39"
;;
4[0-9]) echo "between 40 and 49"
;;
5[0-9]) echo "between 50 and 59"
;;
6[0-9]) echo "between 60 and 69"
;;
7[0-9]) echo "between 70 and 79"
;;
8[0-9]) echo "between 80 and 89"
;;
9[0-9]) echo "between 90 and 99"
;;
1[0][0-9]) echo "between 100 and 109"
;;
1[1][0-9]) echo "between 110 and 119"
;;
esac"
As of yet I still do not know how to use any kind of mathematical
inequality (using the >, <, -gt, or -lt signs) in a ksh case statement,
but the above solution solves my immediate problem.
Regards,
Stephen Spalding
Associate System Administrator
sspaldin_at_mem-ins.com
Missouri Employers Mutual Insurance
> ----------
> From: Spalding, Steve[SMTP:SSPALDIN_at_mem-ins.com]
> Sent: Tuesday, March 31, 1998 14:39
> To: 'alpha-osf-managers_at_ornl.gov'
> Subject: inequalities in a case statement in ksh
>
> Hello all!
>
> Since my question earlier today went so well, I thought that I would
> try
> another. I'm writing a script file using a case statement, and I want
> to
> use inequalities with it but don't know how. Here is what I have right
> now:
> case "$capacity" in
> [93 - 96] if [ $severity -lt 1 ];then
> severity=1
> fi #if [ $severity -lt 1 ];then
> ;;
> [97 - 99] if [ $severity -lt 2 ];then
> severity=2
> page=true
> fi #if [ $severity -lt 2 ];then
> ;;
> 100) if [ $severity -lt 3 ];then
> severity=3
> page=true
> fi #if [ $severity -lt 3 ];then
> ;;
> esac #case "$capacity" in
>
> Let's say that in the last case I wanted to catch any value above 100
> instead of just 100; how would I set that up? Here is what I have
> tried
> using:
>
> > 100 if [ $severity -lt 3 ];then
>
> [ > 100 ] if [ $severity -lt 3 ];then
>
> [ -gt 100] if [ $severity -lt 3 ];then
>
> but nothing seems to want to work. Any ideas?
>
> Thanks!
>
> PS - Lawrence Decker - I tried responding to your email earlier, but I
> keep getting this text in a returned mail message:
>
> Your Message
> To: 'ldecker_at_pbchcd.state.fl.us'
> Subject: FW: Pop up message
> Was not delivered for the following reasons:
> Delivery failed to SMTP:ldecker_at_pbchcd.state.fl.us.
> Reason: 0 (transfer failed)
> diagnostic: 0 (OR name (Email address) unrecognized).
> MSEXCH:IMS:MEM:EXCH1:MEM_CO_NT1 3902 (000B0981) Host Unknown.
>
>
> Stephen Spalding
> Associate System Administrator
> sspaldin_at_mem-ins.com
> Missouri Employers Mutual Insurance
>
Received on Wed Apr 01 1998 - 16:02:57 NZST