shell脚本如何判断变量为数字?

如题所述

第1个回答  2019-11-23
#!/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

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网