hogyan kell megfelelően elemezni a shell szkriptjelzőket és argumentumokat a getopts használatával

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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük