Solved

C Shell Read Numeric value only

Posted on 2004-08-31
8
518 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 250 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

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
sameEnds challenge 3 187
canBalance challenge 34 105
Thin secure Windows 10 5 108
Problem to open Excel file 15 227
Introduction: Dialogs (1) modal - maintaining the database. Continuing from the ninth article about sudoku.   You might have heard of modal and modeless dialogs.  Here with this Sudoku application will we use one of each type: a modal dialog …
In this post we will learn different types of Android Layout and some basics of an Android App.
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.
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

726 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