jak správně analyzovat příznaky a argumenty shell skriptu pomocí getopts

používám toto:

například ./imgSorter.sh -d directory -f format

obsah skriptů je:

#!/bin/bash while getopts ":d:f:" opt; do case $opt in d) echo "-d was triggered with $OPTARG" >&2 ;; f) echo "-f was triggered with $OPTARG" >&2 ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done 

případy použití:

$ ./imgSorter.sh -d myDir -d was triggered with myDir OK

$ ./imgSorter.sh -d -f myFormat -d was triggered with -f NOK: jak to, že řetězec začínající na – není detekován jako příznak?

Odpověď

Řekli jste getopts, že -d Možnost by měla mít argument a v příkazovém řádku použijte -d -f myformat, který jasně (?) říká „-f je argument, který dávám -d možnosti „.

Toto není chyba v kódu, ale ve využití skriptu na příkazovém řádku.

Váš kód musí ověřit, zda jsou argumenty voleb správné a že jsou všechny možnosti nastaveny vhodným způsobem.

Možná něco jako

while getopts "d:f:" opt; do case $opt in d) dir=$OPTARG ;; f) format=$OPTARG ;; *) echo "error" >&2 exit 1 esac done # If -d is *required* if [ ! -d "$dir" ]; then echo "Option -d missing or designates non-directory" >&2 exit 1 fi # If -d is *optional* if [ -n "$dir" ] && [ ! -d "$dir" ]; then echo "Option -d designates non-directory" >&2 exit 1 fi 

Pokud je možnost -d volitelná a chcete-li pro proměnnou použít výchozí hodnotu div id = „4d56de94ef“>

ve výše uvedeném kódu byste začali nastavením dir na tuto výchozí hodnotu před while smyčka.

Možnost příkazového řádku nemůže brát ani brát argument.

Komentáře

  • ok děkuji @Kusalananda, mylně jsem předpokládal, že getopts vzal všechno – pro začátek vlajky.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *