#function: usage
#description: 1. parse command line arguments
# 2. for illegal usages, print usage message and exit 1
# 3. otherwise, communicate to main() what flags are set
function usage {
while getopts ":gn:" OPT; do
case $OPT in
g) ;;
n) name=$OPTARG;;
:) echo "$USAGE"
exit 1
;;
\?) echo "$USAGE"
exit 1
;;
*) echo "$USAGE"
exit 1
esac
done
shift $(($OPTIND + 1))
}
#function: main
#description: For Part 1:
# 1. use usage() to parse command line arguments
# 2. echo corresponding messages for each flag that is set
#
# For Part 2:
# Kill processes based on the case return by `usage`
function main {
# TODO change the condition so that this line prints when '-g' is set
usage()
if [ ! -z "g" ]; then
echo graceful kill is present
fi
# TODO change the condition so that this line prints when '-n' is set
if [ ! -z "n" ]; then
echo process name is present
fi
main [email protected]
Dies ist, was ich schreibe so weit, ich möchte etwas haben, wieInformationen Echo beim Parsen und nicht-Flaggen und Argument Parsen
./KillByName -g 24601
anmutigen Kill vorhanden ist
oder
./KillByName -g
Verbrauch: KillByName [-g] -n oder KillByName [-g]
oder
./KillByName -g -n bash
anmutigen Kill vorhanden
Prozessname
im Wesentlichen vorhanden ist, wenn es -g ist, dann zeigt sie es anmutig getötet wird, und mit einem Name. Wenn es -n gibt, dann heißt es, der Name wird beendet und mit einem Namen versehen. Ich fand mein Skript kann die Nachricht drucken, ob anmutig töten Gegenwart oder Name vorhanden ist, aber nicht den Fehler $ USAGE drucken kann.
BTW: dies nur zur Information der Nutzung ist, nicht wirklich Programm, das Programm
Und wie man -g ein optionales Flag macht. Das heißt, eine PID wird immer noch benötigt, aber mit -g wird der Prozess elegant beendet. Aber wenn -g exit aber pid nicht existiert, wird es falsche Informationen geben? – faker
Ich würde empfehlen, die 'usage'-Funktion in einer Subshell auszuführen (was' result = $ (usage "$ @") 'tut) - es fügt die Kompliziertheit des Parsens seiner Ausgabe hinzu (abhängig davon, welche Form die Argumente annehmen), das könnte schwierig sein, richtig zu machen), und auch die 'exit 1's * beenden das Hauptskript nicht, sondern nur die Untershell. IMO, es ist viel sauberer, nur die Option Parsing-Code inline in den Hauptteil des Skripts zu setzen, und all diese Komplexität zu vermeiden. –