쉘 스크립트: 매개변수/arg를 사용하여 변수 호출

쉘 스크립트: 매개변수/arg를 사용하여 변수 호출

Bash 스크립트에는 다음 기능이 있습니다.

테스트 library.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

        # how do I replace the parameter $1 to call the variable?
        cat $1 | jq . 2> $"err"$1     
                
        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

이것이 가능합니까, 아니면 다른 방법이 있습니까?

답변1

함수의 인수 중 하나를 기반으로 오류 출력을 특정 파일로 이동하려는 것 같습니다. 이를 위해 두 개의 별도 변수가 필요하지 않습니다.

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

그렇지 않으면

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

그런 다음 전화하십시오 jq.

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

귀하의 코드에서 몇 가지 문제를 발견했습니다. 아래에서 문제를 해결하려고 노력했습니다.

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

나는 그것이 당신이 보내려는 첫 번째와 두 번째 인수로 구성된 데이터 파일이고 실패의 종료 상태를 jq확인하고 싶다고 가정합니다. jq유효한 JSON 파일이 아니면 jq실패합니다 .$datafile

또한 각 변형에 대해 별도의 변수를 생성하지 않음으로써 코드를 단축한 다음 $1일부 매개변수 유효성 검사를 추가했습니다.

관련 정보