2009-07-21, 12:53
  #1
Medlem
hej!

Har en uppgift här som jag skulle behöva lite hjälp med, den lyder så här:

Create a shell program called swap. The program should simply swap the names of two files. The names of the files that are to be swapped should be given as arguments, for example the command

swap file1 file2

should have the result that you now find the content of file1 in file2 and vice versa. The program shall only try to swap the names of ordinary files and not for directories or special files. A check for that has to be done.

Jag tänkte nåt så här :

#!/bin/sh
touch file1temp file2temp
mv file1 file1temp
mv file2 file2temp
mv file2temp file1
mv file1temp file2

Men läraren sa att jag hade rätt tänk, men svaret var inte helt godkänt.

Så här skrev han :

Du har tänkt rätt i swap-funktionen, men programmet ska ta två inparametrar till programmet och det ska göras en felkontroll så att det är två filer som byter namn.


Så hur kan jag lösa denna uppgift ?

Tacksam för svar!
Citera
2009-07-21, 13:16
  #2
Medlem
miklons avatar
Googlar du så är det inte särskilt svårt att hitta svar, du vill ju göra två saker, använda argument från kommandot som variabler i programmet och köra en kontroll av att argumenten är korrekta filer.

Så jag tycker nog att du ska göra ett försök själv för att lära dig, men presenterar ändå ett lösningsförslag:

__________________
Senast redigerad av miklon 2009-07-21 kl. 13:23. Anledning: Några missade mellanslag
Citera
2009-07-21, 13:17
  #3
Medlem
Du kan labba lite med:

Kod:
#!/bin/sh

if  [ -f $1 -a -f $2 ]; then
    mv $1 swap.tmp
    mv $2 $1
    mv swap.tmp $2
fi
Citera
2009-07-21, 13:18
  #4
Medlem
du borde också kolla så inte tempfilen existerar så du inte råkar skriva över nåt...
Citera
2009-07-21, 13:30
  #5
Medlem
oki, då ska jag kolla närmare på det. Tack så mkt, för så snabb service!
Citera
2009-07-21, 13:49
  #6
Medlem
Tips för att undvika filnamnskrockar är att använda variabeln $$ som innehåller skalets processnummer.
Citera
2009-07-22, 04:43
  #7
Medlem
SSHs avatar
För att skapa temporära filer rekommenderar jag kommandot mktemp. Kollisioner undviks och den temporära filen skapas i /tmp istället för i arbetskatalogen.

Kod:
#!/bin/sh

if  [ -f $1 -a -f $2 ]; then
    tmp=`mktemp`
    mv $1 $tmp
    mv $2 $1
    mv $tmp $2
fi
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in