我编写了以下命令:lsblk -nl /dev/sdd -o MOUNTPOINT | awk '{if (NR!=1 && $1) { print 1; } else { print 0; }}'
它应该检查给定设备的任何分区(在本例中)是否/dev/sdd
已安装。
但由于某种原因,脚本同时打印 1 和 0?这有什么意义呢?
如果存在挂载点,我需要此命令评估为 true,否则评估为 false,以便在我的 shellscript 中使用它。
答案1
awk
将其代码作为循环运行在每个输入行上。对于每个非空行,您将得到 a1
或 a 。0
你可以
如果您想确定设备是否有任何已安装的分区,请考虑使用以下方法:
device=/dev/mmcblk0
if [ -n "$(lsblk -nl -o MOUNTPOINT "$device")" ]
then
echo "Partitions are mounted on $device"
else
echo "Device $device is currently unused"
fi
如果您真的想保留这种awk
方法,也许这就是您正在寻找的。 (我不完全确定为什么你想忽略第一行。在我的测试中,它似乎指的是整个设备,并且可能存在设备本身包含文件系统的情况,因此我删除了跳过测试。)
device=/dev/sdd
lsblk -nl "$device" -o MOUNTPOINT | awk 'NF { found=1 } END { print found+0 }'