[英]RHEL6 getopts doesn't seem to be working
我有一台新的RHEL6计算机,正在尝试运行脚本以生成一些输出。 该脚本使用了我过去从未使用过的getopts。 这应该在其他机器上也可以,但是这是我第一次尝试。 以下是脚本的开头。 语法有什么问题吗? 当我尝试输出变量时,它什么也不显示:
#! /bin/sh
while getopts "h:u:g:o:e:y:bf" c
do
case "$c" in
u) USER=$OPTARG;;
g) GROUP=$OPTARG;;
o) OUT=$OPTARG;;
b) BATCH=1;;
f) FORCE=1;;
h) FQDN=$OPTARG;;
e) ENTITYID=$OPTARG;;
y) YEARS=$OPTARG;;
\?) echo "keygen [-o output directory (default .)] [-u username to own keypair] [-g owning groupname] [-h hostname for cert] [-y years to issue cert] [-e entityID to embed in cert]"
exit 1;;
esac
done
echo $FQDN
回声显示空白行。
您不能在bash getopts
使用问号(您也不能使用冒号)。 对于问号,遇到选项的结尾时, getopts
参数的值(在您的情况下$c
)设置为问号。 当出现错误时,它还会使用问号和冒号作为参数名称的值(特别是,遇到无效选项时或在非静默模式下且未提供必需选项时使用?;在静默中使用冒号)模式(如果未提供必需的选项)。 在这些错误情况下,OPTARG包含有问题的参数。 这也是POSIX getopts的工作方式。
KSH getopts的行为有所不同,但还排除了? :
? :
以及- [ ]
并且仅允许#
作为第一个选项)。 但是,当您提供-?
时,它会显示使用情况消息-?
。 基本上,不使用-? 使用shell getopts。 :)
通常,我编写一个称为“用法”的小函数,并通过*)
和检查$?
调用它$?
非零值的case语句后。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.