Bash
Shell 腳本:使用參數/arg 呼叫變數
我在 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
,然後添加一些參數驗證。