Substituição de parâmetros e mensagens de erro: suprimindo números de linhas, etc.

2

Aqui está o meu arquivo de exemplo:

!/bin/bash
# argument-one

# Is first argument missing?

# First method
[[ "$1" == "" ]] && echo "Usage: $(basename $0) filename"; exit 1

# Second method
# filename=${1?"Usage: $(basename $0) filename"}

No script acima, recebo uma mensagem "limpa"

Usage: argument-one filename

quando executo o script acima sem argumentos; e sai de forma limpa.

No entanto, se eu comentar a linha 7 e remover o comentário da linha 10, recebo esta mensagem de erro quando o programa sai:

./argument-one: line 10: 5: Usage: argument-one filename

Esta mensagem sugere que há algo errado com o programa que o acionou para sair, quando, na verdade, era uma chamada sem argumentos, o que é um problema de uso.

Mas a linha 10 é preferível porque é mais concisa e também atribui uma variável, se disponível.

Minha pergunta é: "Como manter apenas a parte da mensagem e filtrar ou desativar a parte ./argument-one: line 10: 5: da mensagem de uso?

Obrigado.

    
por chandra 12.07.2014 / 19:34

1 resposta

2

Você pode usar a variável $# special para testar o número de argumentos dados a um comando:

usage() {
  echo "Usage: $0 arg"
  exit 1
}

if [[ "$#" -eq 0 ]]; then
  usage
fi

echo "called with $1"
exit 0

Quando executado, este script fornece:

$ ./foo.sh
Usage: ./foo.sh arg

$ ./foo.sh bar
called with bar
    
por 12.07.2014 / 20:35