脚本编程求助

sh/bash/dash/ksh/zsh等Shell脚本
回复
beiqibing
帖子: 2
注册时间: 2015-03-05 18:11
系统: ubuntu

脚本编程求助

#1

帖子 beiqibing » 2015-03-05 18:24

想开机运行一个系统服务,但是这个服务需要传递一个参数,参数是接在电脑上的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
请教大家这个脚本怎么写?谢谢
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 脚本编程求助

#2

帖子 susbarbatus » 2015-03-05 19:20

代码: 全选

#!/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
上次由 susbarbatus 在 2015-03-09 16:31,总共编辑 1 次。
沉迷将棋中……
beiqibing
帖子: 2
注册时间: 2015-03-05 18:11
系统: ubuntu

Re: 脚本编程求助

#3

帖子 beiqibing » 2015-03-06 16:49

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呢?
谢谢
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 脚本编程求助

#4

帖子 susbarbatus » 2015-03-09 16:33

我知道你的意思,是我不小心写错了,开始想用 awk 的 -v 去传值的,半途又改成用 shell 的办法传值了,两种方法混在一起了。
2楼重新编辑过了,现在应该是对的结果。
沉迷将棋中……
回复