getoptを使用したオプションの入力パラメータを持つbashスクリプト

getoptを使用したオプションの入力パラメータを持つbashスクリプト

コードをコピーしました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

あなたが説明する動作はあなたの:getoptgetopt

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/。このスペースは必須ではありませんが、許可されています。

おすすめ記事