linux if判断是不是数字

linux if判断是不是数字,第1张

## 方法1

a=1234echo "$a"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] &&echo string a is numbers

第一个-n是shell的测试标志,对后面的串"`sed -n '/^[0-9][0-9]*$/p'`" 进行测试,如果非空,则结果为真。

sed默认会显示所有输入行信息的,sed 的“-n”选项是让sed不要显示,而只显示我们所需要的内容:即后面的表达式所匹配的行,这是通过表达式中加入“p”命令来实现的。

/^[0-9][0-9]*$/他的含义是匹配至少由一位数字构成的行

## 方法2, 可以,不过不是bash实现的,是使用了grep的正则

#if grep '^[[:digit:]]*$' <<<"$1"then

# echo "$1 is number."

#else

# echo 'no.'

#fi

## 方法3

#if [ "$1" -gt 0 ] 2>/dev/null then

# echo "$1 is number."

#else

# echo 'no.'

#fi

## 方法4,case

#case "$1" in

# [1-9][0-9]*)

#echo "$1 is number."

#

# *)

#

#esac

## 方法5,awk

#echo $1| awk '{print($0~/^[-]?([0-9])+[.]?([0-9])+$/)?"number":"string"}'

## 方法5,awk

#if [ -n "$(echo $1| sed -n "/^[0-9]\+$/p")" ]then

# echo "$1 is number."

#else

# echo 'no.'

#fi

## 方法6,expr

expr $1 "+" 10 &>/dev/null

if [ $? -eq 0 ]then

echo "$1 is number"

else

echo "$1 not number"

fi

楼主要是正则还好的话,应该试着用正则表达式描述吧。

数字的定义应该是:

一个可选的正负号,跟一个以上的数字,再是可选的小数点再加一串可选的一串数字(包括:3, -5, 1.23, -1. )

可选的正负号,跟一个点再跟一个以上的数字(.2, -.3。可能看着比较奇怪,但传统上(C语言里)认为是数字。如果你的要求不一样,可以更改定义)

你可以试试把这个描述翻译成正则表达式,这是写脚本的基本功。另外你还可以试试让你的程序识别 1.23E-5 这样的浮点数。

判断的时候,比如可以用 sed 把匹配这个表达式的部分删掉。如果剩下的是空串,则说明输入就是数字。否则不是。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8476268.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存