a list of number


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting a list of number
# 1  
Old 01-18-2005
Question a list of number

Hi,
I wrote a shell program and I need to only accept a list of numbers from 01 to 24 in my argument 1 ($1) before the program can continue.
Does anyone know a better way to do it beside use the case command with 24 lines of condition?


Thanks in advance!

Last edited by whatisthis; 01-18-2005 at 12:12 PM..
# 2  
Old 01-18-2005
There are two ways of doing this that spring to mind.

If you're not worried about leading zeros, then something as simple as
Code:
#!/bin/ksh

if [ "$1" -ge "1" -a "$1" -le "24" ]; then
  echo "Okay"
else
  echo "No way"
fi

exit 0

will provide the validation.

If you do need the leading zero (you say in your original post 01-24, so let's assume that), do something like
Code:
#!/bin/ksh

echo "$1" | egrep '(0[1-9]|1[0-9]|2[0-4])' >/dev/null 2>&1

if [ "$?" -eq "0" ]; then
  echo "Okay"
else
  echo "No way"
fi

exit 0

Cheers
ZB
# 3  
Old 01-18-2005
range of list

zazzybob,
Hi it's working!
Thank you very much!

Can you explain a little bit on the command below with the bold text ?
echo "$1" | egrep '(0[1-9]|1[0-9]|2[0-4])'

What do them mean in each position?

Smilie
# 4  
Old 01-18-2005
If you go through the following ... you will understand ...

$ echo "10" | grep "1[0-9]"
10
$
$ echo "09" | grep "0[0-9]"
09
$ echo "23" | grep "2[0-4]"
23
$
$ echo "23" | egrep "2[0-4]|0[0-9]"
23
$ echo "09" | egrep "2[0-4]|0[0-9]"
09
$ echo "09" | egrep "2[0-4]|0[0-9]|1[0-9]"
09
$ echo "19" | egrep "2[0-4]|0[0-9]|1[0-9]"
19
$ echo "29" | egrep "2[0-4]|0[0-9]|1[0-9]"
$ echo "22" | egrep "2[0-4]|0[0-9]|1[0-9]"
22
# 5  
Old 01-18-2005
So I guess it means like below situations:
1. if a number starts with 0, then the number follows it has to be 1 to 9.
2. if a number starts with 1, then the number follows it has to be 0 to 9.
3. if a number starts with 2, then the number follows it has to be 1 to 4.

The "|" means " or " for the whole input ($1).

Did I understand it correctly?

Thanks!
# 6  
Old 01-18-2005
That's right. You could also use case instead of grep
Code:
case $REPLY in
    0[1-9]|1[0-9]|2[0-4]) echo ok ;;
    *) echo not ;; 
esac

# 7  
Old 01-18-2005
You can preserve the leading zeros and get rid of the egrep by using the typeset command.
Code:
#!/bin/ksh

typeset -RZ2 NUM=$1

if [ "$NUM" -ge "1" -a "$NUM" -le "24" ]; then
  echo "Okay"
else
  echo "No way"
fi

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

List files with number to select based on number

Hi experts, I am using KSH and I am need to display file with number in front of file names and user can select it by entering the number. I am trying to use following command to display list with numbers. but I do not know how to capture number and identify what file it is to be used for... (5 Replies)
Discussion started by: mysocks
5 Replies

2. Shell Programming and Scripting

Display the last part of a number list

Hi , i have a file wich have 50+ of numbers like : 0.014544106 0.005464263 0.014526045 0.005484374 0.014539412 0.005467600 0.014558349 0.005452185 i would like to display the list from the 6th bit to the end for example 0.005452185 (should become) 2185. I've tried with ... (4 Replies)
Discussion started by: Board27
4 Replies

3. Shell Programming and Scripting

Get number of elements in a list

Hi all I would like to know the number of elements in a list. $list=`ls xyz*` I want to get the number of files xyz* in the folder. Anybody please help!!! (5 Replies)
Discussion started by: VidyaVenugopal
5 Replies

4. Shell Programming and Scripting

Finding number of strings in List

I have a list of strings stored in $Lst Example set Lst = "John Fred Kate Paul" I want to return 4 in this case. (1 Reply)
Discussion started by: kristinu
1 Replies

5. Shell Programming and Scripting

To get Port number alone from the list

~]#netstat -vatn | grep LISTEN tcp 0 0 0.0.0.0:34895 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN ... (7 Replies)
Discussion started by: linuxadmin
7 Replies

6. UNIX for Dummies Questions & Answers

How to list number of files through Crontab?

Hello All, I am trying to put this line in Crontab (Linux box- x86_64), but the command is not running. Can you please help me out? My requirement is- To find out the number of .csv files older than 1 day in directory /stage/landing. There are 2 other subdirectories under this directory... (6 Replies)
Discussion started by: NARESH1302
6 Replies

7. Shell Programming and Scripting

Script to generate a list of number

How can I generate a list of numbers and place all of these numbers in a line-by-line into a file. I am new to scripting actually. 0501000000 to 0509999999 i.e. 0501000000 0501000001 ...... 0509999999 set 02 0551000000 to 0559999999 i.e. 0551000000 0551000001 ...... 0559999999 ... (3 Replies)
Discussion started by: noo
3 Replies

8. Solaris

list service with port number

Hi all, I want to list all service is running now with the specific port number (5 Replies)
Discussion started by: sharkux
5 Replies

9. Shell Programming and Scripting

AWK: list with ordinal number

Could somebody solve this problem? I want to create a list from the last ten modificated files and the end of rows I would like to take an ordinal number in fix position. My solution: ls -lt | grep ´^-´ | sed 10q | awk ´{printf "%s\t%2i\n", %0, NR}´ But so the ordinal number isn't in a... (1 Reply)
Discussion started by: mig8
1 Replies

10. Shell Programming and Scripting

Number of elements in Word list

Hello everyone, can anyone let me know if there is a way to get the count of elements in a word list that I use for a for loop in the way: for single_result in $results ; do ....... I know I can increment a counter in my for loop, but would there be a way to know the total number of elements in... (4 Replies)
Discussion started by: gio001
4 Replies
Login or Register to Ask a Question