从 BASH 脚本识别 M.2 SSD

从 BASH 脚本识别 M.2 SSD

我正在编写一个安装自动化 BASH 脚本。我希望nvme-cli仅在 NVMe SSD 确实存在的情况下才安装该软件包。我找不到一种简单的方法来查询硬件(例如,使用lshw)以获得某种是或否的答案。你们中有人能提供一种从 BASH 脚本中提取特定答案的方法吗?我想使用条件case来安装或不安装它。

答案1

目录测试就足够了:(
路径/sys/class/nvme由模块创建nvme。但是,这并没有说明驱动器的运行状态,或者即使驱动器存在)。

#!/bin/bash

if [[ -d /sys/class/nvme ]]; then
  apt-get -y install nvme-cli
fi

或者,如果您更喜欢使用通配符来检查文件是否存在,则 -loopfor将具有避免子 shell 的优势:

shopt -s nullglob
for _ in /dev/nvme*; do
  apt-get -y install nvme-cli; break
done

此外,如果可以的话,您应该避免将通配符作为参数,因为还有其他选择,例如,在这种情况下,最好使用echoprintf(实际上,这是一种循环构造)。

shopt -s nullglob
if [[ -n $(echo /dev/nvme*) ]]; then
  apt-get -y install nvme-cli
fi

答案2

dmesg | grep -q nvme
if [ $? = 0 ]  ; then 
      apt install nvme-cli -y
fi

所有这些解决方案的工作原理应该大致相同;它们都在测试内核是否以任何方式找到了 NVME 设备。

如果安装程序在启动时运行,那么这可能就足够了。如果安装程序可能在启动后很长时间才运行,那么第一行最好是:

grep -q nvme /var/log/dmesg

答案3

检查是否存在任何 nvme 设备文件:

if ls /dev/nvme*
then 
    echo "Install NVME-CLI" 
fi

答案4

检查 nvme 驱动是否加载

if grep -q nvme /proc/devices
then 
    echo "Install NVME-CLI" 
fi

相关内容