2016-11-16 4 views
0

私はオプションを受け付けるスクリプトを作成しており、そのうちの2つは-s-eです。 -sには開始日が必要で、-eの必要日と終了日が必要ですが、他の設定なしでは使用できないようにしたいと考えています。つまり、-sオプションを使用する場合は、-eオプションも必須で、その逆もあります。オプションを作成するには、別のオプションが必要ですか?

ここに私のコードは、これまでのところだ

#!/bin/bash 

gflag=false 
uflag=false 
sflag=false 
eflag=false 
rflag=false 
nflag=false 
tflag=false 

while getopts g:u:s:e:rnt opt; do 
    case "$opt" in 
    g) 
     gflag=true 
     groupParam=$OPTARG 
     echo "-g was triggered, Parameter: $OPTARG" >&2 
     ;; 
    u) 
     uflag=true 
     userParam=$OPTARG 
     echo "-u was triggered, Parameter: $OPTARG" >&2 
     ;; 
    s) 
     sflag=true 
     startParam=$OPTARG 
     echo "-s was triggered, Parameter: $OPTARG" >&2 
     ;; 
    e) 
     eflag=true 
     endParam=$OPTARG 
     echo "-e was triggered, Parameter: $OPTARG" >&2 
     ;; 
    r) 
     rflag=true 
     echo "-r was triggered" >&2 
     ;; 
    n) 
     nflag=true 
     echo "-n was triggered" >&2 
     ;; 
    t) 
     tflag=true 
     echo "-t was triggered" >&2 
     ;; 
    esac 
done 

どのように私はこれを行うことができるように私のコードを変更できますか?

答えて

1

すべてのオプション(whileループの後)を解析した後、あなたは私がtruefalseが予想される状態を返す組み込みコマンドであるという事実を利用してい

if ($sflag && ! $eflag) || (! $sflag && $eflag); then 
    echo "Cannot specify -s without -e or vice versa" >&2 
    exit 1 
fi 

を行うことができます。

もサブシェルを使用せずにこれを書くことができますが、それは少し騒々しいです:

if { $sflag && ! $eflag; } || { ! $sflag && $eflag; }; then 
+0

は完全に働いたこと、ありがとうございます。私はgetoptsに組み込みの方法があるのだろうかと思っていましたが、うまくいきました。 – mackdiogo

関連する問題