sh/bash/dash/ksh/zsh等Shell脚本
-
自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
#1
帖子
由 自由建客 » 2012-02-26 22:51
代码: 全选
>0< ~$ lsmod | grep '^vboxdrv\>'
vboxdrv 1762739 4 vboxpci,vboxnetadp,vboxnetflt
>0< ~$
目的是要得到 vboxdrv 是否正被内核模块之外的例程使用。
上例结果应该是 1,也就是引用数 4 减去后面的模块数 3。
-
lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#2
帖子
由 lilydjwg » 2012-02-26 23:05
代码: 全选
lsmod | grep '^vboxdrv\>' | read x x n l; echo $l | awk -F, -v n=$n '{ print n-NF}'
-
自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
#3
帖子
由 自由建客 » 2012-02-26 23:29
代码: 全选
>0< urd$ lsmod | grep '^vboxdrv\>'
vboxdrv 1762739 4 vboxpci,vboxnetadp,vboxnetflt
>0< urd$ lsmod | grep '^vboxdrv\>' | read x x n l; echo $l | awk -F, -v n=$n '{ print n-NF}'
0
>0< urd$ lsmod | grep '^vboxdrv\>'
vboxdrv 1762739 3 vboxpci,vboxnetadp,vboxnetflt
>0< urd$ lsmod | grep '^vboxdrv\>' | read x x n l; echo $l | awk -F, -v n=$n '{ print n-NF}'
0
>0< urd$
不对啊,怎么都是 0?
-
lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
-
联系:
#4
帖子
由 lilydjwg » 2012-02-27 0:59
自由建客 写了:代码: 全选
>0< urd$ lsmod | grep '^vboxdrv\>'
vboxdrv 1762739 4 vboxpci,vboxnetadp,vboxnetflt
>0< urd$ lsmod | grep '^vboxdrv\>' | read x x n l; echo $l | awk -F, -v n=$n '{ print n-NF}'
0
>0< urd$ lsmod | grep '^vboxdrv\>'
vboxdrv 1762739 3 vboxpci,vboxnetadp,vboxnetflt
>0< urd$ lsmod | grep '^vboxdrv\>' | read x x n l; echo $l | awk -F, -v n=$n '{ print n-NF}'
0
>0< urd$
不对啊,怎么都是 0?
我用的是 zsh。bash 不支持。。。。
http://stackoverflow.com/q/2746553/296473

-
HuntXu
- 帖子: 5776
- 注册时间: 2007-09-29 3:09
#5
帖子
由 HuntXu » 2012-02-27 1:06
代码: 全选
| perl -ne '@_ = split /\s+/; printf "%d\n", $_[2] - split /,/, $_[3]'
HUNT Unfortunately No Talent...
-
自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
#6
帖子
由 自由建客 » 2012-02-27 4:09
bash 要用 <<<
代码: 全选
read TMP TMP MOD_REF MOD_LST <<< "`lsmod | grep '^vboxdrv\>'`"
MOD_REF=`echo "$MOD_LST" | awk -F, -v n=$MOD_REF '{ print n-NF}'`
if [ $MOD_REF -ne 0 ]; then
echo "ERROR: Module vboxdrv is in use" >&2
exit 1
fi
-
fnan
- 帖子: 919
- 注册时间: 2009-07-01 22:04
#7
帖子
由 fnan » 2012-02-27 21:16
lsmod | grep '^vboxdrv\>'|awk -F, '{split($1,a," ");print a[3]-NF}'
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
#8
帖子
由 自由建客 » 2012-02-27 22:21
代码: 全选
if [ `lsmod | awk '$1=="vboxdrv" {print $3-split($4,a,",")}'` -ne 0 ]; then
echo "ERROR: Module vboxdrv is in use" >&2
exit 1
fi
最终我用这个了