当我遇到 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