-2

引数を渡す tcsh にシェル スクリプトがあり、その長さはさまざまです。引数の可能な値は、文字 -c、s、i、q、a です。また、これらの文字の組み合わせ。(例: cs、si、ca、iq、qa、csq、acs、csia ..など)。文字の順番は問いません。私の問題は、これらの 5 以外の文字の引数をチェックし、有効な文字が複数回出現するかどうかを確認することです (0 回は問題ありません)。スクリプトは両方の条件をチェックし、エラーをスローする必要があります。この目的で if ステートメントで使用できる正規表現はありますか?

4

2 に答える 2

3

使用できるコードのサンプルを次に示します。「X」を使用すると、比較が強制的に文字列になります。

#!/bin/csh -f
if ( $#argv > 0 ) then
    echo arg is $1
    if ( X$1 =~ X-* ) then
        echo "we have an argument"
        if ( "X$1" =~ X-c[aeiou] ) then
            echo I found -c followed by vowel
        else if ( "X$1" =~ "X-c" ) then
            echo I found -c alone
        else
            echo I found a -c but not a valid combo
        endif
   else
        echo I found an unknown argument: $1
   endif
endif
于 2013-05-16T16:53:01.263 に答える
0

これは、2 つの正規表現チェックで行うのが最も簡単です。

このコードを見てください:

#!/bin/tcsh

echo $1 | grep -q -e "[^csqai]"
if ( $? != 0 ) then
    echo "Valid characters"
else
    echo "Invalid characters"
endif

echo $1 | grep -q -e "\([csqai]\).*\1"
if ( $? != 0 ) then
    echo "No repeated valid characters"
else
    echo "Repeated valid characters"
endif

最初の正規表現は無効なすべての文字を検索し、2 番目の正規表現は繰り返し文字を検索します。

でこれらのチェックを行う方法がわからないtcshので、 で行いましたgrep-q旗はgrep沈黙する。$?一致が見つからない場合は 0 です。

于 2013-02-13T01:25:48.880 に答える