2016-08-24 20 views
0

でbashスクリプトを実行している私は私のbashスクリプトは、私が必須の引数

bash.sh --subj directoryname --input filename --all 

--subj--inputを入力した場合にのみ動作しているように、そして--allは、すべてのスクリプトを動作させるために必要な、と--all引数がないされたいです入力が必要です。

--subjまたは--inputのいずれかが欠落している場合、私は、次のメッセージが印刷されたい:ディレクトリ名とファイル名の両方を提供

してください。

--all引数が欠落している場合は、私が印刷したい:

Please use --all option. 

私はoptparseを使用してのGithubからスクリプトを修正します。このコードを使用して

source optparse.bash 
optparse.define short=s long=subj desc="subject name" variable=subj 
optparse.define short=i long=input desc="The file to process" variable=input 
optparse.define short=a long=all desc="all option" variable=all value=true default=false 

source $(optparse.build) 
if [ "$subj" == "" ]; then 
    echo "ERROR: Please provide a directory name" 
    exit 1 
fi 

if [ "$input" == "" ]; then 
    echo "ERROR: Please provide an input" 
    exit 1 
fi 

if [ "$all" == "" ]; then 
    echo "ERROR: Please use the all option" 
    exit 1 
fi 

https://github.com/nk412/optparse/blob/master/sample_head.sh

、それは私が--subjまたは-inputをミスしたときのディレクトリ名を入力してくださいと言うん。しかし、私がすべてを欠場すると、それは何の誤りも言わない。なぜそれが分かっていますか?そのドキュメントから

+0

なぜオプションがあるのですか?単に 'bash.sh directoryname filename'を使用してください。 – chepner

+0

@chepner:何らかの理由でこの作業をそのまま行う必要があるので、--subj、--input、--allを使用する必要があります。( – Lena

+0

ソース$(optparse .build) 'once。 – tripleee

答えて

0

フラグはなく、変数に代入され、余分なパラメータ値を持つ、まったく同じ方法で定義されています。

optparse.define short=v long=verbose desc="Set flag for verbose mode" variable=verbose_mode value=true default=false 

これはフラグが引数を必要としないオプションがあり、正確に何をしたいです。

+0

私はあなたの提案。しかし、私は問題を解決できませんでした.. – Lena

0
optparse.define short=… value=true default=false 

私はあなたの提案を使用して私の質問を編集しました。テスト"$all" == ""が反映されていないためだ

optparse.define short=a long=all desc="all option" variable=all value=true 

:私はあなたの場合は...

問題を解決することができませんでした、それはですので、しかし、あなたは、default=false句を望んでいません$allfalseの場合

関連する問題