Bash

Shell 腳本:使用參數/arg 呼叫變數

  • April 24, 2022

我在 bash 腳本中有以下函式:

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

       # 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

這是可能的還是有其他方法?

您似乎希望根據函式的參數之一將錯誤輸出轉到特定文件。為此,您不需要兩個單獨的變數:

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失敗的退出狀態。 jq如果$datafile不是有效的 JSON 文件,將會失敗。

我還通過不為 的每個變體創建單獨的變數來稍微縮短程式碼$1,然後添加一些參數驗證。

引用自:https://unix.stackexchange.com/questions/446569