| 您的位置:首页 > 文档 > Shell > |
文章分类热门文章 |
在shell程序中判断一个变量是不是由4个数字组成创建:2005-10-26 00:49:43 作者:Unlinux 来自: http://www.Unlinux.com 假设要判断的变量为name,则方法如下: asd=`echo $name | awk '{ if (substr($1,1,1)>=0 && substr($1,1,1) <=9 && substr($1,2,1) >=0 && substr($1,2,1) <=9 && substr($1,3,1) >=0 && substr($1,3,1) <=9 && substr($1,4,1) >=0 && substr($1,4,1) <=9) printf("true"); else printf("false"); }'` if [ asd = "true" ] #是数字 。。。。 elif #不是数字 。。。 这个办法比较笨,不知其他人有没有更好的方法! 在awk或case语句中对变量使用正则表达式 ^....$ 看其是否匹配就可以了。 不好意思,应该用正则表达式[0-9][0-9][0-9][0-9]更简单。上面的方法想补救的话,可用 #!/bin/sh # test expr $1 + 10(任意数字) >/dev/null 2>&1 STATUS=$? (测试上条语句是否成功) if ["$STATUS"!="0"];then echo "$1 is composed of number" exit 0 执行test $name # cat zcc V=$1 if ! echo $V|grep '.....' >/dev/null then if echo $V|grep '[0-9][0-9][0-9][0-9]' >/dev/null then echo "ok" else echo "bad number" fi else echo 'bad number' fi # ./zcc 1234 ok. # ./zcc 123333 bad number # ./zcc 123 bad number 试试如何? 为何不用case呢?更简单! case $a in [0-9][0-9][0-9][0-9]) echo"变量是由4个数字组成";; *) echo "变量不是由4个数字组成";; esac 还是用CASE这种方法比较高。 借这个帖子提醒大家,模式匹配用了awk,grep,case这些常用的,可别忘了还有expr啊。有时反而更直接。对于本例: expr $str : '^[0-9][0-9][0-9][0-9]$' 如果值为4就是满足要求的串,否则为0。 grep,awk,expr,case全用到了。 讨论热烈的一个好贴。 偶用 expr $1 : [0-9]* |grep 4 valentine ,偷懒可不行啊,对于expr $1 : [0-9]*来说,如果$1="1234a"的话结果也是4。 michaelds 确实逻辑严密啊。 加个$限制一下好了。 expr $1 : "[0-9]*$" |grep 4 如果测试变量a test $a -gt 999 -a $a -lt 10000 2>/dev/nul 再判断$?就OK了 转载自:http://www.unlinux.com/doc/shell/20051026/159.html 【评论】 【加入收藏夹】 【大 中 小】 【打印】 【关闭】 ※ 相关链接
|