我在tcsh中有一个shell脚本,我传递一个参数,其长度可以变化。参数的可能值是字母-c,s,i,q,a。还有这些字母的组合。 (例如:cs,si,ca,iq,qa,csq,acs,csia ..etc)。字母的顺序无关紧要。 我的问题是检查除了这5个以外的任何字符的参数,并且如果任何有效字符出现多次(零时间没问题)。脚本应该检查两个条件并抛出错误。是否有任何正则表达式可以用于if语句?
答案 0 :(得分:2)
以下是您可以使用的示例代码段。使用“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
答案 1 :(得分: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。