Passando parâmetros para um shell script rodando como um cronjob

1

Eu sou novo no bash scripting (não estou programando em geral).

Estou escrevendo um script bash que executará um script Python que escrevi.

Eu quero ser capaz de fazer o seguinte:

  • Transmita os parâmetros para o script bash através do cronjob (para que eu possa ter duas tarefas agendadas) uma para ser executada com o parâmetro 'foobar' e a outra 'foo'

  • alterne com base no parâmetro passado para o script bash (ao alternar, quero dizer um if / else com base no parâmetro passado para o script bash).

por Takashi 07.12.2010 / 16:54

3 respostas

2

Eu estava pensando em falar com você sobre o stackoverflow, mas isso é uma 'programação' de baixo nível. Talvez seja melhor fazer isso aqui.

O primeiro parâmetro para um script de shell é referenciado por $1 , o segundo $2 , etc ... O décimo não pode ser chamado de $10 porque é $1 seguido por 0 , então você se refere a ele como ${10} , mas se você precisar consultar o décimo parâmetro explicitamente (e não manipulá-lo em um loop), provavelmente está fazendo algo errado.

A contagem de parâmetros está na variável $#

Eu sugeriria:

if [ $# -ne 1 ]
then
    echo "No parameter given" >&2
    exit 1
elif [ "$1" == 'foo' ]
then
    ./script someparams ....
elif [ "$1" == 'foobar' ]
then
    ./script otherparams ....
else
    echo "Bad parameter given" >&2
    exit 1
fi
    
por 07.12.2010 / 17:37
1

Outro formulário para if..elif..elif..else..fi é a instrução case

case "$1" in
  foobar) 
    ./script.py arg1 arg2
    ;;
  foo)
    ./script.py arg3 arg4
    ;;
  *)
    echo "unknown argument: $1"
    ;;
esac

case usa correspondência no estilo glob, então o * significa "todo o resto"

Você verá que o bash é uma linguagem bastante exigente, em que citar ou não citar uma variável pode causar grandes diferenças na forma como seu script é executado. Adquira o hábito de citar todas as suas variáveis.

    
por 02.07.2011 / 16:36
1

Você também pode usar getopts para uma maneira mais flexível de passar argumentos para o script bash. Usando getopts , você pode remover a ordenação fixa associada aos argumentos que está passando, o que corre o risco de passar dados errados se você esquecer a ordem do argumento.

    
por 02.07.2011 / 15:09