我是 Linux 新手(使用 Ubuntu 10.10),我想在 .bashrc 中添加一个启动/停止 tomcat 服务器的函数。我正在尝试解析命令“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
}
为什么这不起作用?正确的做法是什么?
谢谢!
答案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
}
与您的版本相比有重要变化:
- 删除启动和关闭命令周围的反引号
- 将变量括
$1
在双引号中
关于 bash 语法和安全性的一些注意事项:
function tomcat {
相当于tomcat() {
[
正如 @ooshro 指出的那样, after 后面需要一个空格if
——如有疑问,请将其隔开- 在比较中,你应该选择
=
而不是==
,因为单等号是其他 shell 使用的标准 - 始终将变量(如
$1
)括在双引号中,尤其是在比较语句中,或者在任何省略它们会导致问题的地方 - @ooshro 的
case
语法是处理此问题的更简洁的方法,但如果您计划在将来使代码变得更复杂,它的灵活性可能会降低 - 反引号捕获命令的输出,然后将其替换到脚本中,因此,如果用反引号括住整行,bash 将执行该行,然后尝试执行输出,这很少是您想要的
- 此脚本不需要反引号功能,但如果需要,我建议使用语法
$(...)
,因为它可嵌套,而且在我看来更容易阅读和理解
答案2
尝试('[' 后缺少空格而导致的错误):
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
}
答案3
“不起作用”是什么意思?你收到任何错误消息了吗?启动函数时会发生什么?
尝试始终在“[”和“]”之后和之前放置一个空格。
还将 $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
}
对我有用。