2015-12-08 2 views
1

Я просто написал небольшой скрипт, который вытаскивает из репозитория GIT, а затем запускает две команды.Script/Bash: Как добавить if-statement и проверить фатальную ошибку?

Я хотел бы добавить, если заявление, когда пароль введен неправильно, чтобы не запустить две команды до сих пор у меня есть

#!/bin/sh 
echo Pulling GIT repository and do command1 and command2. Press Enter to start... 
read 
cd /myProjects 
git pull 
printf "\n \n command1 will start now \n \n" 
command1 
printf "\n \n command2 will start now \n\n" 
command2 
echo Finished. Press Enter to exit ... 
read 

Я думаю, что-то из следующего было бы хорошо. Я просто не могу понять, что положить в условие if.

#!/bin/sh 
    echo Pulling GIT repository and do command1 and command2. Press Enter to start... 
    read 
    cd /myProjects 
    git pull 
if [ the Password was wrong ] ; then 
    printf "\n \n command1 will start now \n \n" 
    command1 
    printf "\n \n command2 will start now \n\n" 
    command2 
    echo Finished. Press Enter to exit ... 
    read 
else 
    echo Your password was wrong 
fi 

Обратите внимание на выход за неправильный пароль:

fatal: remote error: Invalid username or password. 
+0

возвращают ли мерзавец код состояния можно проверить? – AlG

+0

@AlG: Неразумно. Он возвращает 1 для почти каждой ошибки. –

+3

@AIG Конечно. 'git what || выход' должен быть всем, что требуется. Пока вам все равно, почему это не удалось, это достаточно хорошо. – tripleee

ответ

0

@tripleee был правильный ответ. Другой способ написать это:

if git pull; then 
    command1 
    command2 
fi 

Предположительно, выход ошибки GIT PULL будет достаточно ясно, что вам не нужно, чтобы добавить сообщение об ошибке.

0

Еще лучший способ написать это в bash заключается в следующем.

git pull && command1 && command2 

Это приведет к следующему поведению. Если git pull выйдет, он выполнит команду 1, если команда 1 завершится успешно, она выполнит команду2.

Если вы хотите, чтобы command2 также выполнялся независимо от того, сбой команды command1, вы пишете его следующим образом.

git pull && command1 || command2 

Это приведет к тому, что команды 1 и 2 будут выполнены только в случае успешного выполнения git.

Другие варианты более продвинутых функций используют переменную $?, которая дает вам числовой код завершения последней выполненной команды. В bash обычно 0, если команда выполнена успешно или любое число от 1 или выше, чтобы указать конкретный случай сбоя.

Это позволяет делать более продвинутые вещи, как

if [ $? -gt 0 && $? -lt 5 ] ; then 
    command1 
elif [ $? -eq 6 ] ; then 
    stuff 
else 
    things 
fi 
Смежные вопросы