$ bash file.sh expected_arg -f optional_arg
$1
以下を使用して、最初のパラメータを取得する方法が記載されたいくつかの記事を見ました。
フラグパラメータを解析するためにgetoptsを使用する方法に関する投稿。まだこの2つの問題に対処する記事を見たことがありません。
現在をexpected_arg
訪問しています$1
。
私は-f
その旗をまったく余裕がありません。私のテストスクリプトにも次のものがあります。
#!/bin/bash
dirname=$1
[[ -z $dirname ]] && echo "Project name required as an argument." && return
# get flags
verbose='false'
aflag='false'
bflag='false'
files='false'
while getopts 'abf:v' flag; do
case "${flag}" in
a) aflag='true' ;;
b) bflag='true' ;;
f) files="${OPTARG}" ;;
v) verbose='true' ;;
*) error "Unexpected option ${flag}" ;;
esac
done
echo "$files"
echo "$HOME/Desktop/$dirname"
exit
端末に以下が表示されます。
Jills-MBP:~ jillr$ bash test.sh blah -f file
false
/Users/jillr/Desktop/blah
〜しない限り次のようにパラメータの順序を切り替えます。
bash file.sh -f optional_arg expected_arg
ターミナル出力:
Jills-MBP:~ jillr$ bash test.sh -f file blah
file
/Users/jillr/Desktop/-f
したがって、当然 -f は として扱われますが、$1
これは私が望むものではありません。予想されるパラメータを取得する必要があります。
必須制約:
- さまざまな数のフラグを許可する必要があります(なしから複数まで)。したがって、予想_argの位置が異なります。
- Expected_argが必要です。
- 予想されるパラメータを解析するために他のフラグを使用することを避けたいです(たとえば、このような作業を避けたい
$ bash test.sh -f file -d blah
)。
これらの制限をどのように満たすことができますか?
ベストアンサー1
それは問題ではありません。この投稿を見つけました。オプション以外のパラメータの後のオプションを解析するには、getoptsを使用してください。
shift
これは、デフォルトでdirname = $ 1の後に配置すると問題を解決できることを意味します。
これにより、入力パラメータが許可されます。
$ bash file.sh expected_arg -f optional_arg