0

I have a new RHEL6 machine and I'm trying to run a script to generate some output. The script uses getopts which I've never used in the past. This should have worked on other machines but is my first time trying it. Below is the beginning of the script. Is there anything wrong with the syntax? When I try to output the variables it displays nothing:

#! /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

The echo displays a blank line.

4

1 に答える 1

1

bash では疑問符を使用できませgetoptsん (コロンも使用できません)。getopts疑問符の場合、オプションの終わりに達したときに、引数の値 ($cあなたの場合) を疑問符に設定します。また、エラーが発生した場合は、疑問符とコロンを引数名の値として使用します (具体的には、無効なオプションが検出された場合、または非サイレント モードで必要なオプションが指定されていない場合は ? が使用されます。コロンはサイレント モードで使用されます)。必要なオプションが指定されていない場合のモード)。このようなエラーの場合、OPTARG には問題のある引数が含まれています。これは、POSIX getopts も同様に機能する方法です。

KSH getopts の動作は異なりますが、除外も? :されます (最初のオプションとして- [ ]のみ許可#されます)。ただし、 を指定すると、使用方法のメッセージが表示されます-?。-?は基本的に使いません。シェル getopts を使用。:)

通常、私は「usage」と呼ばれる小さな関数を作成し、両方から呼び出し、case ステートメントの直後にゼロ以外の値を*)チェックします。$?

于 2014-02-19T19:53:36.833 に答える