내 스크립트에는 다음과 같은 스위치 케이스가 있습니다.
while [ $# -gt 0 ] ; do
case "$1" in
-f|--file)
shift
f=$1
;;
-s|--string)
s=$2
shift
;;
-c|--client)
c=$3
shift
;;
-h|-help)
_usage
;;
-*)
_usage
;;
esac
shift
done
그러나 이것을 실행할 때 나는 -c
통과하는 문자열을 통해 그것을 얻을 수 없습니다. 항상 비어 있습니다. 처음 두 변수(예: -f 및 -s)가 전달되었으므로 왜 이런 일이 발생하는지 잘 모르겠습니다. 왜 이런 일이 발생하는지 제안할 수 있는 사람이 있나요?
ybdemo가 -c로 전달될 것으로 예상하여 내가 한 일은 다음과 같습니다.
./find_prod_andfix.sh -f /etc/bar/active_clients -s foo -c "ybdemo"
Mon Aug 27 14:51:22 EDT 2018 find_prod_andfix.sh 11351 INFO: /etc/bar/active_clients
Mon Aug 27 14:51:22 EDT 2018 find_prod_andfix.sh 11351 INFO: foo
Mon Aug 27 14:51:22 EDT 2018 find_prod_andfix.sh 11351 INFO:
Mon Aug 27 14:51:22 EDT 2018 find_prod_andfix.sh 11351 INFO: Checking -- Client ID:
위의 정보를 스크립트에 반영하는 위치는 다음과 같습니다.
if [[ -z $c ]]; then
_info ${f}
_info ${s}
_info ${c}
_info "Checking ${line} -- Client ID: ${CLIENT_ID}"
fi
어떤 조언이라도 매우 도움이 될 것입니다.
답변1
당신은 다음과 같은 면에서 자신을 능가했습니다 shift
.
while [ $# -gt 0 ] ; do
case "$1" in
-f|--file)
f="$2" # Re-ordered for consistency
shift
;;
-s|--string)
s="$2"
shift
;;
-c|--client)
c="$2" # this was $3, which was the error
shift
;;
-h|-help)
_usage
;;
-*)
_usage
;;
esac
shift
done