getopts nicht in der bash-Skript
#! bin/bash
# code for train.sh
while getopts "f:" flag
do
case $flag in
f)
echo "Hi"
STARTPOINT = $OPTARG
;;
esac
done
echo Test range: $4
echo Train range: $3
#path of experiment folder and data folder:
EXP_DIR="$1"
DATA_DIR="$2"
echo Experiment: $EXP_DIR
echo DataSet: $DATA_DIR
echo file: $STARTPOINT
I ran the command > ./train.sh test1 test2 test3 test4 -f testf
bekam und die Ausgabe
Test range: test4
Train range: test3
Experiment: test1
DataSet: test2
file:
So getopts-option scheint nicht zu funktionieren, aus irgendeinem Grund, wie Sie sehen können, die nichts gedruckt wird nach der Datei und auch echo "Hallo" - Befehl wird nicht ausgeführt, in der case-Anweisung. Kann jemand mir bitte helfen mit diesem?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie alle Optionen, bevor Sie nackt Parameter
mit Ausgang
Müssen Sie ein paar änderungen zu
Setzen der environment-Variablen und verschieben Sie die habe option aus dem Weg
shift
Ihre nackten Parameter ausgeschaltet, dann rufen Siegetopt
zur Verarbeitung der Optionen nachZwei Punkte:
wurden analysiert.
Verwendet
while
, diegetopts
Funktion nicht benötigen eine Verschiebung innerhalb der Schleife. Jedoch, nach derwhile getopts
abgeschlossen ist, wird eine Verschiebung ist erforderlich, um den Prozess der nicht-options-Argumente. Die variableOPTIND
gibt den index des nächsten nicht-option, um analysiert zu werden, und dieser Wert kann verwendet werden, in einemshift
Befehl.Hier ist ein Beispiel, wo ich auch die
h
,n
undv
Optionen für "Hilfe", "norun" und "verbose" - flags: