使用通配符在 Linux Shell 脚本中检查驱动器分区

使用通配符在 Linux Shell 脚本中检查驱动器分区

当我遇到 nvme 驱动器问题时,我正在编写一个 shell 脚本来擦除、分区和格式化选定的驱动器。

本质上,我想要实现的是在下面的 if 语句中使用 * 通配符来检查驱动器是否是 nvme 驱动器,以便我可以为分区声明稍后在脚本中使用的变量。

这是目前脚本的相关部分:

if [ "$DRIVE" == "/dev/nvme*" ] ; then
    DRIVEp1="${DRIVE}p1"
    DRIVEp2="${DRIVE}p2"
    DRIVEp3="${DRIVE}p3"
else
    DRIVEp1=${DRIVE}1"
    DRIVEp2=${DRIVE}2"
    DRIVEp3=${DRIVE}3"
fi

当我按原样运行脚本并将 $DRIVE 设置为“/dev/nvme0n1”时,脚本会忽略匹配并转到 else 子句。

答案1

假设您正在跑步,bash您有两个选项可以进行比较:

if [[ "$DRIVE" =~ "/dev/nvme.*" ]] ; then

或者:

if [ "${DRIVE#/dev/nvme}" != "$DRIVE" ] ; then

在第一种情况下,双括号允许额外的=~正则表达式匹配运算符;在第二种情况下,DRIVE首先/dev/nvme通过删除前导字符串进行扩展来检查变量/dev/nvme,以查看结果是否与完整扩展不同。

对于其他 shell,你可能需要使用外部程序,例如:

if [ `echo $DRIVE | grep -o "^/dev/nvme"` == "/dev/nvme" ] ; then

相关内容