Bash脚本if.其他的不起作用



我是Bash脚本的新手。我在Bash脚本中添加了if .. else。我的脚本是在容器不存在的情况下制作Docker容器,如果存在则创建一个新容器。但是该脚本从不运行else块;它总是运行CCD_ 3块。

我的脚本:

#!/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

运行后:

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
[ .. ] && [ "$?" -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=$?

什么是$BRANCHtomcat呢?

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

要帮助调试,请在if-语句之前键入set -x,在fi语句之后键入set +x

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

相关内容

  • 没有找到相关文章

最新更新