如何检查字符串是否包含子字符串并且不包含在Bash中

时间:2018-08-31 10:43:08

标签: linux bash shell unix switch-statement

我想在bash中使用switch / case语句检查文件名(字符串)是否包含某些内容,但也没有。

这是我的情况:

case "$fileName" in
    *Failed|!cp*)
       echo "match"
     ;;
esac

但这当前不起作用,如何查看字符串是否匹配“失败”但不包含“ cp”?

如果也可以在开关/盒中完成,那就太好了

2 个答案:

答案 0 :(得分:2)

!后必须加上括号的模式列表,而不是模式本身。

|表示“或”而不是“与”。要获得AND,您应该嵌套案例。

case "$fileName" in
    *Failed)
        case "$fileName" in
            cp*) ;;
            *) echo "match" ;;
        esac
     ;;
esac

或者您可以只使用if而不是case

if [[ $filename = *Failed && $filename != cp* ]]
then echo match
fi

答案 1 :(得分:0)

或者,您也可以使用if和管道:

if echo 'Failed' | grep -v cp | grep -q Failed ; then
    echo Failed without cp
else
    echo It's either Winned or cp.
fi