script analyse
-
hallo,
ich gehe gerade ein script zum verständnis durch. Bin noch Bash neuling.
Bei der Funktion check_arguments_or_exit() beginnt er die Variable $arg zu überprüfen ob Verzeichnis und die Schreibrechte. Jetzt verstehe ich aber nicht woher dieses arg kommt, also woher die Funktion weiss welchen Pfad arg enthält? Ist ja eine neu erstellte Variable. Oder ist das der übergebene Parameter? Wenn ja woher erkennt die Funktion das? Es wird ja $@ übergeben. Es findet halt keine übergabe statt, das verwirrt mich. In C++ bin ich das anders gewohnt.
Ich hoffe Ihr versteht was ich meine.
# args given must be existing directories or files with sufficient # access rights check_arguments_or_exit() { for [i][u]arg[/u][/i]; do if [ -d "$arg" ]; then if ! [ -x "$arg" -a -r "$arg" -a -w "$arg" ]; then opt_error_exit $LINENO \ "Verzeichnis <$arg> fehlt Lese-, Schreib- oder Zugriffsrecht" retval=1 fi continue elif [ -f "$arg" ]; then continue else opt_error_exit $LINENO \ "<$arg> ist weder eine Datei noch ein Verzeichnis" retval=1 fi done } main() { validate_options_or_exit "$@" shift $(( $OPTIND - 1 )) # -h / -V Auswertung if [ $opt_h -eq 1 ]; then usage || exit $EXIT_ERR exit $EXIT_OK fi if [ $opt_V -eq 1 ]; then version || exit $EXIT_ERR exit $EXIT_OK fi # Argumente pruefen [ $# -gt 0 ] || set -- "$DEFAULT_DIR" check_arguments_or_exit "$@" # Argumente verarbeiten local retval=$EXIT_OK for arg; do if [ -d "$arg" ]; then process_dir "$arg" || retval=$EXIT_ERR continue fi ...
-
for arg
ist einfach nur die Kurzform vonfor arg in "$@";
. Siehehelp for
.
-
for The syntax of the for command is: for name [ [in [words ...] ] ; ] do commands; done Expand words, and execute commands once for each member in the resultant list, with name bound to the current member.[b] If ‘in words’ is not present, the for command executes the commands once for each positional parameter that is set, as if ‘in "$@"’ had been specified[/b] (see Special Parameters). The return status is the exit status of the last command that executes. If there are no items in the expansion of words, no commands are executed, and the return status is zero.
-
jetzt wird mir alles klar, dankeschön