关于Linux:如何使用if查看文件在shell bash脚本中是否有后缀

how to use if to see whether file has suffix in shell bash script

本问题已经有最佳答案,请猛点这里访问。

如果[名]

如何表达感情的字符串或文件include"。"

我是新研究的壳的任何帮助,谢谢!


您可以使用匹配运算符:

1
2
3
4
5
$ if [["abc.def" =~ \. ]]; then echo"yes"; else echo"no"; fi
yes

$ if [["abcdef" =~ \. ]]; then echo"yes"; else echo"no"; fi
no

如果点是字符串中的第一个或最后一个(或唯一)字符,则匹配。如果希望点的两边都有字符,可以执行以下操作:

1
2
3
4
5
6
7
8
$ if [["ab.cdef" =~ .\.. ]]; then echo"yes"; else echo"no"; fi
yes

$ if [[".abcdef" =~ .\.. ]]; then echo"yes"; else echo"no"; fi
no

$ if [["abcdef." =~ .\.. ]]; then echo"yes"; else echo"no"; fi
no

您还可以使用模式匹配:

1
2
3
4
5
6
7
8
$ if [["ab.cdef" == *?.?* ]]; then echo"yes"; else echo"no"; fi
yes

$ if [[".abcdef" == *?.?* ]]; then echo"yes"; else echo"no"; fi
no

$ if [["abcdef." == *?.?* ]]; then echo"yes"; else echo"no"; fi
no

模式和正则表达式的一个很好的参考是Greg的wiki。


bash支持全局模式匹配:

1
2
3
if [["$file" = *?.?* ]]; then
   ...
fi

请注意,这也假定了一个前缀——这也确保了它不会与...目录匹配。

如果要检查特定扩展名:

1
2
3
if [["$file" = *?.foo ]]; then
   ...
fi


1
2
3
4
echo"xxx.yyy" | grep -q '\.'
if [ $? = 0 ] ; then
    # do stuff
fi

1
2
3
echo"xxx.yyy" | grep -q '\.' && <one statement here>
#e.g.
echo"xxx.yyy" | grep -q '\.' && echo"got a dot"