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

Léo*_* 준영 2 shell-script

代码

#!/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"
Run Code Online (Sandbox Code Playgroud)

运行它

pdf2eps 1 ./01-02-2002-01-02-03.pdf
Run Code Online (Sandbox Code Playgroud)

输出

至少需要 2 个参数

并且没有输出文件。


为什么你不能在这里运行 01-02.pdf 上的命令?

Ste*_*itt 6

[ $# -lt 2 ] || echo "At least 2 arguments are needed" && exit 1
Run Code Online (Sandbox Code Playgroud)

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

[ $# -lt 2 ] && echo "At least 2 arguments are needed" && exit 1
Run Code Online (Sandbox Code Playgroud)

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

if [ $# -ne 2 ]; then
    echo "Exactly 2 filenames are needed"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

还要注意,你不应该指定扩展名,所以你应该运行命令

pdf2eps 1 ./01-02-2002-01-02-03
Run Code Online (Sandbox Code Playgroud)