Unix Aufgabe

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von fff619, 16.02.2011.

  1. fff619

    fff619 Grünschnabel

    Dabei seit:
    16.02.2011
    Beiträge:
    4
    Zustimmungen:
    0
    Hi

    ich hab eine Aufgabe bezüglich Unix Skripts bekommen, jedoch komm ich da nicht ganz mit der Aufgabe klar bzw. wie ich die Lösung machen soll.

    Ich soll $1 verwenden, weiß jedoch überhaupt nicht, was ich damit mache muss...

    ________________________________
    Aufgabe lautet wie folgt:

    Kopieren Sie alle .c-Dateien des als Parameter übergebenen Verzeichnisses in ein neu zu erstellendes Verzeichnis ~/tmp/work

    Behandeln Sie die Fehlermöglichkeiten (tmp nicht da; work nicht da; eines von beiden kein Verzeichnis; work nicht leer) durch entsprechende Fehlermeldungen.

    Kompilieren Sie die kopierten Dateien.

    Testen Sie, ob die Programme ausführbar sind.

    ________________________________

    Das ist das, was ich schon habe:


    gcc 1.c --> zum kompilieren

    zum Testen:

    test -x a.out wenn nein, dann soll eine Ausgabe „Problemmeldung“ erscheinen


    Hilfe: man basename



    if


    mkdir -p $HOME/tmp/work
    cp $1/*.c $HOME/tmp/work
    cd $HOME/tmp/work
    for I in *.c ; do
    gcc $i


    bei den ... weiß ich einfach nicht, was da noch hingehören soll.
    Hoffe, dass mir jemand helfen kann.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Remidemi, 16.02.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    Hast du das gemacht oder war das vorgegeben? Also in $1 steht die erste beim Aufruf des Script übergebene Variable. In deinem Fall das Quellverzeichniss. Beispiel:
    script.sh /pfad/zur/quelle

    Was heißt Unix Scripts? Bash, Ksh, Perl...?
     
  4. #3 marcellus, 16.02.2011
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    Du könntest zb ein Skript in der Form:

    Code:
    #!/bin/bash
    
    echo $1
    
    ausprobieren und schauen, was es macht, wenn du das skript mit zb "./skript.sh blah" ausführst.

    Der rest sollt eigentlich recht straight forward sein:
    Behandeln Sie die Fehlermöglichkeiten
    • tmp nicht da
      test -e $HOME/tmp
    • work nicht da
      test -e $HOME/tmp/work
    • eines von beiden kein Verzeichnis
      test -d $HOME...
    • work nicht leer
      test -e $HOME/tmp/work/*
    durch entsprechende Fehlermeldungen.

    würde ich vermeiden, wenn du ein Programm hast, dass aus mehreren *.c dateien besteht kannst du sie nicht einzeln kompilieren und linken (was du hier machen würdest). Du kannst sie zwar kompileren ohne sie zu linken (-c) aber dann musst du das Programm erst recht wieder extra zusammenlinken. Statdessen wärs besser, wenn du
    Code:
     gcc *\.c
     
  5. fff619

    fff619 Grünschnabel

    Dabei seit:
    16.02.2011
    Beiträge:
    4
    Zustimmungen:
    0
    @Remidemi

    es war nur das mit dem cp und dem gcc vorgegeben

    achja, und "unix skript". also wir arbeiten mit der bash und benutzen dort den editor mit gedit

    @marcellus

    danke schon für die mehreren lösungsansätze

    zu einem erst einmal das:

    wenn ich echo $1 eingebe kommt nur eine Leerzeile.



    Code:
    for I in *.c; do
    gcc $i
    Das war eh klar, dass es nicht klappen würde. Ich hab es jedoch da gelassen, damit ich es nicht vergesse bzw. wie du jetzt mir die richtige Lösung sagen kannst :).

    _____

    Wie soll ich das mit den test -e usw. verwenden?

    sollte ich es dann so machen?
    Code:
    $1=test -e $HOME/tmp
    $2=test -e $HOME/tmp/work
    $3=test -d $HOME/tmp/work
    $4=test -d $HOME/tmp
    $5=test -e $HOME/tmp/work/*
    
    if [ "$1" == true ] && [ "$2" == true ] && [ "$3" == true ] && [ "$4" == true ] && [ "$5" == true ]
    then
    mkdir -p $HOME/tmp/work
    cp $1/*.c $HOME/tmp/work
    cd $HOME/tmp/work
    else
    echo "Problem"
    fi
     
  6. #5 Remidemi, 16.02.2011
    Zuletzt bearbeitet: 16.02.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    if [ ! -d $HOME/tmp ]
    then
    echo tmp existiert nicht oder kein Verzeichniss
    fi

    if [ ! -d $HOME/tmp/work ]
    then
    echo work existiert nicht oder kein Verzeichniss
    fi

    if [ ! -e $HOME/tmp/work/* ]
    then
    echo work nicht leer
    fi

    mkdir -p $HOME/tmp/work
    cp $1/*.c $HOME/tmp/work
    cd $HOME/tmp/work

    ...

    Die [...] ersetzen das test Kommando.
     
  7. #6 marcellus, 16.02.2011
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    Du sollst nach dem skript einen Parameter übergeben, also so wie ich es oben schon hingeschrieben hab mit "./skript.sh blah".

    Es ist keine gute Idee $1, $2 usw zu überschreiben, weil du dir damit die skript parameter überschreibst.

    Da du die Fehler einzeln behandeln musst würd ich eher:

    Code:
    if ! [ -e $HOME/tmp ]
    then
            echo "tmp existiert nicht :("
            exit
    else
    ...
    
    Aber dir das ganze vorzubeten hat sicher recht wenig sinn, du solltest dir eher ein tutorial suchen und einfach etwas herumspielen, sonst lernst du gar nichts dabei.
     
  8. #7 fff619, 16.02.2011
    Zuletzt bearbeitet: 16.02.2011
    fff619

    fff619 Grünschnabel

    Dabei seit:
    16.02.2011
    Beiträge:
    4
    Zustimmungen:
    0
    oh mann....

    das ist ja eigentlich sowas von einfach und ich stelle mich einfach nur dumm :/

    Danke für eure Hilfe. Hab leider auf dem Rechner kein ubuntu bzw. allgemein UNIX, kann von daher auch nicht die Kommandos testen bzw. mit der Arbeit weitermachen (um zu sehen, ob die Kommandos auch klappen).

    Also nochmal, vielen Dank (marcellus & Remidemi), dass ihr mir erklärt habt, was was ist bzw. wie ich das machen soll.

    Ich schaue dann heute Abend noch ab und zu hier rein, werde jedoch mein Endresultat zu der Aufgabe morgen posten.
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 marcellus, 16.02.2011
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    Du kannst dir virtualbox auf deinem pc installieren und musst dann nur noch ein image vom linux derivat deiner wahl runterladen und mit der virtualbox anstarten.

    Abgesehen vom download sollte das alles nicht länger als 5-10min dauern.
     
  11. #9 fff619, 16.02.2011
    Zuletzt bearbeitet: 16.02.2011
    fff619

    fff619 Grünschnabel

    Dabei seit:
    16.02.2011
    Beiträge:
    4
    Zustimmungen:
    0
    Edit: Fehler gefunden

    Die originalen *.c Dateien hatten als Inhalt nur test und ich hab bei den kopierten Dateien als Inhalt einen richtigen Source Code (also ein .c Programm) eingegeben. Folge --> Die kopierten Dateien wurden mit dem Inhalt "test" überschrieben und die Fehlermeldung kam, dass der Source Code falsch ist. X(

    Jedenfalls klappt das Programm jetzt einwandfrei :)

    Problem gelöst --> Thread closen bitte

    ____________________________________


    Kompletter Source Code

    Code:
    #! /bin/bash
    
    if [ ! -d $HOME/tmp ]
    then
    echo tmp existiert nicht oder kein Verzeichnis
    fi
    
    if [ ! -d $HOME/tmp/work ]
    then
    echo work existiert nicht oder kein Verzeichnis
    fi
    
    if [ ! -e $HOME/tmp/work/ ]
    then
    echo work nicht leer
    fi
    
    mkdir -p $HOME/tmp/work
    cp $HOME/*.c $HOME/tmp/work
    cd $HOME/tmp/work
    
    for I in *.c
    do
    E=$(basename $I .c)
    cc $I -o $E.oc
    if [ -x $E.oc ]
    then
    echo "$E.oc is executable"
    fi
    done
    jedoch kommt diese Fehlermeldung

    Code:
    dokument1.c:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ at end of input
    dokument1.oc is executable
    dokument2.c:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ at end of input
    dokument2.oc is executable
    tx2.c:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ at end of input
    tx2.oc is executable
     
Thema:

Unix Aufgabe

Die Seite wird geladen...

Unix Aufgabe - Ähnliche Themen

  1. Komme mit Unix-Kurs-Aufgaben nicht weiter ...

    Komme mit Unix-Kurs-Aufgaben nicht weiter ...: Hi Ich mach gerade einen Unix Kurs und muss folgende Aufgaben lösen. Ich möchte nicht die Lösung, jedoch wäre es super, wenn mir jemand...
  2. Knobelaufgabe für UNIX Könner (und Hilfe für einen N00b)

    Knobelaufgabe für UNIX Könner (und Hilfe für einen N00b): Hallo liebe Unix Gemeinde. Ich darf mich mal als totaler Unix N00b outen, und hoffe hier wird mir geholfen. Und zwar versuche ich gerade ein...
  3. Kompatiblen Drucker für UNIX (HP-UX) 10.2

    Kompatiblen Drucker für UNIX (HP-UX) 10.2: Ich absolviere zur Zeit ein Praktikum in einem mittelständischen Unternehmen (Bereich Maschinenbau). Heute wurde mir die 3D-Messmaschine gezeigt,...
  4. Ur-Unix soll reanimiert werden

    Ur-Unix soll reanimiert werden: Der Australier Warren Toomey plant die erste Version von Unix wieder zum Laufen zu bringen. Dazu möchte er den in Ausdrucken vorhandenen...
  5. Linux-/ Unix-Administrator (m/w) mit VMware Know-How Standort: Münster

    Linux-/ Unix-Administrator (m/w) mit VMware Know-How Standort: Münster: Hallo ein Kunde sucht einen Linux-/ Unix-Administrator (m/w) mit VMware Know-How Standort: Münster Ihre Aufgaben: Zu Ihren Aufgaben gehört das...