Назад | Перейти на главную страницу

Как добавить параметры в функцию Bash

Я новичок в 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() {
  • Как указывает @ooshro, после [ после if - если сомневаетесь, разложите
  • при сравнении вы должны предпочесть = над ==, поскольку стандартное равенство в других оболочках
  • всегда окружать переменные (например, $1) в двойных кавычках, особенно в операторах сравнения, или в любом месте, где их исключение может вызвать проблему.
  • @ ooshro's case синтаксис - более лаконичный способ решения этой проблемы, но он может быть менее гибким, если вы планируете усложнять свой код в будущем.
  • обратные кавычки фиксируют вывод команды и затем заменяют его в скрипт, поэтому, если вы окружите всю строку обратными кавычками, bash выполнит эту строку, а затем попытается выполнить вывод, что редко бывает тем, что вам, вероятно, нужно
  • Для этого скрипта вам не нужна функция обратных кавычек, но когда вы это сделаете, я предлагаю использовать $(...) синтаксис вместо этого, так как он вложен и, на мой взгляд, намного легче читать и понимать

Попробуйте (ошибка из-за нехватки места после '['):

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
}

работает для меня.