変数の値に基づいてアクションを実行する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
結果は予測可能でした、私は思う:
syntax error near unexpected token `)'
次に、正規表現でベストショットを使用してみました:
case ${command} in
^$) do_default ;;
...
*) do_help ;;
esac
これにより、空の$ {command}は*ケースにフォールスルーします。
私は不可能をしようとしていますか?
case
ステートメントは正規表現ではなくグロブを使用し、完全一致を要求します。
したがって、空の文字列は通常どおり、""
または''
:
case "$command" in
"") do_empty ;;
something) do_something ;;
prefix*) do_prefix ;;
*) do_other ;;
esac
単純なフォールスルーを使用します。渡されたパラメーター($ 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
ここに私がそれを行う方法があります(それぞれに):
#!/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 :: Security :: ssn_format($ user、$ script_name、$ local、$ Local、$ ssn)if $ ssn ne "";