Я писал сценарий оболочки, который стирает, разбивает на разделы и форматирует выбранный диск, когда у меня возникли проблемы с дисками nvme.

По сути, я пытаюсь выполнить способ использования подстановочного знака * в приведенном ниже операторе 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 ответ1

0

Предполагая, что вы используете bash вас есть два варианта сравнения:

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

или же:

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

В первом случае двойные скобки позволяют дополнительному =~ регулярного оператору выражения соответствия; во втором проверяется, чтобы переменная DRIVE начиналась с /dev/nvme с удалением ведущей строки /dev/nvme чтобы увидеть, отличается ли результат от полного раскрытия.

С другими оболочками вам может понадобиться использовать внешнюю программу, например:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .