如何将选项添加到Bash函数

我是Linux新手(使用Ubuntu 10.10),我想添加一个函数.bashrc启动/停止一个tomcat服务器。 我试图parsing命令“tomcat”的两个选项。 我已经尝试了以下各种排列,但没有一个工作。

export CATALINA_HOME=/tomcat/directory function tomcat { if [$1 = "-s" ]; then `sh $CATALINA_HOME/bin/startup.sh` elif [$1 = "-x"]; then `sh $CATALINA_HOME/bin/shutdown.sh` else echo "Enter '-s' to start Tomcat, '-x' to shutdown." fi } 

为什么这不工作? 什么是正确的方法来做到这一点?

谢谢!

把所有的东西放在一起,我认为这个代码会适合你:

 export CATALINA_HOME=/tomcat/directory function tomcat { if [ "$1" = "-s" ]; then sh $CATALINA_HOME/bin/startup.sh elif [ "$1" = "-x" ]; then sh $CATALINA_HOME/bin/shutdown.sh else echo "Enter '-s' to start Tomcat, '-x' to shutdown." fi } 

从您的版本的重大变化:

  • 删除启动和closures命令周围的反引号
  • $1variables包含在双引号中

关于bash语法和安全的一些注意事项:

  • function tomcat {相当于tomcat() {
  • 正如@ooshro指出的那样,在[ if – 如果有疑问之后将空间分散出去之后需要空间
  • 在比较中,你应该喜欢= over == ,因为single-equals是其他shell使用的标准
  • 总是用双引号括住variables(如$1 ),特别是在比较语句中,或者将它们排除在外的任何地方都会导致问题
  • @ ooshro的case语法是解决这个问题的一个更简洁的方法,但是如果你打算在将来使代码更复杂
  • 反引号捕获命令的输出,然后将其replace为脚本,所以如果用反引号包围整行,bash将执行该行,然后尝试执行输出,这很less是您可能想要的
  • 你不需要这个脚本的反引号function,但是当你这样做的时候,我build议使用$(...)语法,因为它是可嵌套的,并且在我看来更容易阅读和理解

尝试(错误在'['之后缺less空格:

 export CATALINA_HOME=/tomcat/directory tomcat() { case "$1" in -s) ${CATALINA_HOME}/bin/startup.sh;; -x) ${CATALINA_HOME}/bin/shutdown.sh;; *) "Enter '-s' to start Tomcat, '-x' to shutdown." esac } 

你是什​​么意思“不起作用”? 你有什么错误信息吗? 当你开始你的function会发生什么?

尝试在“[”和“]”之前和之后放置一个空格。

另外引用$ 1作为“$ 1”。

而“=”应该是“==”,所以:

 export CATALINA_HOME=/tomcat/directory function tomcat { if [ "$1" == "-s" ]; then `sh $CATALINA_HOME/bin/startup.sh` elif [ "$1" == "-x" ]; then `sh $CATALINA_HOME/bin/shutdown.sh` else echo "Enter '-s' to start Tomcat, '-x' to shutdown." fi } 

为我工作。