getops参数问题

时间:2018-04-26 01:23:24

标签: bash

目前,我正在处理一个bash脚本,该脚本需要通过它传递参数。

我的getOps专栏:

while getopts ":s:d:e:*" opt; do
  case $opt in
    s) 
      kb_status
      ;;
    d)
      kb_disable
      ;;
    e)
      kb_enable
      ;;
    *)
      echo "Invalid option: -$OPTARG"
      ;;
  esac
done

主要问题是每当我尝试通过

传递脚本时
./myscript.sh -e`

我从通配符参数中收到以下消息:

  

无效选项:-e

但是,当我将其作为

运行时
./myscript.sh -ee 

或参数中有任何第二个字母,它完全没问题。有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

问题是在

中的e之后的“:”字符
while getopts ":s:d:e:*" opt; do

“:”告诉getopts在-e选项之后期望参数。

因此,如果您希望脚本只支持-s -d和-e选项,请执行以下操作:

while getopts sde opt; do

答案 1 :(得分:1)

N <- 100 train <- data.frame(PRIMARY.DESCRIPTION=sample(c("A","B"), replace = T, size = N), response = rbinom(n=N, prob=0.7, size=1)) dim(train) # 100 2 narcotics <- ifelse(train$PRIMARY.DESCRIPTION == "A", 1, 0) length(narcotics) # 100 theft <- ifelse(train$PRIMARY.DESCRIPTION == "B", 1, 0) length(theft) # 100 crime.type <- c(desc.A, desc.B) length(crime.type) # 200 logit.mod.train <- glm(response ~ PRIMARY.DESCRIPTION+crime.type, data = train, family = "binomial") 之后的:放入选项列表意味着e选项需要参数。 -e本身缺少参数,-e将参数的值设置为-ee

由于你没有对e做任何事情,看起来你并不真正需要你的选项参数,所以你不应该在每个选项之后使用$OPTARG

:

还不清楚为什么在选项列表的末尾有while getopts ":sde*" opt; do 。这将允许*,但"-*"块会将其报告为错误。