检查传递给bash脚本的参数是否是某个扩展名的文件

时间:2018-01-08 18:57:58

标签: bash command-line

我想检查是否

  • 传递给bash脚本的命令行参数的数量等于一个

  • 参数指向现有文件

  • 参数以.epub结尾(换句话说,文件扩展名为.epub

我已经处理了第一个和第二个要求,但我无法处理最后一个要求。我的尝试如下:

if [ $# -eq 1 ] && [ -f $1 ] && [ ${"$1": -5} == ".epub" ]; then

1 个答案:

答案 0 :(得分:0)

替换:

${"$1": -5}

使用:

${1: -5}

另外,如果文件名中包含空格,请使用双引号:

[ $# -eq 1 ] && [ -f "$1" ] && [ "${1: -5}" == ".epub" ]

旁白:兼容性

最后,==而非${1: -5}都不是POSIX。如果您想要POSIX兼容性,请使用:

 [ $# -eq 1 ] && [ -f "$1" ] && [ "${1%.epub}" != "$1" ]

这不仅适用于bash,也适用于许多其他shell。