Como verificar se não há parâmetros fornecidos para um comando?

63

Como você verifica se $* está vazio? Em outras palavras, como verificar se não há argumentos fornecidos para um comando?

    
por Charlotte 02.12.2011 / 19:15

3 respostas

96

Para verificar se não foram fornecidos argumentos ao comando, verifique o valor da variável $# e, em seguida,

if [ $# -eq 0 ]; then
    echo "No arguments provided"
    exit 1
fi

Se você quiser usar $* ( não preferível ),

if [ "$*" == "" ]; then
    echo "No arguments provided"
    exit 1
fi

Algumas explicações:

A segunda abordagem não é preferível porque na expansão do parâmetro posicional * se expande para os parâmetros posicionais, a partir de um. Quando a expansão ocorre entre aspas duplas, ela se expande para uma única palavra com o valor de cada parâmetro separado pelo primeiro caractere da variável especial IFS. Isso significa que uma string é construída. Portanto, há sobrecarga extra.

Por outro lado, # expande para o número de parâmetros posicionais.

Exemplo:

$ command param1 param2

Aqui,

O valor de $# é 2 e o valor de $* é string "param1 param2" (sem aspas), se o IFS não estiver definido. Porque se o IFS não estiver definido, os parâmetros são separados por espaços

Para mais detalhes man bash e leia o tópico chamado Parâmetros especiais

    
por 02.12.2011 / 19:24
13

Se estiver interessado apenas em resgatar um determinado argumento, Substituição de parâmetros é ótimo:

#!/bin/bash
# usage-message.sh

: ${1?"Usage: $0 ARGUMENT"}
#  Script exits here if command-line parameter absent,
#+ with following error message.
#    usage-message.sh: 1: Usage: usage-message.sh ARGUMENT
    
por 16.10.2014 / 07:33
-4

esta é uma das maneiras pelas quais você pode saber que não tem argumentos

NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
    {do something}
fi
    
por 04.10.2016 / 11:56