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

标签 bash ubuntu

我是 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/

相关文章:

node.js - Node Inspector 在 Ubuntu 上安装失败

linux - 如何检查文件的查找命令列表,如果没有文件则退出

linux - 检查进程是否正在运行的脚本,如果没有运行则执行代码行

linux - bash 空字符串/命令

java - 如何在 ubuntu 14.04 中设置 tomcat7 以便它使用最新的 java-8-oracle JRE?

http - wget - 下载一个文件 help.php,但有许多 HTTP GET 参数变体

linux - Ubuntu bash awk 奇怪的行为

bash - 实现进度条

ubuntu - Nginx 不显示 ServerBlocks

linux - 无法删除设备/dev/loop0