在命令提示符下将操作作为参数传递(Linux)

时间:2012-05-04 11:13:29

标签: linux bash shell

我已经在linux bash中编写了一个程序,以下是启动/停止该程序的方法:

start_program
stop_program
restart_program.

我在/ usr / bin中复制了上面的脚本,因此这些脚本作为命令工作。但我想要而不是上面的命令我只需键入程序名称然后将操作作为参数传递。例如,如果我想启动程序,那么我应该在命令提示符下写:

ProgramName start

如果我想卸载那么

ProgramName uninstall

如果重启

ProgramName restart

所以我怎么能做到这一点我只是编写程序名称然后传递动作作为参数并按回车来做那件事。

3 个答案:

答案 0 :(得分:11)

一种常见的方法是使用案例陈述:

case "$1" in
  start)
    # Your Start Code
    ;;
  stop)
    # Your Stop Code
    ;;
  restart)
    # Your Restart Code
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}" >&2
    exit 1
    ;;
esac

如果您的restart只是stop,那么start,您就可以:

start() {
  # Your Start Code
}

stop() {
  # Your Stop Code
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}" >&2
    exit 1
    ;;
esac

答案 1 :(得分:2)

Sionide21没错。

这里有一篇很好的文章:

http://wiki.bash-hackers.org/scripting/posparams

答案 2 :(得分:0)

以下是案例陈述的替代方案。

使用bash / shell中的参数使用if语句启动/停止/重启/卸载程序。

#!/bin/bash

start_module() {
      # Your start Code
}

stop_module() {
      # Your stop Code
}

restart_module() {
      # Your restart Code
}

uninstall_module() {
      # Your uninstall Code
}


if [ $# != 1 ]; then                # If Argument is not exactly one
    echo "Some message"
    exit 1                         # Exit the program
fi


ARGUMENT=$(echo "$1" | awk '{print tolower($0)}')     # Converts Argument in lower case. This is to make user Argument case independent. 

if   [[ $ARGUMENT == start ]]; then

    start_module

elif [[ $ARGUMENT == stop ]]; then

    stop_module

elif [[ $ARGUMENT == uninstall ]]; then

    uninstall_module

elif [[ $ARGUMENT == restart ]]; then

    restart_module

else 
    echo "Only one valid argument accepted: START | STOP | RESTART | UNINSTALL
          case doesn't matter. "
fi

将此代码保存到myScript.sh

Usage: 

./myScript.sh Start
./myScript.sh Stop
./myScript.sh check
./myScript.sh uninstall

这是an example of a real-world program,体现了这种执行方式。

侧注: 可以轻松省略任何现有模块/功能或添加其他模块/功能。

如何取出/禁止某个特定模块运行(比如维护)?

关闭 if特定模块if语句块 将禁用它,因为该模块在运行时不会被调用。