[shell]判断一个字符串是否为数字字符串的两种方法(是否为进程号(PID))

50 篇文章 1 订阅
方法一:
在fc4的/etc/init.d/functions文件中,有一句是用来判断字符串是否是pid(当然全部应该是数字啦)
[ -z "${p//[0-9]/}"  -a  -d "proc/$p" ]
这句总的意思是看看$p是不是数字串,要是是的话,再看看是不是有/proc/$p这个目录。如果两个都成立,那么$p就是一个进程号了。
"${p//[0-9]/" 的意思是输出一个字符串,这个字符串是把$p里的数字(0-9)全替换成空(不是空格,就是删掉的意思)后的结果。当然命令执行后$p不变。这样,接着用-z判断输出的结果是否为空字符串,是的话,说明$p就是数字字符串啦。

以上这种方法在fc4的shell(默认应该是bash)下运行没有问题,但是在busybox的shell里却出现:
Bad substitution. 没办法,只好用另外一种方法了。

方法二:

[ "`expr $p + 0`" != ""  -a  -d  "/proc/$p"  ]
这个效果和前面的一样。
注意expr $p + 0左右那两点是在键盘上输出!1的那个键边上那个键产生的,并不是普通的单引号。
若是$p是字符,那么运行expr $p + 0出错, "`expr $p + 0`" != "" 输出的是一个空字符串,否则输出一个非空的字符串(即是相加后的结果)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值