변수를 사용하지 않는 스위치 케이스

변수를 사용하지 않는 스위치 케이스

스크립트에 다음과 같은 스위치 케이스가 있습니다.

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

관련 정보