2016-07-12 6 views
1

で引数だけでなく、ファイルのリードラインを渡すためにgetoptsは、[今すぐラインでBASH、私はオプションの設定を渡すためにgetoptsはを使用して私の現在のスクリプトではライン

#! /bin/bash 

GetA=0 
GetB=0 

while getopts "ab:c:" opt; do 
    case "$opt" in 
    a) 
     GetA=1 
     echo "-a get option a" 
     ;; 
    b) 
     GetB=1 
     echo "-b get option b" 
     ;; 
    c) 
     c=${OPTARG} 
     ;; 
    esac 
done 

shift "$((OPTIND -l))" 


while IFS='' read -r line || [[ -n "$line" ]]; do 
    echo $line 
    echo "GetA is " $GetA 
    echo "GetB is " $GetB 
    echo "c is " $c 
done 

をファイルの行を読んで、でこのスクリプトを実行する場合次のコマンドライン:

testscript.sh -ab -c 10 somefile.txt 

期待される結果:

$ line1 from somefile.txt 
    GetA is 1 
    GetB is 1 
    c is 10 

しかし、エラーが与えられます。

/testscript.sh: line number: No such file or directory 




EDIT 2016年7月13日: は、余分なありません ':' bの後、それを削除した後、スクリプトはエラーになりますもはや。

while getopts "ab:c:" opt; do 

を修正:

while getopts "abc:" opt; do 
+1

あなたはおそらく ';;は'あなた 'b)は'ケースを終了します。あなたの 'b:'定義は引数を必要としますが、あなたのコマンドラインは引数を渡しません。 – bishop

+0

あなたは正しいです。オプトインbは、その背後に「:」があるとは考えていません。私はそれを修正し、今問題はなくなった。 – user97662

答えて

2

readは、標準入力ではなく、コマンドライン引数から読み込みます。入力のリダイレクトを

while IFS= read -r line; do # Assume the file ends with a newline 
    ... 
done < "$1" 

またはスクリプトにファイルを養う:明示的に読み取るためのファイルを指定のいずれか

testscript.sh -ab -c 10 < somefile.txt 
関連する問題