求一行命令

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
联系:

Re: 求一行命令

#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

Re: 求一行命令

#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
联系:

Re: 求一行命令

#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 :em20 :em20 :em20
头像
HuntXu
帖子: 5776
注册时间: 2007-09-29 3:09

Re: 求一行命令

#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

Re: 求一行命令

#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

Re: 求一行命令

#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

Re: 求一行命令

#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
最终我用这个了
回复