您的位置:首页 > 运维架构 > Shell

shell 判断字符串是否为数字

2013-11-21 11:21 309 查看
#!/bin/bash

## 方法1

a=1234;echo "$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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: