Linux shell从用户输入中获取设备ID

3
我正在为一个需要在配置中使用lsusb设备ID的程序编写安装脚本,我的想法是执行以下操作:
$usblist=(lsusb)
#put the list into a array for each line.
#use the array to give the user a selection list usinging whiptail.
#from that line strip out the device id and vender id from the selected line.

抱歉我的代码进展不大,但我卡在这里了,不知道如何做我想做的事情。请有经验的人帮忙。我很新手,对shell脚本不熟悉。


你尝试在AskUbuntuUnix Stackexchange上询问了吗?因为这个问题与操作系统(Linux)密切相关。 - Bagus Tesa
不,我还没有。需要等待40分钟才能重新发布。我甚至不知道如何恰当地提出问题,让人们理解我想做什么。 - Martinn Roelofse
我一直在研究使用sed,但似乎无法弄清如何处理类似于这样的行:“Bus 001 Device 004: ID 0665:5161 Cypress Semiconductor USB to Serial”,并仅删除“0665:5161”。 - Martinn Roelofse
1
你尝试过使用 grep 吗?如果我没记错的话,它支持正则表达式。 - Bagus Tesa
2个回答

3

使用whiptail选择USB设备

为了准备whiptaildialog命令,使用USB ID作为TAG,使用描述作为项目,您可以创建一个小的子shell:

read usbdev < <(
    declare -a array=()
    while read foo{,,,,} id dsc;do
        array+=($id "$dsc")
      done < <(lsusb)
    whiptail --menu 'Select USB device' 20 76 12 "${array[@]}" 2>&1 >/dev/tty
)

注意:

  • $array变量只存在于子shell的范围内。
  • $array($id "$dsc") 填充,并被 "${array[@]}" 使用,因此描述中的空格不会破坏项目列表。
  • 语法 read foo{,,,} id dsc 将按行读取 lsub 的输出,以空格分隔,删除前五个单词,将第六个单词分配给 id,将剩余的行分配给 dsc

这可能会呈现出类似以下内容的东西:

enter image description here

然后

echo $usbdev 
1d6b:0002

您可以在如何在Linux shell脚本中提示Yes/No/Cancel输入可移动USB存储选择器:USBKeyChooser网站上找到更多使用whiptaildialog和其他方法的示例。


我已经在2014年3月15日发布了一个usbKeyChooser,用于仅列出可移动USB存储设备... - F. Hauri - Give Up GitHub

1
为了从lsusb中提取设备ID,可以使用以下命令行:
lsusb | awk '{ print $6 }'

如果需要将ID存储在数组中,请使用以下代码行:
mapfile -t device_ids < <(lsusb | awk '{ print $6 }')

访问device_ids数组中的第一个元素:echo ${device_ids[0]}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接