2013-02-12 143 views
-2

我在tcsh中有一个shell脚本,我传递了一个参数,其长度可以变化。参数的可能值是字母-c,s,i,q,a。也是这些字母的组合。 (例如:cs,si,ca,iq,qa,csq,acs,csia等)。这些字母的顺序无关紧要。 我的问题是检查参数除了这些5以外的任何字符,并且如果任何有效字符出现超过一次(零时间是好的)。该脚本应检查这两个条件并抛出错误。是否有任何正则表达式可用于if语句用于此目的?tcsh shell脚本中的正则表达式

+0

请张贴您的代码。 – 2013-02-12 16:41:16

+2

[你有什么尝试?](http://whathaveyoutried.com/) – ruakh 2013-02-12 16:55:06

+0

我把脚本称为“myscript -csq”。我尝试了下面的代码。如果(“$ 1”=〜[csqai])回声“有效参数”其他回声“无效”endif但是,如果两个c都存在,此代码不会抛出错误。 – user2065523 2013-02-12 17:00:36

回答

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。

+0

当我尝试,发布的代码不捕获,如果参数是类似cqm的地方,非法角色来了经过一个或多个合法人物。 – user2065523 2013-02-13 06:55:32

+0

好点,现在应该修复... – 2013-02-13 23:11:02

0

以下是您可以使用的示例代码片段。使用“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 
+0

csh没有正则表达式 – 2013-05-16 16:54:40