verwenden Ich möchte getopts in bash verwenden. Der Benutzer sollte seine eigenen Optionen auswählen. Die meisten Optionen erhalten Argumente, aber es gibt 2 Optionen, die kein Argument erhalten. Es funktioniert gut, wenn die Option ohne das Argument in der Mitte des Befehls ist, aber wenn es am Ende ist, funktioniert es nicht.Wie getopts Option ohne Argument am Ende in Bash
Hinweis - die ersten beiden Argumente (Server und Passwort) sind obligatorisch und kein Teil der getopts.
#!/bin/bash
SERVER=${1}
PASSWORD=${2}
VERSION=v0
ASKED_REVISION=0
DB=schema_1
PROPERTIES=1
FULL=0
USER=
# Usage info
show_help()
{
echo "
Usage: Environment DBPassword [-V Version] [-R Revision] [-S Schema] [-P] [-F] [-U Username]
-V Version Version to deploy.
-R Revision Revision number (0 means the latest revision).
-S Schema Schema in the DB to deploy.
-P No(!) External Properties. If this flag is marked the deploy will not copy the external properties
-F Full deploy
-U Username. This User who run the deploy.
For Example: ./deploy server1 123456 -V v1.0 -R 12345 -S schema1 -P -F -U User1
-H Help
"
}
OPTIND=3
while getopts ":V:R:S:P:F:U:H:" FLAG; do
case "$FLAG" in
V) # Set option "V" [Version]
VERSION=$OPTARG
;;
R) # Set option "R" [Revision]
ASKED_REVISION=$OPTARG
;;
S) # Set option "S" [Schema]
DB=$OPTARG
;;
P) # Set option "P" [No External Properties]
PROPERTIES=0
OPTIND=$OPTIND-1
;;
F) # Set option "F" [FULL]
FULL=1
OPTIND=$OPTIND-1
;;
U) # Set option "U" [User]
USER=$OPTARG
;;
H) # help
show_help
;;
\?)
echo "Invalid option: -$OPTARG. Use -H flag for help."
exit
;;
esac
done
shift $((OPTIND-1)) #This tells getopts to move on to the next argument.
echo "Env=$SERVER"
echo "Pass=$PASSWORD"
echo "Version=$VERSION"
echo "Revision=$ASKED_REVISION"
echo "Schema=$DB"
echo "External Properties=$PROPERTIES"
echo "FULL=$FULL"
echo "USER=$USER"
-F und -P sollte kein Argument erhalten. Wenn ich diesen Befehl ausführen es richtig (-F in der Mitte) arbeitet:
./deploy_test.sh server1 pass1234 -U 555 -R 55555 -F -V v1.0
Wenn die -F oder -P am Ende des Befehls ist, Diese Zeile funktioniert nicht richtig (alles funktioniert gut, aber die F):
./deploy_test.sh server1 pass1234 -U 555 -R 55555 -V v1.0 -F
aber wenn ich so etwas ./deploy_test.sh server1 pass1234 -F es wird nie die while-Schleife gehen und ich mag, dass der FULL 1 – Nissim
es funktioniert geändert werden tun! Vielen Dank. – Nissim
Froh, dass es geklappt hat – Julian