为什么这个脚本不接受两个参数?

为什么这个脚本不接受两个参数?

代码

#!/bin/sh
# http://tex.stackexchange.com/a/20886/13173
# http://unix.stackexchange.com/a/280830/16920
# $Id: pdf2eps,v 0.01 2005/10/28 00:55:46 Herbert Voss Exp $
# Convert PDF to encapsulated PostScript.
# usage:
# pdf2eps <page number> <pdf file without ext>

[ $# -lt 2 ] || echo "At least 2 arguments are needed" && exit 1

pdfcrop "$2.pdf"
pdftops -f "$1" -l "$1" -eps "$2-crop.pdf"
rm  "$2-crop.pdf"
mv  "$2-crop.eps" "$2.eps"

运行它作为

pdf2eps 1 ./01-02-2002-01-02-03.pdf

输出

至少需要 2 个参数

并且没有输出文件。


为什么不能在此处运行 01-02.pdf 上的命令?

答案1

[ $# -lt 2 ] || echo "At least 2 arguments are needed" && exit 1

检查参数数量是否严格小于 2,如果是不是,输出“至少需要 2 个参数”。您需要将其替换||&&

[ $# -lt 2 ] && echo "At least 2 arguments are needed" && exit 1

我认为你链接到的例子在 /usr/local/bin 中安装 .sh 脚本的安全方法?实际上更容易理解(并且-ne更适合,因为超过 2 个参数可能是一个错误):

if [ $# -ne 2 ]; then
    echo "Exactly 2 filenames are needed"
    exit 1
fi

另请注意,您不应该指定扩展名,因此您应该运行命令

pdf2eps 1 ./01-02-2002-01-02-03

相关内容