Если для команды проверить, если это удалось

Я работаю над сценарием bash для создания логических томов. У меня есть команда, которую я хочу добавить, чтобы проверить, все ли они успешны. Какой самый простой способ сделать это?

 #!/bin/bash
 pvcreate /dev/md5

vgcreate vg0 /dev/md5

lvcreate -L 200MB vg0 -n test
4
задан 18 February 2014 в 01:06

5 ответов

#!/bin/bash

pvcreate /dev/md5 && echo "pvcreate succeeded" || echo "pvcreate failed"

vgcreate vg0 /dev/md5 && echo "vgcreate succeeded" || echo "vgcreate failed"

lvcreate -L 200MB vg0 -n test && echo "lvcreate succeeded" || echo "lvcreate failed"

Логическая часть И && будет выполнена только в том случае, если команда выполнена успешно (true), в противном случае будет выполнена логическая часть ИЛИ || (false).

0
ответ дан 18 February 2014 в 01:06
#!/bin/ksh
safeRunCommand() {
typeset cmnd="$*"
typeset ret_code

echo cmnd=$cmnd
eval $cmnd
ret_code=$?
if [ $ret_code != 0 ]; then
  printf "Error : [%d] when executing command: '$cmnd'" $ret_code
  exit $ret_code
fi
}

command="ls -l | grep p"
safeRunCommand "$command"

Источник: StackOverFlow

0
ответ дан 18 February 2014 в 01:06

Это было бы традиционно:

#!/bin/bash
pvcreate /dev/md5 || die "pvcreate failed"
vgcreate vg0 /dev/md5 || die "vgcreate failed"
lvcreate -L 200MB vg0 -n test || die "lvcreate failed"

Функция die - это то, что вы должны определить, которая печатает сообщение об ошибке и затем завершает работу. Примером реализации может быть

die() {
     echo $@ 1>&2   # print arguments of 'die' to standard error
     exit 1         # exit the script
}

Когда вы делаете это так, скрипт не выдаст никакого вывода, если что-то не получится, и в этом случае он не пойдет дальше. Если вы хотите, чтобы он продолжал работать даже в случае сбоя команды, удалите строку exit из реализации die.

Если вы хотите получить сообщение для каждой успешной команды, вы также можете сделать это:

#!/bin/bash
if pvcreate /dev/md5; then
    echo "pvcreate succeeded"
else
    echo "pvcreate failed"
fi

и аналогично для двух других команд.

0
ответ дан 18 February 2014 в 01:06
#!/bin/bash
if pvcreate /dev/md5
then
  if vgcreate vg0 /dev/md5
  then
    lvcreate -L 200MB vg0 -n test
  fi
fi

Не тест. Но должно работать.

Базовая структура if-else:

if condition
  then
    do somethin...
fi
0
ответ дан 18 February 2014 в 01:06

Если перед выполнением команд все команды зависят от одной, вы можете использовать set -e:

#!/bin/bash
set -e

pvcreate /dev/md5
vgcreate vg0 /dev/md5
lvcreate -L 200MB vg0 -n test

. Обратите внимание, что вышеприведенное будет завершено без специального сообщения о том, какая команда не выполнена.

0
ответ дан 18 February 2014 в 01:06

Другие вопросы по тегам:

Похожие вопросы: