Bash 要部署的脚本
Bash Script to Deploy
我有一个部署到 firebase 或 heroku 的脚本。在脚本的末尾,如果我用手指多了一个键或者拼错了 heroku 或 firebase,我希望脚本提示我输入所需的主机,然后从顶部再次 运行 脚本并输入我想要的内容。我尝试在 case 语句之外放置一个 while 循环。我希望当脚本到达最后 *)
它会提示我输入所需的主机,从顶部启动脚本并部署到所需的主机。
作为脚本编写的新手,我不是 100% 确定这是 how/the 编写它的最佳方式,但是当我 运行 脚本作为 deploy heroku
或 deploy 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,就得自己做在两个地方。
我有一个部署到 firebase 或 heroku 的脚本。在脚本的末尾,如果我用手指多了一个键或者拼错了 heroku 或 firebase,我希望脚本提示我输入所需的主机,然后从顶部再次 运行 脚本并输入我想要的内容。我尝试在 case 语句之外放置一个 while 循环。我希望当脚本到达最后 *)
它会提示我输入所需的主机,从顶部启动脚本并部署到所需的主机。
作为脚本编写的新手,我不是 100% 确定这是 how/the 编写它的最佳方式,但是当我 运行 脚本作为 deploy heroku
或 deploy 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
相比