Bash 要部署的脚本

Bash Script to Deploy

我有一个部署到 firebase 或 heroku 的脚本。在脚本的末尾,如果我用手指多了一个键或者拼错了 heroku 或 firebase,我希望脚本提示我输入所需的主机,然后从顶部再次 运行 脚本并输入我想要的内容。我尝试在 case 语句之外放置一个 while 循环。我希望当脚本到达最后 *) 它会提示我输入所需的主机,从顶部启动脚本并部署到所需的主机。

作为脚本编写的新手,我不是 100% 确定这是 how/the 编写它的最佳方式,但是当我 运行 脚本作为 deploy herokudeploy firebase 使用下面的代码,从字面上看,终端上没有任何反应。我试过 "$?" 周围的引号并移动 exit 1 周围,但仍然没有。任何方向将不胜感激。此外,我通过调用

在终端中 运行 这个脚本

deploy <placetodeploy>

#!/bin/bash

 HOST=

 while [ $? -gt 0 ]; do
   case "$HOST" in
     heroku)
      git push heroku master
      ;;
    firebase)
      firebase deploy
      ;;
    *)
      read -p "You can only choose between Heroku and Firebase. " HOST; exit 1                                                           
      ;;
   esac
 done

试试这个

#!/bin/bash

 HOST=
 while true; do
   case "$HOST" in
     heroku)
      git push heroku master
      break
      ;;
    firebase)
      firebase deploy
      break
      ;;
    *)
      read -p "You can only choose between Heroku and Firebase. " HOST                                            
      ;;
   esac
 done

你的想法是你有一个永不停止的循环(感谢 true),但是你想要的输入导致 break 语句,好吧,中断循环的执行,而catch-all case 语句允许循环继续。

如果您不想 CTRL-C 退出循环,您可能需要添加某种 "exit/cancel" 选项。

另一种方法如下:

#!/bin/bash

HOST=

while [[ "$HOST" != "heroku" && "$HOST" != "firebase" ]]
do
  read -p "You can only choose between heroku and firebase. " HOST
done

case "$HOST" in
heroku)
 echo git push heroku master
 ;;
firebase)
 echo firebase deploy
 ;;
esac

相比,优点是参数的检查和脚本主体是分开的,缺点是如果要添加更多的case,就得自己做在两个地方。