Seite 1 von 1

Shell-Sript unter Linux

Verfasst: Mi Dez 09, 2015 10:23 pm
von PrinceTaoLee
Guten Abend zusammen!
Ich belege seit November '15 einen Fernkurs in C/C++ unter Linux und ich habe ein kleines Problem und bin seit 2 Wochen dabei es zu lösen leider vergebens und hoffe nun hier einen kleinen Denkanstoß zu bekommen.
Ich soll ein Shell-Sript schreiben das den Inhalt 2er Dateien beim 1. Aufruf tauscht und beim 2. Aufruf wieder in den Ursprung zurück versetzt. (Bspl. Datei 1 : Dies ist die 1. Bestellung. Datei 2: Dies ist die 2. Bestellung! Nun soll das was in der 1. Datei steht in der 2. Angezeigt werden und umgekehrt!)Die Randbedingungen sind :Nur 2 cp 1 rm und 1 mv Befehl benutzen, und nicht mehr als 6 Zeilen belegen! Und in der 1. und 6. Zeile muss echo stehen! Danke für eure Denkanstöße im Vorraus

P.s.: Ich hoffe ich bin im richtigen Form wenn nicht entschuldigt dies Bitte!

Re: Shell-Sript unter Linux

Verfasst: Do Dez 10, 2015 12:34 am
von Xin
Interessant, dass man in einem C++-Fernkurs Shell-Skripte schreiben darf. Aber warum nicht.

Nunja... einen Austauschbefehl gibt es nicht. Aber man kann die Datei ja verschieben. Man könnte Datei1 zu Datei3 machen, Datei2 zu Datei1 und Datei3 zu Datei2. So überschreibt man nix. Das wären drei Zeilen. Man könnte die Dateien auch kopieren, dann müsste man Datei3 wieder löschen.
Und in die erste und letzte Zeile ein echo zu schreiben, stört dann wohl auch nicht.

Ich bin nicht ganz sicher, welchen Denkanstoß Du hier brauchst...?
Vielleicht wäre mktemp noch ein Denkanstoß?

Re: Shell-Sript unter Linux

Verfasst: Do Dez 10, 2015 6:24 am
von nouseforname
Lass mich raten.... SGD....C/C++ Programmieren unter Linux. Du hast die Aufgabe aus einem der ersten beiden Hefte. Dort lernt man die Grundlagen für die Linux Shell aka Konsole aka Terminal. Da der gesamte Kurs darauf ausgelegt ist in selbiger zu arbeiten.

Die Aufgabe ist eigentlich ganz einfach, und Du hast bereits alles dazu gesagt. Dein Shell Script soll den Inhalt zweier Dateien vertauschen, oder einfach den Dateinamen, was am Ende auf das gleiche Ergebnis zielt.
Führst Du das Script zweimal mit den gleichen Dateien aus, bist Du wieder am Ausgangspunkt.

Du hast maximal 6 Zeilen zur Verfügung, davon sind 2 für "Echo" belegt. die Restlichen 4 kannst Du also mit den gegebenen Befehlen cp, mv, und rm belegen. Xin hat dazu schon faktisch die Lösung gegeben.
- Kopiere 1 nach 3
- Verschiebe 2 nach 1
- Kopiere 3 nach 2
- Lösche 3

Es geht auch anders und kürzer... viel Spass beim Kurs.

Re: Shell-Sript unter Linux

Verfasst: Do Dez 10, 2015 8:58 am
von PrinceTaoLee
Guten morgen!Danke euch für eure Denkanstöße! Und ja ist von Sgd der Fernkurs:-) Macht mir echt spass! Und danke euch nochmal für die Infos!

Re: Shell-Sript unter Linux

Verfasst: Fr Dez 11, 2015 7:15 pm
von PrinceTaoLee
Irgendwo hab ich einen Fehler und finde ihn nicht! Das ist zum Haare raufen!
Mein Script sieht im Moment so aus:
echo
cp "$~/home/da1" "$~/home/da3"
mv "$~home/bilder/da2" "$~/home/da1"
cp "$~/home/da3" "$~/home/bilder/da2"
rm "$~/home/da3"
echo
Beim Aufruf mit ./tausch bekomme ich immer: Aufruf mit stat für 》$《~/home/da1 ist nicht möglich Datei oder Verzeichnis nicht gefunden obwohl alles da ist wo es hingehört.
Und ich nur das verwende was ich bisher gelernt habe. Danke euch für eure Unterstützung!

Re: Shell-Sript unter Linux

Verfasst: Fr Dez 11, 2015 7:47 pm
von nouseforname
Du machst die Pfadangabe falsch. Mal abgesehen davon dass du nicht den Absolutpfad angeben musst (aber kannst), wird der Pfad zum User-Home erst mit der Tilde "~" begonnen. Die Anführungszeichen kannst Du dir auch sparen sofern du keine Leerzeichen im Pfad hast, was ich tunslichst vermeiden würde.

So sollte es eigentlich funktionieren:

Code: Alles auswählen

cp ~/home/da1 ~/home/da3
Aber wenn Du mit sowas schon so sehr kämpfst wirst Du noch sehr viel Spass haben.

Re: Shell-Sript unter Linux

Verfasst: Fr Dez 11, 2015 8:13 pm
von Xin
PrinceTaoLee hat geschrieben:Irgendwo hab ich einen Fehler und finde ihn nicht! Das ist zum Haare raufen!
Ein Skript macht das gleiche wie Du, wenn Du es in die Konsole schreibst.

Also probiere es ohne Skript aus und wenn Du verstanden hast, wie es funktioniert, dann schreibst Du Dein Skript.

Das $ steht für Variablen. Es folgt der Name der Variablen:

Code: Alles auswählen

echo $HOME
In Skripten kannst Du eigene Variablen belegen, andere sind - wie HOME vorbelegt. Beispielsweise $1 für das erste Argument für das Skript.

Packst Du folgendes in ein Skript

Code: Alles auswählen

echo $1
und gibst "./skript Hallo Welt" ein, druckt das Skript "Hallo", denn Hallo ist das 1. Argument.
Für Pfade brauchst Du $ aber nicht.