当前位置:编程学习 > 网站相关 >>

SHELL判断一个字串是否为数字的两种方法

 
 
Shell中经常需要判断一个参数的类型,用来决定是否将该参数传给后续代码执行。
 
这里简单介绍两种判断一个字符串是否为数字的方法:
 
 
 
1.使用Linux下相当牛X的计算器bc,当然这里有点大材小用了,不过也不失为一种方法
 
echo $str | bc
 
将字串打印出来,通过管道传给计算器bc这个程序,这个程序的基本功能是计算表达式的值,但是特别的是
 
在输入单个数字,它返回的值仍然是这个数字(单个数字是特殊的表达式),根据这个特性,就可以用来判断一个字串是否为数字了。
 
根据方法1,下面给出了一个测试脚本。
 
 
 
#!/bin/sh  
 
#这个脚本用来判断后面的参数的种类(非数字,奇数,偶数,浮点数)。
 
#用法: Usag: [参数列表]
 
# checknum.sh 
 
 
 
#检测参数个数是否合法
 
iftest $# -lt 1     #当参数个数小于2时,也就是没有整数输入,报错。
 
thenecho "参数错误,使用方法:checknum n1 n2 n3... (一个参数序列)。"
 
exit1               #直接退出
 
fi
 
 
 
#判断参数种类
 
forstr in $*         #用一个临时变量str,从参数列表中依次次取出各个参数。
 
do
 
{
 
#将取出的参数传给程序bc,用它来检测这个参数是否为数字,并将错误信息重定向。
 
var=$(echo$str | bc 2>/dev/null) 
 
#如果传入的参数是一个数字,bc返回值就是这个数,否则不是,通过这个可以判断参数是否为数字。
 
if ["$var" != "$str" ] #如果bc返回值与这个参数相同,则参数一定是数字,反之则不是。
 
then {
 
echo "$str 不是一个数字。"
 
}
 
#如果参数是数字,则只需要查找是否含有小数点来判断是否为浮点数。
 
elifecho $str|grep "\." >/dev/null 2>&1   
 
then {
 
echo "$str 是一个浮点数。"
 
}
 
else {
 
#如果这个参数是一个整数,将他模2,余数为0则是偶数,为1则为奇数。
 
if test `expr $str % 2` -eq 0
 
then echo "$str 是一个偶数。"
 
else echo "$str 是一个奇数。"
 
fi
 
}
 
fi
 
}
 
done
 
exit
 
 
 
方法2:可以自己写一个程序来判断一个字串是否为数字,然后在脚本中调用这个程序就可以达到目的。比如写一个简单的C程序来判断一段字符串是否为数字。程序代码如下:
 
 
 
//check.c
 
#include<stdio.h>
 
#include<string.h>
 
 
 
 /****************************
 
 * check a char == digital
 
*****************************/
 
intisnumber( char ch )  //
 
{
 
if( '0'<= ch && '9'>=ch )
 
{
 
return 1;        //digital
 
}
 
else
 
{
 
return 0;        //notdigital
 
}
 
}
 
 
 
 /****************************
 
 * check a string == numbers
 
*****************************/
 
intcheck( char *str ) 
 
{
 
int i = 0;
 
int dot = 0;    //thenumber of decimal point
 
for(; i<strlen(str); i++ )
 
{
 
if( !isnumber( str[i]) )
 
{
 
if( '.' == str[i] )
 
{
 
dot++;
 
}
 
else
 
{
 
return 0;   // not number
 
}
 
}
 
}
 
if( 0 == dot )
 
{
 
return 1;  //is number
 
}
 
else if( 1 == dot )
 
{
 
return 2;  //is floatingpoint number, include 4.0 3. .3etc.        
 
}
 
else
 
{
 
return 0;   //is notnumber
 
}
 
}
 
 
 
 /****************************
 
 *  mainfuction just recieve one parametter
 
*****************************/
 
intmain(int argc, char* argv[])
 
{
 
int i = 0;
 
if( 2 != argc )        
 
{
 
printf("Parametter Error, just recieve oneparametter.\n");
 
return 3;
 
}
 
printf("%d", check(argv[1]) );
 
return 0;
 
}
 
 
 
 
 
用GCC编译之后,将可执行文件命名为check,然后在脚本中调用它。check的功能是接受一个字符串,然后判断它的类型,然后将判断结果打印出来。脚本的内容如下:
 
 
 
#!/bin/sh
 
#checknum.sh
 
if [$# -lt 1 ]
 
then {
 
echo "Usage: ./checknum.sh n1, n2, ..."
 
exit 1
 
}
 
fi
 
forvar in $*
 
do
 
{
 
res=$(echo `./check $var`)
 
if [ $res -eq 0 ]
 
then {
 
echo "$var is not number."
 
}
 
elif [ $res -eq 1 ]
 
then {
 
if [ `expr $var % 2` -eq 0 ]
 
then {
 
echo "$var is even number."
 
}
 
else {
 
echo "$var  is oddnumber."
 
}
 
补充:综合编程 , 其他综合 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,