2017-02-24 13 views
2

にフラグを割り当てることはありません私は私のスクリプトは、私のように最初のスクリプトを使用していますbashスクリプトは、変数

if [[ "$1" == "update" ]]; then 
    updater 
fi 

function updater(){ 
    verbose='false' 
    fflag='' 
    error='' 

while getopts 'f:v' flag; do 
    case "${flag}" in 
    f) fflag="${OPTARG}";; 
    v) verbose='false';; 
    *) error="bflag";; 
    esac 
done 

    echo $fflag 
} 

ようになっているはずですので、according to this answer私は

bash foo.sh update -f /var/ -v true 

のように引数を渡すのですbashのファイルを持っています私は他のものを行う他の機能を持っているので、エントリポイント、しかし何らかの理由で上記のスクリプトは、値を表示していない$fflag私は役に立たない関数からgetoptsループを外に移動しようとしました

+0

あなたはこのスクリプトを正確に実行していますか?それは実際に実行することはできません! – Inian

+1

部分を移動する場合[["" $ 1 "==" update "]];次に updater 関数呼び出しの下に – Inian

答えて

6

3つの問題があります。

  1. は、開始時に最初の関数を定義して、あなたは、コマンドライン引数を渡す前に"[email protected]"
  2. を使用して、関数にコマンドラインを渡す必要があり
  3. スクリプトでそれを呼び出しますこのスクリプトを使用することができます

最初の引数を削除するにはshiftを呼び出します。

updater() { 
    verbose='false' 
    fflag='' 
    error='' 

    while getopts 'f:v' flag; do 
     case "$flag" in 
     f) fflag="${OPTARG}";; 
     v) verbose='false';; 
     *) error="bflag";; 
     esac 
    done 

    declare -p fflag 
} 

if [[ $1 == "update" ]]; then 
    shift 
    updater "[email protected]" 
fi 
+1

ありがとうございます@Inian – anubhava

+0

ありがとうございます。最後の1つの質問ですが、フラグが設定されていない場合、エラーを表示しない方法はありますか?スクリプトを呼び出すだけなら、 'option needs an argument - ..'のようなものがあります。 – user7342807

+0

' bash foo.sh update -f'と呼んでいますか?オプション 'f'は': 'の後に引数が必要です – anubhava

関連する問題