2011-07-26 6 views
3

getoptsを正しく使用する方法や、引数で渡すことができる他の方法を示す例がありますか?私はこれをUNIXシェル/ bashで書こうとしています。私は、getoptとgetoptsがあり、どちらを使うのが良いかわからないことがあります。結局、私はこれをさらに多くのオプションを追加するために構築します。bashの引数を渡すための手法としてgetopt(s)を使用する方法

この場合、入力としてファイルパスをシェルスクリプトに渡して、正しく入力されなかった場合の説明を入れたいと思います。

例えば
export TARGET_DIR="$filepath" 

./mytest.sh -d /home/dev/inputfiles 

エラーMSGまたはそれをこのように実行している場合は正しい使用方法については、プロンプト(コマンドラインで呼び出す):

./mytest.sh -d /home/dev/inputfiles/ 
+0

あなたの引数の解析方法に関係なく、フォルダに末尾にスラッシュがあるかどうか、存在するかどうか、そしてフォルダがあるかどうかを確認することができます。 – lunixbochs

答えて

6

ユーザーとして、私は考えディレクトリ名に後ろにスラッシュを付けることでエラーが発生したプログラムでは非常に困惑しています。必要に応じて削除することができます。

かなり完全なエラーチェックとシェルの例:getoptsはドキュメントについて

#!/bin/sh 

usage() { 
    echo "usage: $0 -d dir_name" 
    echo any other helpful text 
} 

dirname="" 
while getopts ":hd:" option; do 
    case "$option" in 
    d) dirname="$OPTARG" ;; 
    h) # it's always useful to provide some help 
     usage 
     exit 0 
     ;; 
    :) echo "Error: -$OPTARG requires an argument" 
     usage 
     exit 1 
     ;; 
    ?) echo "Error: unknown option -$OPTARG" 
     usage 
     exit 1 
     ;; 
    esac 
done  

if [ -z "$dirname" ]; then 
    echo "Error: you must specify a directory name using -d" 
    usage 
    exit 1 
fi 

if [ ! -d "$dirname" ]; then 
    echo "Error: the dir_name argument must be a directory 
    exit 1 
fi 

# strip any trailing slash from the dir_name value 
dirname="${dirname%/}" 

':)' 行にbash manual

+0

いい例。ありがとうございました。 – jdamae

+0

ありがとうございます。最初はそれは仕事をしなかったが、私は本体の代わりに関数でgetoptsロジックを持っていた – asgoth

0

修正で見て:

:) echo "Error: -$OPTARG requires an argument" 

かの理由フラグの後に値が与えられなかった場合、OPTARGはフラグの名前を取得し、フラグは ":"に設定され、上のサンプルでは

0123が出力されます
Error: -: requires an argument 

これは有用ではありませんでした。このサンプルの

\?) echo "Error: unknown option -$OPTARG" 

ありがとう:

同じことがに適用されます!

関連する問題