コードをコピーしましたtutorialspointのgetopt記事次のスクリプトが機能するようにしました(少し):
##argument_script.sh
VARS=`getopt -o i::o:: --long input::,output:: -- "$@"`
eval set -- "$VARS"
# extract options and their arguments into variables.
while true ; do
case "$1" in
-i|--input)
case "$2" in
"") MAPPE='/default/input/here/' ; shift 2 ;;
*) MAPPE=$2 ; shift 2 ;;
esac ;;
-o|--output)
case "$2" in
"") OUTPUTFOLDER='/default/input/here/' ; shift 2 ;;
*) OUTPUTFOLDER=$2 ; shift 2 ;;
esac ;;
--) shift ; break ;;
esac
done
echo "${MAPPE}"
echo "${OUTPUTFOLDER}"
#do something here..
つまり、2つのオプションのパラメータフラグ-i
/--input
と-o
/があります-output
。現在スクリプトに問題があります。
フラグのデフォルト値をオーバーライドするには、フラグの後にスペースなしで必要な値を書き込む必要があります。例:/c/
into-i
と/f/
intoに渡すには、-o
次のようにスクリプトを呼び出す必要がありますbash argument_script.sh -i/c/ -o/f/
。不足しているスペースを確認してください。bash argument_script.sh -i /c/ -o /f/
変数を作成するにはデフォルト値が使用MAPPE
されますOUTPUTFOLDER
。
スクリプトを書き換えることができるので、-i
/に渡されたパラメータを-o
スペースの後に作成する必要がありますか?(例bash argument_script.sh -i /c/ -o /f/
:)
ベストアンサー1
あなたが説明する動作はあなたの:
。getopt
getopt
VARS=`getopt -o i:o: --long input:,output: -- "$@"`
しかし、これはスクリプトを書く非常に複雑な方法です。以下はより簡単なバージョンです(変数を大文字として使用するなど、いくつかの悪い慣行も修正しました)。
#!/bin/bash
##argument_script.sh
vars=$(getopt -o i:o: --long input:,output: -- "$@")
eval set -- "$vars"
mappe='/default/input/here/'
outputFolder='/default/input/here/'
# extract options and their arguments into variables.
for opt; do
case "$opt" in
-i|--input)
mappe=$2
shift 2
;;
-o|--output)
outputFolder=$2
shift 2
;;
esac
done
echo "mappe: $mappe"
echo "out: $outputFolder"
これで、次のことができます。
$ ./argument_script.sh -i /c/ -o /f/
mappe: /c/
out: /f/
実行してもこの機能が機能することに注意してください./argument_script.sh -i/c/ -o/f/
。このスペースは必須ではありませんが、許可されています。