ошибка остановки скрипта оболочки - PullRequest
9 голосов
/ 12 мая 2011

У меня есть следующий скрипт, и я хочу, чтобы скрипт прекратил выполнение в строке x, если в строке x обнаружена ошибка, как мне это сделать?

pvcreate /dev/$1
vgextend VolGroup00 /dev/$1
lvextend --size +$2 /dev/VolGroup00/LogVol00
resize2fs /dev/VolGroup00/LogVol00

Ответы [ 3 ]

12 голосов
/ 12 мая 2011

Добавьте в начало следующее.

set -e

После выполнения этой строки оболочка завершит работу, если какая-либо строка вернет код ошибки.set +e снова отключит эту функцию (т. Е. Вернется к продолжению независимо от кодов возврата ошибки).

См. http://www.davidpashley.com/articles/writing-robust-shell-scripts.html для получения дополнительной информации.

9 голосов
/ 12 мая 2011

Вам нужно использовать set -e где-то перед выполнением этой части.

1 голос
/ 12 мая 2011

Вам нужно будет запрашивать каждый шаг, чтобы проверить код возврата. Это означает, что вам нужно понять, какие коды возврата для каждого запроса (могут отличаться для каждого). В приведенном ниже примере проверяется vgextend на наличие кода ошибки -1, а затем возвращается значение -1. ​​

pvcreate /dev/$1
vgextend VolGroup00 /dev/$1

if [ $? == -1 ]; then
      echo "vgextend returned an error"
      exit -1;
fi

lvextend --size +$2 /dev/VolGroup00/LogVol00
resize2fs /dev/VolGroup00/LogVol00

Установка -e может быть излишней, так как некоторые ошибки могут быть допустимы при определенных обстоятельствах. В приведенном ниже примере rm вернет ошибку, если файл не существует, но можно продолжить (да, я знаю, что мы могли бы условно удалить, но пример предназначен для иллюстрации сделанной точки).

# delete the file, it it exists
rm thefile
# create the file
touch thefile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...