Ich habe ein einfaches Skript (unten), das sich gegenseitig ausschließende Argumente hat. Die Argumente für das Skript sollten ./scriptname.sh -m|-d [-n]
sein, jedoch kann ein Benutzer das Skript mit ./scriptname.sh -m -d
ausführen, was falsch ist.getopts prüft auf gegenseitig ausschließende Argumente
Frage: Wie kann ich erzwingen, dass nur eines der gegenseitig ausschließenden Argumente vom Benutzer bereitgestellt wurde?
#!/bin/bash
progname=$0
function usage() {
cat <<EOF
Usage: $progname -m|-d [-n]
where:
-m create minimal box
-d create desktop box
-n perform headless build
EOF
exit 0
}
headless='false'
buildtype=''
while getopts 'mdnh' flag; do
case "${flag}" in
m) buildtype='minimal' ;;
d) buildtype='desktop' ;;
n) headless='true' ;;
h) usage ;;
\?) usage ;;
*) usage ;;
esac
done
if [ "$buildtype" == "" ];
then
usage
exit
fi
Jemand anderes dies wurde gefragt ... festhalten, ich werde es finden ... Ah, da ist es .. [Wie man sich gegenseitig ausschließende Flags in der Shell verwendet - festgefahren mit 'getopts'?] (Http://stackoverflow.com/questions/21695565/how-to-use-mutual-exclusive-flags-in-your-shell- Stuck-with-getopts) Es war sogar in der Liste der damit verbundenen Fragen. Sie könnten auch auf [Getopts im Bash-Shell-Skript verwenden, um lange und kurze Befehlszeilenoptionen zu erhalten] (http://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-) get-long-and-short-Befehlszeilenoptionen /). Das deckt viel Territorium ab. –
Ich habe auf Google gesucht und die empfohlenen Fragen gescannt, aber ich fand diese Links nicht relevant. Hoffentlich hilft mein Fragetitel anderen, die auch nicht in der Suche sind (wie ich) :) –