我是 Bash 脚本的新手。我添加了 if .. else
在 Bash 脚本中。我的脚本用于在容器不存在时制作 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
最佳答案
一旦你运行:
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
关于Bash 脚本 if .. else .. 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37608485/