Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

C Shell Read Numeric value only

Posted on 2004-08-31
8
Medium Priority
?
531 Views
Last Modified: 2013-12-26
Hello,

I want to write a script on Digital UNIX C Shell to read user input but only numeric value. I have created a script to do that but it does not maintain 2 special characters: * and ?.

Do you know how to write it?
------------------------------------
#! /bin/csh -f
#
# On C Shell to read a value and ensure it belongs to numeric value.
#
echo -n "Enter a number: "
set ans = $<
if (($ans =~ [1-9]) || ($ans =~ [1-9]*[0-9]) && ($ans =~ [0-9])) then
  echo "Right " $ans
else
  echo "wrong"
endif
------------------------------------

Regards,

Paulus

0
Comment
Question by:cclmotors
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
8 Comments
 
LVL 11

Expert Comment

by:avizit
ID: 11948408
It is because the * etc is interpreted by the shell

following will give you an demo

#! /bin/csh -f
echo -n "Enter a number: "
set ans = $<
echo $ans

if you enter a '*'

the output echoed is the list of the files in the directories.

-----
the remedy ? ( i dont know yet :)
0
 
LVL 11

Expert Comment

by:avizit
ID: 11948428
use "set noglob" to disable metacharacters and after that metacharacters represent themselves.
be careful though if you have to use them

#! /bin/csh -f
#
# On C Shell to read a value and ensure it belongs to numeric value.
#
set noglob
echo -n "Enter a number: "
set ans = $<
if (($ans =~ [1-9]) || ($ans =~ [1-9]*[0-9]) && ($ans =~ [0-9])) then
  echo "Right " $ans
else
  echo "wrong"
endif
0
 
LVL 11

Expert Comment

by:avizit
ID: 11948477
and maybe you can change your if condition to

if (($ans =~ [0-9]) || ($ans =~ [1-9][0-9]*) )  then


0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:cclmotors
ID: 11948541
Thank you.

But it cannot maintain an input e.g. 12q

When the 3rd char is not numeric value, it always accept.
0
 
LVL 11

Expert Comment

by:avizit
ID: 11948608
the * is taken to be any charcater any number of times ..


one crude way would be to use something like

if ( ($ans =~ [0-9])  || ($ans =~ [1-9][0-9]) || ($ans =~ [1-9][0-9][0-9] ) ) then    

and so on depending on the acceptable length of the input
hardly a good solution ..
i am still looking into it though ..
0
 
LVL 38

Expert Comment

by:yuzh
ID: 11949681
Why use csh? Csh Programming Considered Harmful, see:
http://www-dbs.inf.ethz.ch/~fessler/csh-whynot.html

It is a lot easier to do it with sh/ksh/bash, eg:

expr $var + 0 >/dev/null 2>&1
if [ $? -ne 0 ] ; then
    echo "$var is not a number"
else
    echo "It is a number"
fi

0
 
LVL 11

Accepted Solution

by:
cjjclifford earned 750 total points
ID: 11950354
I agree, do not use CSH.

If you use KSH for scripting, you can also use "typeset" to restrict the type of a variable.

#!/usr/bin/ksh

read tempvar
# KSH script will exit (stating "bad number") if the value set here is not integer.
typeset -i var=$tempvar
0

Featured Post

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Here is how to use MFC's automatic Radio Button handling in your dialog boxes and forms.  Beginner programmers usually start with a OnClick handler for each radio button and that's just not the right way to go.  MFC has a very cool system for handli…
Have you tried to learn about Unicode, UTF-8, and multibyte text encoding and all the articles are just too "academic" or too technical? This article aims to make the whole topic easy for just about anyone to understand.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…

610 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question