2017-01-15 3 views
0

イムシェルコマンドの入門書を読んで、それは以下のようにOR文としてパイプコマンドを使用することを提案:パイプ演算子をOR文として使用できますか?

case "$1" in 
    start|START) 
    /usr/bin/sshd 
    ;; 
    stop|STOP) 
    kill $(cat/var/run/sshd.pid) 
    ;; 
esac 

は、なぜこの作品は/その背後にあるロジック何であるのか?

答えて

2

ここではパイプ演算子ではありません。これはcaseの構文の範囲内です。 man bashを読んで、「複合コマンド」セクションに進み、ケースについて読んでください。ここで

は、bashのマニュアルが

case word in [ [(] pattern [ | pattern ] ...) list ;; ] ... esac

最初 がword展開し、 順番に各patternに対してそれを一致させようと、使用してcaseコマンドを言っているかの抽出物でありますパス名の拡張と同じマッチングルール(後述の パス名展開を参照)。ワードは、拡張、パラメータおよび変数の展開、演算子 の置換、コマンド置換、プロセスの置換および引用 の削除を使用して展開され、 が削除されます。各patternは、チルダ拡張、 パラメータと変数展開、算術置換、コマンド 置換、およびプロセス置換を使用して展開されます。シェルオプション nocasematchが有効な場合は、アルファベット文字の場合は の大文字と小文字を区別せずに一致します。一致が見つかると、 に対応するlistが実行されます。 ;;演算子が使用されている場合、最初のパターンが一致した後には 以降の一致は試行されません。 ;&;;の代わりに使用すると、次のパターンセットに関連付けられたlist が実行され続けます。 ;;の代わりにを使用すると、シェルはステートメント内の次のパターンリストがある場合は をテストし、一致した場合には対応するlistを実行します。 パターンが一致しない場合、終了ステータスはゼロです。それ以外の場合は、listで最後に実行されたコマンドの終了ステータスは です。

これは構文

case "$1" in 
start|START) 

で、少なくとも一つのパターンを伝える上記の構文と一致する、または|によって分離された複数の、aは

case word in [ [(] pattern [ | pattern ] ...) list ;; ] ... esac

あります垂直バー。

0

phoxisはパイプに使用されているのと同じ文字ですが、この文脈では、caseステートメントの特別な構文の一部で、次のステートメントの実行を引き起こす複数の値を定義します区切り文字の;;まで)。

関連する問題