2013-07-10 14 views
46

私は、変数の値に基づいてアクションを実行するBashスクリプトを持っています。 case文の一般的な構文は次のとおりです。Bashのcase文で空の文字列をテストするにはどうすればよいですか?

case ${command} in 
    start) do_start ;; 
    stop) do_stop ;; 
    config) do_config ;; 
    *)  do_help ;; 
esac 
コマンドが認識されない場合、私は何のコマンドが用意されていない場合、デフォルトのルーチンを実行し、のdo_helpしたいと思い

。結果は予測可能だった

case ${command} in 
    )  do_default ;; 
    ... 
    *)  do_help ;; 
esac 

、私が思う:私は、このようにケースの値を省略しようとしたこれにより

case ${command} in 
    ^$)  do_default ;; 
    ... 
    *)  do_help ;; 
esac 

syntax error near unexpected token `)' 

は、その後、私は正規表現で私の最高のショットを使用してみました空の$ {command}が*の場合に入ります。

私は不可能にしようとしていますか?

case _${command} in 
    _start) do_start ;; 
    _stop) do_stop ;; 
    _config) do_config ;; 
    _)  do_default ;; 
    *)  do_help ;; 
esac 

は明らかにあなたが好きな接頭辞を使用することができます

+0

どのようにコマンドが提供されていますか? stdinを通して? – Oak

答えて

77

caseステートメントは、正規表現ではなく、globを使用し、完全一致を主張します。

だから、空の文字列は""または''として、いつものように、書かれている:

case "$command" in 
    "")  do_empty ;; 
    something) do_something ;; 
    prefix*) do_prefix ;; 
    *)   do_other ;; 
esac 
4

は、ここに1つの回避策です。

1

私はを通じて、単純な秋を使用しています。渡されたパラメータ($ 1 = "")は2番目のcase文で捕捉されますが、以下の*は未知のパラメータを捕捉します。 「*」)と*)をひっくり返すことはできません。ここで

#!/usr/local/bin/bash 
# testcase.sh 
case "$1" in 
    abc) 
    echo "this $1 word was seen." 
    ;; 
    "") 
    echo "no $1 word at all was seen." 
    ;; 
    *) 
    echo "any $1 word was seen." 
    ;; 
esac 
0

は、私が(それぞれ独自に)それを行う方法は次のとおりです。

#!/bin/sh 

echo -en "Enter string: " 
read string 
> finder.txt 
echo "--" >> finder.txt 

for file in `find . -name '*cgi'` 

do 

x=`grep -i -e "$string" $file` 

case $x in 
"") 
    echo "Skipping $file"; 
;; 
*) 
    echo "$file: " >> finder.txt 
    echo "$x" >> finder.txt 
    echo "--" >> finder.txt 
;; 
esac 

done 

more finder.txt 

私は私が入力したCGIファイルの数十を含むファイルシステム内の1つまたは2つのファイルに存在するサブルーチンを探していた場合検索語、例えば'ssn_format' bashはこのようになりますテキストファイル(finder.txt)で結果を私に戻っています:

- ./registry/master_person_index.cgi: SQLClinic ::保障:: ssn_format($ユーザは、$ SCRIPT_NAME、 $ local、$ local、$ ssn)$ ssn neなら "";

関連する問題