Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Sh - Scripte ...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
13.08.2002, 13:56 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo, ich versuch grad ein Script zu bauen in dem man ein Verzeichnis löscht (ein nicht leeres)

im Moment schaut es so aus:


Code:
#! /bin/sh

delete_dir()
{
    clear
    echo "$0 $1 $2"
    echo "Deleting \"$2\""
    
    if [ "$2" != "" ]; then
#     rm $2/*
#     rmdir $2
     echo "Directory deleted"
    fi

    if [ "$2" = "" ]; then
     echo "Can't remove \"$2\", it's empty!"
    fi
}

usage()
{
    clear
    echo "
    to remove a non empty directory
    
    Usage:
    $0 -d [dir]
    "
}

case "$1" in
    -d)        delete_dir
        exit ;;
        
    *)        usage
        exit 1 ;;
esac
exit



Nur: es kommt immer nur


Code:
Deleting ""



Wieso ist $2 leer? ist das nicht der 2te Parameter den man dem script übergeben hat`?

bei


Code:
echo "$0 $1 $2"



kommt auch immer nur


Code:
/bin/del



raus ...

Wieso das? Was mach ich falsch?

Ich hab noch relativ wenig Plan davon, deshalb brauch ich eure Hilfe!
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.08.2002, 14:58 Uhr
virtual
Sexiest Bit alive
(Operator)


delete_dir ist eine Function, da haben $1 $2 $3 ... den Wert der parameter, den du an die Function übergibst, nicht die, die an das Script uebergeben wurden.
Abgesehen davon: rm -rf nicht_leeres_verzeichnis löscht bereits nicht leere Verzeichnisse, da brauchts kein script für.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.08.2002, 17:23 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hab ich inzwischen auch schon gefunden (das mit -r)

trotzdem, wie kann man an funktionen einen parameter übergeben (wie muss ma des aufrufen?)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.08.2002, 17:37 Uhr
virtual
Sexiest Bit alive
(Operator)



Code:
#!/bin/sh

funk ()
{
    echo "Die Funktion hat $# Parameter erhalten:"
    i=1
    while [ $# -ne 0 ]
    do
        echo "Parameter $i: $1"
        shift
        i=`expr i - 1`
    done
}

funk Hallo Welt


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.08.2002, 18:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


jo danke "funkt"

des einzige was kommt ist folgendes:


Code:
suse:/data # ./func
    Die Funktion hat 2 Parameter erhalten:
    Parameter 1: Hallo
    [b]expr: non-numeric argument[/b]
    Parameter : Welt
    [b]expr: non-numeric argument[/b]


--
class God : public ChuckNorris { };

Dieser Post wurde am 13.08.2002 um 18:18 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.08.2002, 18:27 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


nur was bedeuten die parameter


Code:
[ $# [b]-ne[/b] 0 ]



$# ist die Anzahl der Parameter

Wieso kommt aber beim 2ten Aufruf von $1 der zweite Parameter raus?

Des musst du mir erklären, des ist mir (noch) zu hoch
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.08.2002, 19:00 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hab den Fehler gefunden,
da hat das $ beim i gefehlt


Code:
#!/bin/sh

funk ()
{
    echo "Die Funktion hat $# Parameter erhalten:"
    i=1
    while [ $# -ne 0 ]
    do
        echo "Parameter $i: $1"
        shift
        [b]i=`expr $i + 1`[/b]
    done
}

funk Hallo Welt

exit



Trotzdem bräuchte ich ne erklärung was des shift ("schifft" ) und die params nach while bedeuten!
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.08.2002, 22:35 Uhr
virtual
Sexiest Bit alive
(Operator)


shift macht das gleiche, wie ein shift bei Perl:
wenn du eine Kommandozeiel hast, wird diese ja in $1 ... $N gespeichert (für N>9 ist die Syntax ${N} zu verwenden). Meistens ist es so, dass man die Parameter von vorne nach hinten "vernascht". shift löscht also $1 und verschiebt alle übrigen nach vorne:

Vor shift:

Code:
$1 = hallo
$2 = welt
$3.. = <weitere argumente>



Nach shift:

Code:
$1 = welt
$2.. = <weitere argumente>


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.08.2002, 08:55 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ok, nur was bedeutet das -ne in der while schleife?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.08.2002, 12:48 Uhr
virtual
Sexiest Bit alive
(Operator)



Code:
while [ $# -ne 0 ]


ist das selbe wie

Code:
while test $# -ne 0


-ne = not equal
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: