例如,如果我有一个现有的设备变量/dev/sda
,我想验证它不是分区的名称,而是整个磁盘的名称。
我试过这个:
[[ $(df --output=source "$var" 2> /dev/null | tail -n 1) = 'udev' ]]
但是无论var='/dev/sda'
设备是否已连接,或者var='/dev/sda1'
分区未安装,这都会返回 true。
因此,即使您将先前的条件与以下条件相结合:
if grep -sq "^$var " /proc/mounts; then ...
说它是磁盘名称而不是磁盘分区是不够的。
如何检查 astring
是否是现有设备名称而不是分区名称?
您可以使用
lsblk
它 - 具体来说lsblk -o type
应该返回part
(对于分区)或disk
(对于整个块设备)。因此,例如给出:
然后
或者
使用
lsblk
:如果
"$var"
不是一个有效的设备,例如var="/dev/sda1"
,lsblk
将有一个非零退出代码。要获取所有设备的输出:
使用
mountpoint
.来自
man mountpoint
: