检查是否存在具有可变数字的字符串

时间:2019-04-24 17:57:33

标签: bash if-statement

检查具有可变数字的字符串的出现 我必须检查某个条件,该条件是,只要某个URL中的某处有一行指出“ [X]错误”的行,然后返回“ TestNotSuccesfull”。这里的X可以是'1','2'等。

我不知道如何发表可以检查的语句,然后再检查“ 1错误”或“ 2错误”或“ 3错误”,等等。必须有更好的解决方案。同样是因为理论上“ X错误”中的X可以导致成千上万...

我在bash中创建的命令行下检查“ 1错误”是否发生。

export result=`curl http://websiteABC.com | grep '1 wrong' | wc -l`; if [ $result -ge 1 ]; then  echo "TestNotSuccesfull"; else echo "TestSuccesfull"; fi 

有人可以帮我吗?

PS,实际上必须检查的字符串是'(...)对,X错误,(...)'的一部分。

1 个答案:

答案 0 :(得分:2)

Regexes是你的朋友。

if curl http://websiteABC.com | grep -qE '[0-9]*[1-9][0-9]* wrong'
then  echo "TestNotSuccesfull"
else echo "TestSuccesfull"
fi 

if可以接受一个复杂的命令作为参数,并且任何非零返回的结果都为false。

如果使用grep

-E可以采用扩展正则表达式,并且-q告诉它不要将匹配的行发送到stdout,而只是返回n个退出代码以表明它们是否为找到了。 [0-9]+表示一个或多个数字。

我编辑了图案。这个不会误报0 wrong失败,而是会命中01 wrong10 wrong等。

再次,c.f.我的答案开头的链接,但是- [...]是一个“字符类”,这意味着它与一个括号中的任何一个字符匹配。可以使用其他元字符进行详细说明:

*表示前一个模式的“零个或多个”,因此[0-9]*将匹配 any 个连续数字。这意味着它将匹配123454321或一个空字符串...因此,如果针对“ ab”进行测试,则它将在开头,结尾和字母之间匹配。

[0-9]*[1-9][0-9]*的意思是“任何数字或没有数字”([0-9]*),然后是任何非零数字([1-9]),然后是“任何数字或没有数字”([0-9]*)。这允许前导零,结束零,但不允许仅零。如果至少没有一个非零数字,它将失败。