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
일부 매개변수 유효성 검사를 추가했습니다.