shell script: Variável de chamada com parâmetros / arg

0

Eu tenho a seguinte função:

testcur.sh:

#!/bin/bash

function valcurl {

    if [[ $1 != "" ]]
    then

    tbl=$2     # can be multiple values
    data=/home/data
    btic=$data/$tbl"_btic"
    kline=$data/$tbl"_kline"

    if [[ "$1" == "btic" ]]
    then

        errbtic=$data/$tbl"_btic_err"

    elif [[ "$1" == "kline" ]]
    then

        errkline=$data/$tbl"_kline_err"

    fi


    cat $1 | jq . 2> $"err"$1     #   how do I replace the parameter $1 to call the variable?

    if [[ -z $"err"$1 ]]
    then
        echo "correct"
    else
        echo "contain error"
    fi


    else
    echo "Not var found, only btic or kline"
    fi

}

valcurl $1 $2

Isso é possível ou existe outra maneira?

Obrigado.

    
por Argenis Ramirez 29.05.2018 / 00:40

1 resposta

0

Parece que você deseja que a saída de erro vá para um arquivo específico, dependendo de um dos argumentos da sua função. Para isso, você não precisa de duas variáveis separadas:

if [[ "$1" == "btic" ]]; then
    err="$data/${tbl}_btic_err"
elif [[ "$1" == "kline" ]]; then
    err="$data/${tbl}_kline_err"
fi

ou apenas

err="$data/${tbl}_${1}_err"

Em seguida, chame jq :

jq . <"$1"  2>"$err"

Eu notei vários problemas com o seu código e tentei classificá-los abaixo:

#!/bin/bash

valcurl () {

    if [ "$1" != 'btic' ] && [ "$1" != 'kline' ]; then
        echo 'first argument has to be btic or kline' >&2
        return 1
    fi
    if [ -z "$2" ]; then
        echo 'second argument must not be empty' >&2
        return 1
    fi

    datadir=/home/data

    datafile="$datadir/${2}_$1"
    err="${datafile}_err"

    if jq . <"$datafile" 2>"$err"; then
        echo 'correct'
    else
        echo 'contains error'
    fi
}

valcurl "$1" "$2"

Eu assumi que é o arquivo de dados construído usando o primeiro e o segundo argumento que você deseja enviar através de jq e que você deseja verificar o status de saída de jq para falhas. jq falharia se $datafile não fosse um arquivo JSON válido.

Eu também reduzi o código um pouco, não criando variáveis separadas para cada variação de $1 e, em seguida, adicionei alguma validação dos argumentos.

    
por 29.05.2018 / 07:54