Я новичок в 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
}
Почему это не работает? Как правильно это сделать?
Спасибо!
Собирая все вместе, я думаю, этот код подойдет вам:
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() {
[
после if
- если сомневаетесь, разложите=
над ==
, поскольку стандартное равенство в других оболочках$1
) в двойных кавычках, особенно в операторах сравнения, или в любом месте, где их исключение может вызвать проблему.case
синтаксис - более лаконичный способ решения этой проблемы, но он может быть менее гибким, если вы планируете усложнять свой код в будущем.$(...)
синтаксис вместо этого, так как он вложен и, на мой взгляд, намного легче читать и пониматьПопробуйте (ошибка из-за нехватки места после '['):
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
}
Что значит «не работает»? Вы получаете сообщения об ошибках? Что происходит, когда вы запускаете свою функцию?
Попробуйте всегда ставить пробел после и перед "[" и "]".
Также укажите 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
}
работает для меня.