Switch case 不含變量

Switch case 不含變量

我在腳本中有以下開關案例:

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

相關內容