【问题标题】:Linux shell get device id from user inputLinux shell 从用户输入中获取设备 ID
【发布时间】:2018-11-06 16:49:18
【问题描述】:

我正在为一个需要 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)
  • 不,我没有。我需要等待 40 分钟才能重新发布。我什至不知道如何正确地提出问题,以便人们能够理解我想要做什么
  • 我一直在研究使用 sed,但无法弄清楚如何采用如下所示的线:“Bus 001 Device 004: ID 0665:5161 Cypress Semiconductor USB to Serial”和只删除这个:“0665:5161”
  • 你试过grep吗?如果我没记错的话它支持正则表达式..

标签: linux shell lsusb


【解决方案1】:

使用whiptail选择USB设备

用于准备whiptaildialog命令,USB IDTAGdescriptionitem,你可以创建一个小的子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 的输出,空格分隔,删除前5 个单词,将第6 个单词分配给id,将其余行分配给dsc

这可能会呈现如下内容:

然后

echo $usbdev 
1d6b:0002

您可以使用whiptaildialog 和其他方式在How do I prompt for Yes/No/Cancel input in a Linux shell script? 找到更多示例 和USB removable storage selector: USBKeyChooser

【讨论】:

  • 我已经在 2014 年 3 月 15 日发布了一个 usbKeyChooser 仅列出可移动 USB 存储...
【解决方案2】:

要从lsusb 中提取设备ID,可以使用以下行:

lsusb | awk '{ print $6 }'

如果您需要将 ID 存储在数组中,请使用以下行:

mapfile -t device_ids < <(lsusb | awk '{ print $6 }')

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

【讨论】:

    猜你喜欢
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多