繁体   English   中英

RHEL6 getopts似乎不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM