目前,我正在处理一个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
或参数中有任何第二个字母,它完全没问题。有人可以帮我解决这个问题吗?
答案 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
。这将允许*
,但"-*"
块会将其报告为错误。