我正在编写一个安装自动化 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
此外,如果可以的话,您应该避免将通配符作为参数,因为还有其他选择,例如,在这种情况下,最好使用echo
或printf
(实际上,这是一种循环构造)。
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