シェルスクリプト:パラメータ/ 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

関数の引数の1つに基づいて、エラー出力を特定のファイルに移動したいようです。これには2つの別々の変数は必要ありません。

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"

私はそれがあなたが送信したい最初と2番目の引数で構成されたデータファイルであり、失敗の終了ステータスをjq確認したいとします。jq有効なJSONファイルでなければjq失敗します。$datafile

また、各バリアントに対して別々の変数を生成しないことでコードを短縮し、$1いくつかのパラメータ検証を追加しました。

おすすめ記事