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
あなたはおそらく ';;は'あなた 'b)は'ケースを終了します。あなたの 'b:'定義は引数を必要としますが、あなたのコマンドラインは引数を渡しません。 – bishop
あなたは正しいです。オプトインbは、その背後に「:」があるとは考えていません。私はそれを修正し、今問題はなくなった。 – user97662