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 von for arg in "$@"; . Siehe help for .


  • Mod

    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


Anmelden zum Antworten