Por que esse script não aceita dois argumentos?

3

Código

#!/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"

Execute como

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

Saída

At least 2 arguments are needed

e nenhum arquivo de saída.

Por que você não pode executar aqui o comando em 01-02.pdf?

    
por Léo Léopold Hertz 준영 04.05.2016 / 08:58

1 resposta

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

verifica se o número de argumentos é estritamente menor que 2 e, se não , saem "Pelo menos 2 argumentos são necessários". Você precisa substituir o || por && :

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

Acho que o exemplo que você vinculou em Uma maneira segura de instalar o script .sh em / usr / local / bin? é realmente mais fácil de entender (e -ne é mais adequado, pois ter mais de 2 argumentos é provavelmente um erro):

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

Note também que você não deveria especificar a extensão, então você deve executar o comando como

pdf2eps 1 ./01-02-2002-01-02-03
    
por 04.05.2016 / 09:34