Pen*_*CSC 10 command-line ssd bash nvme
我正在编写一个安装自动化 BASH 脚本。nvme-cli仅当实际存在 NVMe SSD 时,我才想安装该软件包。我找不到一种简单的方法来查询硬件(例如,使用lshw)来获得一种是或否的答案。你们中的任何人都可以提供一种从 BASH 脚本中提取特定答案的方法吗?我想使用case空调来安装或不安装它。
bac*_*c0n 14
目录测试就足够了:(
路径/sys/class/nvme由模块创建nvme。但是,这并没有说明驱动器的运行状态,甚至驱动器是否存在)。
#!/bin/bash
if [[ -d /sys/class/nvme ]]; then
apt-get -y install nvme-cli
fi
Run Code Online (Sandbox Code Playgroud)
或者,如果您更喜欢使用通配符来检查文件是否存在,则for-loop 将具有避免使用子 shell 的优势:
shopt -s nullglob
for _ in /dev/nvme*; do
apt-get -y install nvme-cli; break
done
Run Code Online (Sandbox Code Playgroud)
此外,如果可以,您应该避免将 globbing 作为参数,在那里有替代方案,例如,在这种情况下,使用echo或printf更可取(实际上,这是一个循环结构)。
shopt -s nullglob
if [[ -n $(echo /dev/nvme*) ]]; then
apt-get -y install nvme-cli
fi
Run Code Online (Sandbox Code Playgroud)
在某些情况下,可用空间是一个问题,此外,我坚信通常不安装冗余打包,所以,最终我选择了:
NVMECOUNT=`lsblk | grep nvme | wc -l`
if [ $NVMECOUNT -gt 1 ]
then
apt -y install nvme-cli
fi
Run Code Online (Sandbox Code Playgroud)
谢谢!