Ezt használom:
például ./imgSorter.sh -d directory -f format
a szkriptek” tartalma:
#!/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
felhasználási esetek:
$ ./imgSorter.sh -d myDir -d was triggered with myDir
OK
$ ./imgSorter.sh -d -f myFormat -d was triggered with -f
NOK: hogy van az, hogy egy karakterlánccal kezdődő karakterláncot nem észlelnek zászlóként?
Válasz
Azt mondta getopts
, hogy a -d
opciónak tartalmaznia kell egy argumentumot, és a parancssorban a -d -f myformat
parancsot használja, amely egyértelműen (?) mondja, hogy “-f
az argumentum, amelyet a -d
opciónak adok “.
Ez nem a kód hibája, hanem a parancssor parancsfájl-használatának hibája.
A kódodnak ellenőriznie kell, hogy az opció-argumentumok helyesek-e, és hogy az összes opció megfelelő módon van-e beállítva.
Esetleg valami hasonló
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
Ha a -d
opció nem kötelező, és ha a áltozóhoz alapértelmezett értéket akar használni div id = “4d56de94ef”>
a fenti kódban, akkor kezdje azzal, hogy a dir
elemet beállítja az alapértelmezett értékre a while
ciklus.
A parancssori opció nem vehet fel és nem is fogadhat el argumentumot.
Megjegyzések
- ok köszönöm @Kusalananda, tévesen feltételeztem, hogy a getopts mindent elkövetett – egy zászló kezdetéig.