-2

我在 tcsh 中有一个 shell 脚本,我将一个参数传递给该脚本,其长度可能会有所不同。参数的可能值是字母 -c,s,i,q,a。以及这些字母的组合。(例如:cs、si、ca、iq、qa、csq、acs、csia ..等)。字母的顺序无关紧要。我的问题是检查除这 5 个字符之外的任何字符的参数,以及是否有任何有效字符出现超过一次(零时间是可以的)。该脚本应检查这两个条件并引发错误。是否有任何正则表达式可以与 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

这将是最简单的两种正则表达式检查,一种用于所有字母的有效性,另一种用于查找重复的字母。

看看这段代码:

#!/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

第一个正则表达式查找所有无效字符,第二个查找任何重复字符

我不知道如何进行这些检查tcsh,所以我用grep. -q国旗grep沉默了。$?如果没有找到匹配项,则为 0。

于 2013-02-13T01:25:48.880 回答