分页: 1 / 1

脚本编程求助

发表于 : 2015-03-05 18:24
beiqibing
想开机运行一个系统服务,但是这个服务需要传递一个参数,参数是接在电脑上的USB设备的编号
usb编号 通过lsusb获得信息,通过usb设备的信息参数得到设备的编号,如

代码: 全选

root@server:~# lsusb
Bus 001 Device 002: ID 0781:5151SanDisk Corp. Cruzer Micro Flash Drive
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
返回的“SanDisk Corp. Cruzer Micro Flash Drive”这个名称是固定的,要获得是前面的参数值“0781:5151”

执行另外一个命令xxxxx,获得如下信息

代码: 全选

List USB devices
 - busid 1-1 (0781:5151)
         1-1:1.0 -> usb-storage
根据前面的值“0781:5151”返回值,匹配到语句“ - busid 1-1 (0781:5151)”,提取出前面的编号“1-1”
上面的“1-1”就是要找的值

然后把这个参数“1-1” 作为参数,开机运行服务程序 XXXX 1-1
请教大家这个脚本怎么写?谢谢

Re: 脚本编程求助

发表于 : 2015-03-05 19:20
susbarbatus

代码: 全选

#!/bin/bash
ID=$(lsusb | awk '/SanDisk Corp. Cruzer Micro Flash Drive/ {for(i=1;i<=NF;i++) if($i=="ID") print $(i+1)}')
BID=$(xxxxx | awk '/'"$ID/"' {for(i=1;i<=NF;i++) if($i=="busid") print $(i+1)}')
XXXX $BID

Re: 脚本编程求助

发表于 : 2015-03-06 16:49
beiqibing
susbarbatus 写了:

代码: 全选

#!/bin/bash
ID=$(lsusb | awk '/SanDisk Corp. Cruzer Micro Flash Drive/ {for(i=1;i<=NF;i++) if($i=="ID") print $(i+1)}')
BID=$(xxxxx | awk -v id=$ID '/'"$id/"' {for(i=1;i<=NF;i++) if($i=="busid") print $(i+1)}')
XXXX $BID
感谢回复
有点小问题,是我说的不清楚
在查找第二处的返回结果地方有多个返回值的,如

代码: 全选

- busid 1-1 (0781:5151)
         1-1:1.0 -> usb-storage

- busid 1-2 (2081:5151)
         1-1:2.0 -> usb-storage

- busid 1-3 (2221:5151)
         1-1:3.0 -> usb-storage
可能有多种选择,应该是从多个中找出 0781:5151 对应的前面busid 1-1
现在是直接返回了三个连着的值了,怎么修改找到对应的
- busid 1-1 (0781:5151)
1-1:1.0 -> usb-storage
里面的1-1呢?
谢谢

Re: 脚本编程求助

发表于 : 2015-03-09 16:33
susbarbatus
我知道你的意思,是我不小心写错了,开始想用 awk 的 -v 去传值的,半途又改成用 shell 的办法传值了,两种方法混在一起了。
2楼重新编辑过了,现在应该是对的结果。