我需要帮助编写一个 bash shell 脚本来按硬件 ID 索引 .inf 文件

我需要帮助编写一个 bash shell 脚本来按硬件 ID 索引 .inf 文件

我正在开发一个新系统,用于自动安装 Windows 10/11 中的驱动程序。前段时间,我从 driverpack 下载了一个驱动程序集合(驱动程序集合很好,但我认为用于管理安装的软件可能有病毒……)因此,我可以安装几乎任何 Windows 驱动程序,但它会持续很长时间。我的服务器中的 SAMBA 共享中有一个驱动程序集合(免費BNT从现在开始。它是 Ubuntu 22.04.1)。因此,当我想安装任何驱动程序时,它必须在集合中搜索正确的 .inf 文件,这可能需要 20 分钟或更长时间。然后我最近想出了一个想法,做一个驱动程序数据库(MySQL) 以及硬件 ID 和文件路径(针对.inf文件),然后执行电源外壳脚本使用数据库自​​动安装驱动程序并通过下载驱动程序桑巴。我问ChatGPT帮我写代码,它帮了我很多忙,但它提出的解决方案有一些错误。该项目由两个主要部分组成:

  1. 生成一个 MySQL 数据库,其中的表包含两列:hwidpath,包含每个.inf文件及其硬件 ID 的条目。
  2. 使用以前的数据库生成安装驱动程序所需的不同的 powershell 脚本。

现在我正处于第一步 - 生成数据库。但是ChatGPT并不完美。这是脚本。注意:免費BNT是具有大量存储空间的服务器。它充当桑巴服务器和其他功能,但就这一点而言,重要的是它充当MySQL服务器和桑巴服务器,并且它将运行bash shell 脚本这将生成包含所有 .inf 文件及其硬件 ID 的 MySQL 数据库。以下是脚本。

#!/bin/bash

# Set up MySQL database connection parameters
db_user="mymysqluser"
db_pass="mymysqlpass"
db_name="drivers"
db_host="127.0.0.1"

# Set up the path to your drivers collection
drivers_path="/free/fr/drivers/"

# Loop through all INF files in the drivers collection
for inf_file in $(find "$drivers_path" -type f -name "*.inf"); do

  # Extract hardware IDs from INF file
  hwids=$(grep -iE "^driverver|^pci|usb\\\\" "$inf_file" | awk -F ",|=" '{print $2}' | tr -d ' ' | sort -u)
  
  #convert the inf file path to a path readable by Windows systems through SAMBA (added by borhacker)
  inf_file2=$(echo $inf_file | sed 's/\/free\/fr\/drivers\//\\\\192.168.1.2\\Fr-drivers\\/')
  inf_file3=$(echo $inf_file2 | sed 's/\//\\/g')

  # Loop through all hardware IDs and insert them into the database
  for hwid in $hwids; do
    echo "Inserting $hwid for $inf_file3 into database..."
    mysql -u $db_user -p$db_pass -h $db_host $db_name -e "INSERT INTO drivers (hwid, path) VALUES ('$hwid', '$inf_file3');"
  done

done

标记为“由 borhacker 添加' 是我做的,因为文件路径与免費BNT或从 Windows 10 访问桑巴共享。因此,当变量inf_file包含例如:

/free/fr/drivers/bluetooth/DP_Bluetooth_22094/MediaTek/FORCED/10x64/7921_1.3.14.133_tequila/mtkbtfilter.inf

该变量inf_file3包含:

\\192.168.1.2\Fr-drivers\bluetooth\DP_Bluetooth_22094\MediaTek\FORCED\10x64\7921_1.3.14.133_tequila\mtkbtfilter.inf

脚本的其余部分,我全部理解(不是全部!)。我已经研究过它以了解其行为。我唯一不明白的是这一部分:

  # Extract hardware IDs from INF file
  hwids=$(grep -iE "^driverver|^pci|usb\\\\" "$inf_file" | awk -F ",|=" '{print $2}' | tr -d ' ' | sort -u)

我想问题就在这里。我理解,这应该会提取硬件 ID从每个.inf文件中。但是当我运行脚本时,它并没有提取硬件 ID。这就是我研究这个脚本的原因。它通常提取日期,例如(运行脚本一段时间后的输出):

root@freebnt:/home/borhacker# ./indexdrivers-edit.sh
Inserting 07/10/2016 for \\192.168.1.2\Fr-drivers\video\DP_Video_nVIDIA-XP_22080\nVidia\FORCED\5x86\368.81\nvmmi.inf into database...
mysql: [Warning] Using a password on the command line interface can be insecure.
Inserting 07/10/2016 for \\192.168.1.2\Fr-drivers\video\DP_Video_nVIDIA-XP_22080\nVidia\FORCED\5x86\368.81\nvbli.inf into database...
mysql: [Warning] Using a password on the command line interface can be insecure.
Inserting 07/10/2016 for \\192.168.1.2\Fr-drivers\video\DP_Video_nVIDIA-XP_22080\nVidia\FORCED\5x86\368.81\nvlei.inf into database...
mysql: [Warning] Using a password on the command line interface can be insecure.
Inserting 07/10/2016 for \\192.168.1.2\Fr-drivers\video\DP_Video_nVIDIA-XP_22080\nVidia\FORCED\5x86\368.81\nvami.inf into database...
mysql: [Warning] Using a password on the command line interface can be insecure.


现在,我希望有人能指出我正确的方向,以创建正确的脚本,从而生成MySQL数据库。我不太了解 Linux 中处理文本的工具,也不太了解 Windows 的信息文件的内容。

相关内容