Come aggiungere opzioni alla function Bash

Sono nuovo a linux (utilizzando Ubuntu 10.10) e vorrei aggiungere una function a .bashrc che avvia / arresta un server tomcat. Sto cercando di analizzare due opzioni per il command "tomcat". Ho provato le seguenti in varie permute, ma nessuno di loro lavora.

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 } 

Perché questo lavoro non funziona? Qual è il modo giusto per farlo?

Grazie!

  • Aggiunta linea a bashrc, ora bash non risponde
  • Come definire le variables di envionment accesible da run di crontab e shell bash
  • Utilizzo dell'autocompletamento di Linux con i file AND di wordlist della directory corrente
  • .bashrc: shopt: non trovato
  • Come posso resettare il default .bashrc (debian wheezy)?
  • Come si esegue "source" quando si avvia una shell?
  • Personalizzazione rapida: come rilevare quando non c'è tty
  • `ssh foo" <command /> "` non caricare gli alias remoti?
  • 3 Solutions collect form web for “Come aggiungere opzioni alla function Bash”

    Mettendo insieme tutto qui, penso che questo codice functionrà per voi:

     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 } 

    Importnti cambiamenti dalla tua versione:

    • Rimozione di backquotes attorno ai comandi di avvio e arresto
    • Circondato la variabile $1 in virgolette doppie

    Alcune note sulla syntax bash e la sicurezza:

    • function tomcat { è equivalente a tomcat() {
    • Come dice @ooshro, è necessario uno spazio dopo [ if dopo – se è in dubbio, lo spazio
    • nei confronti, si dovrebbe preferire = over == , in quanto singoli equivalenti sono gli standard utilizzati di altre conchiglie
    • circondano sempre variables (come $1 ) in doppie virgolette, in particolare nelle dichiarazioni di confronto, ovunque ovunque li lasci fuori, causerebbero un problema
    • La syntax di case @ ooshro è un modo più conciso per affrontare questo problema, ma può essere less flessibile se si prevede di rendere il codice più complicato in futuro
    • backquotes cattura l'output di un command e lo sostituisce nello script, quindi se si circonda un'intera row con backquotes, bash eseguirà quella row e quindi provare ad eseguire l'output, che è raramente quello che probabilmente vuoi
    • Non hai bisogno di funzionalità backquote per questo script, ma quando lo fai, ti suggerisco invece di utilizzare la syntax $(...) , perché è nestabile e a mio parere è molto più facile leggere e capire

    Prova (errore nella mancanza di spazio dopo '[']:

     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 } 

    Cosa intendi con "non funziona"? Avete dei messaggi di errore? Cosa succede quando si avvia la function?

    Provate a mettere uno spazio sempre dopo e prima della "[" e "]".

    Anche citare $ 1 come "$ 1".

    E "=" dovrebbe essere "==", quindi:

     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 } 

    per me va bene.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.