5

Linux bash でプログラムを作成しましたが、そのプログラムを開始/停止する方法は次のとおりです。

start_program
stop_program
restart_program.

上記のスクリプトを /usr/bin にコピーしたので、これらのスクリプトはコマンドとして機能します。しかし、上記のコマンドの代わりに、プログラム名を入力してアクションをパラメーターとして渡すだけです。たとえば、プログラムを開始したい場合は、コマンド プロンプトで次のように記述します。

ProgramName start

アンインストールしたい場合

ProgramName uninstall

再起動する場合

ProgramName restart

では、プログラム名を書き、アクションをパラメーターとして渡し、Enterキーを押してそのことを行うようにするにはどうすればよいですか。

4

3 に答える 3

13

一般的なアプローチは、case ステートメントを使用することです。

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
于 2012-05-04T11:20:26.323 に答える
2

Sionide21はそれを正しく持っています。

ここにこれに関する素晴らしい小さな記事があります:

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

于 2012-05-04T11:27:06.913 に答える
0

これは、case ステートメントの代替です。

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

以下は、このスタイルの実行を具現化した実際のプログラムの例です。

補足:既存のモジュール/機能を省略したり、別のモジュールを追加したりするのは簡単です。

特定のモジュールを実行から除外/抑制する方法 (メンテナンスなど)?

そのモジュールは実行時に呼び出されないため、特定のモジュールをif ステートメント ブロックから削除すると無効になります。

于 2018-02-16T18:31:04.307 に答える