Bash脚本if .. else ..不工作

时间:2016-06-03 07:30:05

标签: bash ubuntu

我是Bash脚本的新手。我在Bash脚本中添加了if .. else。如果容器不存在,我的脚本用于创建Docker容器,如果存在则创建新容器。但是脚本永远不会运行else块;它始终运行if块。

我的剧本:

#!/bin/bash
tomcat=$(ssh michael@docker.example.com sudo docker ps -a | grep -w 'my-tomcat')
echo "$?"

if [ "$BRANCH" = "tomcat" ] && [ "$?" -eq 0 ]; then
        ssh michael@docker.example.com /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 michael@docker.example.com /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

3 个答案:

答案 0 :(得分:2)

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

存储之前的退出代码:

tomcat=$(ssh michael@docker.example.com 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"?

答案 1 :(得分:2)

运行后:

echo "$?"

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

if语句中,"$?"始终为0,因为它代表[ "$BRANCH" = "tomcat" ]的返回值。即使它没有,它也代表echo的返回值。

执行此操作以保留退出代码:

tomcat="$(ssh michael@docker.example.com sudo docker ps -a | grep -w 'my-tomcat')"
tomcat_status="$?"

echo "$tomcat_status"

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

答案 2 :(得分:1)

为了帮助调试,请在set -x语句前输入if,在set +x语句后输入fi

这可以启用执行跟踪,您可以看到$branch$?!的替换。