2016-06-03 5 views
1

Bash 스크립팅을 처음 접했습니다. Bash 스크립트에 if .. else을 추가했습니다. 내 스크립트는 컨테이너가없는 경우 Docker 컨테이너를 만들고, 존재하는 경우 새 컨테이너를 만드는 데 사용됩니다. 그러나 스크립트는 결코 else 블록을 실행하지 않습니다. 항상 if 블록을 실행합니다.Bash 스크립트가 다른 경우 작동하지 않습니다.

내 스크립트를

#!/bin/bash 
tomcat=$(ssh [email protected] sudo docker ps -a | grep -w 'my-tomcat') 
echo "$?" 

if [ "$BRANCH" = "tomcat" ] && [ "$?" -eq 0 ]; then 
     ssh [email protected] /bin/sh <<-EOF 
       { cd tomcat/ && sudo docker stop my-tomcat && sudo docker rm my-tomcat; } \ 
       && { sudo docker build -t tomcat .; } \ 
       && { sudo docker run -h tomcat --name my-tomcat -itd -p 2013:8080 tomcat; } \ 
       && { sudo docker start my-tomcat; } 
     EOF 
else 
     ssh [email protected] /bin/sh <<-EOF 
       { cd tomcat/ && sudo docker build -t tomcat .; } \ 
       && { sudo docker run -h tomcat --name my-tomcat -itd -p 2013:8080 tomcat; } \ 
       && { sudo docker start my-tomcat; } 
     EOF 
fi 
+0

은 "$ 지사는" "바람둥이"모든 시간을 동일인가? – Krishna

+1

Copy는 http://www.shellcheck.net/에 스크립트를 붙여 넣었으며'<<를 사용할 때 - 탭으로 들여 쓰기 만 할 수 있습니다 .' 그 오류를 수정하면 문제를 해결하는 데 도움이 될 수 있습니다 – Inian

+0

"$ 지점 "은 항상"바람둥이 "와 같고 변수가있는 바람둥이를 타는 이유는 무엇입니까? – Krishna

답변

2

당신이 실행되면 : 그것은 [ "$BRANCH" = "tomcat" ]의 반환 값을 나타냅니다 때문에 if 문에서

echo "$?" 

if [ "$BRANCH" = "tomcat" ] && [ "$?" -eq 0 ]; then 

, "$?" 항상 0 될 것입니다. 그리고 그렇지 않은 경우에도 echo의 반환 값을 나타냅니다.

는 종료 코드를 유지하는 대신이 작업을 수행

:

tomcat="$(ssh [email protected] sudo docker ps -a | grep -w 'my-tomcat')" 
tomcat_status="$?" 

echo "$tomcat_status" 

if [ "$BRANCH" = "tomcat" ] && [ "$tomcat_status" -eq 0 ]; then 
+1

덕분에 지금 작동 중입니다. –

+0

도움이 됨으로써 기쁩니다. – Will

1

fi 문 다음에 set +xif -statement 전에 디버깅을 입력 set -x 도움,하고.

이렇게하면 실행 추적이 가능하며 $branch$?!을 대체 할 수 있습니다.

2
[ .. ] && [ "$?" -eq 0 ] 
#   ^This will always be 0, since it's referring to the previous 
#    commands ([ .. ]) exit code 

스토어에서 종료 코드 이전 :

tomcat=$(ssh [email protected] sudo docker ps -a | grep -w 'my-tomcat') 
tomcat_exit=$? 

그리고 $BRANCH 무엇입니까? 그리고 tomcat?

if [ "$BRANCH" = "$tomcat" ] && [ "$tomcat_exit" -eq 0 ]; then 
#    ^Is this a constant "tomcat" or variable "$tomcat"? 
+0

죄송합니다. 같은 시간에 같은 답변을 작성했습니다. – Will

관련 문제