Sida 1 av 1

Debian, egen funktion[LÖST]

Postat: 17 okt 2008, 18:49
av Raxor
Hej!

Håller på och lär oss i skolan Debian 4.xx (osäker).
Men iaf vi gör i CLI gränssnittet och jag skulle nu vilja göra min egna funktion.

Har skapat tre mappar delat, backup och script
I script mappen har jag ett script som förvandlar allt i delat till en tar fil i backup
För tillfället skriver jag "sh /script/backup" för att köra igång det (om nått är dåligt säg till). Men iaf så skulle jag vilja att man bara behövde skriva t.ex "backup" finns det något bra sätt att göra det ? Kanske om man kunde modifiera scriptet lite så man kan skriva "backup /shared2" ifall man vill backa upp någon annan mapp.

Sänd mig gärna någon länk att läsa, har självklart sökt en hel del men ändå.
Tackar på förhand.

PS!
Kommer inom kort installera Ubuntu på min primära maskin.

Re: Debian, egen funktion

Postat: 17 okt 2008, 19:05
av dmz
Se till att du har ~/bin i din PATH , och flytta scriptet dit, döp om det till "backup". Nu kan du köra "backup". För att kunna skicka argument till scriptet (backup minfinamapp) så lär du implementera det i det aktuella scriptet.

Re: Debian, egen funktion

Postat: 17 okt 2008, 19:26
av David Andersson
Raxor skrev: För tillfället skriver jag "sh /script/backup" för att köra igång det (om nått är dåligt säg till). Men iaf så skulle jag vilja att man bara behövde skriva t.ex "backup" finns det något bra sätt att göra det ?
Att skriva "sh /script/backup" är inte dåligt och det finns ett bra sätt att göra så du bara behöver skriva "backup". Det görs i två steg. Först lite bakgrund.

#!

En shell-script kan man starta med "sh filnamn" eller "bash filnamn", på samma sätt som ett python-script kan startas med "python filnamn" och ett perl-script med "perl filnamn". Genom att sätta scriptets filrättigheten till executable och lägga till en första rad i scriptet som börjar "#!" följt av pathen till sh, bash, python eller perl, så kan man starta scriptet med bara "filnamn". (wikipedia)

I ditt fall, lägg till "#!/bin/sh" först i backup-scriptet och gör den executable med

Kod: Markera allt

chmod a+x /script/backup
Nu kan du starta scriptet utan att skriva "sh". Du skrivar bara "/script/backup".

PATH

För att starta scriptet med "backup" i st f "/script/backup" så måste systemet veta i vilken katalog den ska leta efter script med det namnet. Den kan leta i flera kataloger och vilka kataloger den letar i anges av variabeln PATH (wikipedia).

Du kan titta vad som finns i PATH med

Kod: Markera allt

echo $PATH
Du kan lägga till "/script" i path med

Kod: Markera allt

PATH=$PATH:/script
Nu kan du starta backup-scriptet med bara "backup".
Om du automatiskt vill ha /script i pathen nästa gång du loggar in, öppna filen ".profile" i din hemkatalog och lägg till samma kommando nånstans i den:

Kod: Markera allt

PATH=$PATH:/script
(Om du egentligen har katalogerna "delat", "backup" och "script" som underkataloger i din hemkatalog, byt ut alla "/script" ovan mot "~/script", (och "/script/backup" mot "~/script/backup").)

(När jag skriver "katalog" så menar jag det vanliga människor :) kallar "mapp".)

EDIT: stavfel och highlight "vanliga människor"

Re: Debian, egen funktion

Postat: 17 okt 2008, 19:39
av Raxor
Tackar för alla svar!!!
Men kollade lite till på hur man lägger till argument, men fick det inte att fungera korrekt.
Förstod det som att $1 var första arg och $2 var andra men fungerade inte men ett test script med "echo $1"

Någon som vet hur jag skulle gjort?

Re: Debian, egen funktion

Postat: 17 okt 2008, 19:49
av micke_nordin
Raxor skrev:Tackar för alla svar!!!
Men kollade lite till på hur man lägger till argument, men fick det inte att fungera korrekt.
Förstod det som att $1 var första arg och $2 var andra men fungerade inte men ett test script med "echo $1"

Någon som vet hur jag skulle gjort?
Om du lägger detta i en fil som du t.ex. kallar test.sh

Kod: Markera allt

#!/bin/bash
echo $1
och test.sh ligger i en katalog som finns i din PATH kallar du skriptet genom

Kod: Markera allt

test.sh blahonga
Det kommer att resultera i att "blahonga" skrivs ut i terminalen.

/Micke

Edit: Du måste också se till att test.sh är körbar genom chmod +x test.sh (som root)
Edit 2: Du behöver nog inte vara root eftersom du äger skriptet

Re: Debian, egen funktion

Postat: 17 okt 2008, 20:08
av Raxor
Tackar!
Märkte dock att det fungerade även om man skippade din kod och fixade "exekverings-bit" på filen :P
En lite fråga. hur fungerar filändelser egentligen. Vad jag vet så har jag ingen på mitt script ???

Re: Debian, egen funktion

Postat: 17 okt 2008, 20:30
av David Andersson
Raxor skrev:Tackar!
En lite fråga. hur fungerar filändelser egentligen. Vad jag vet så har jag ingen på mitt script ???
Om man ska hårddra det lite så kan man säga att, filändelser spelar ingen roll i Unix. Du kan kalla ditt script "backup", "backup.sh", "backup.mp3" eller "backup.doc", det spelar ingen roll. Märkligt men sant. Om det innehåller shell-instruktioner eller börjar med #!/bin/sh och är exekverbart så är det ett shell-script.

(Egentligen borde du kunna döpa om dina .mp3-filer till .sh, men Audacious och Totem verkar fördummade av influenser från Microsoft, så de vägrar spela filerna. Rhythmbox och Vlc spelar dem i alla fall.)

Re: Debian, egen funktion

Postat: 17 okt 2008, 21:40
av dmz
Nu kan du starta scriptet utan att skriva "sh". Du skrivar bara "/script/backup".

Kod: Markera allt

./script/backup

Re: Debian, egen funktion

Postat: 26 okt 2008, 05:14
av AJxn
Raxor skrev:Tackar!
Märkte dock att det fungerade även om man skippade din kod och fixade "exekverings-bit" på filen :P
En lite fråga. hur fungerar filändelser egentligen. Vad jag vet så har jag ingen på mitt script ???
Men för att vara säker att det fungerar för andra användare som inte har bash som inloggningsskal, så skall du ange #! (shebang även kallat) med angivet kommando först i filen. Annars kommer du att få "roliga" fel om någon kör med exempelvis tcsh som inloggningsskal. Prova gärna

Kod: Markera allt

#!/bin/sh -v
om du vill i ett testprogram.

För att se effekten, så kan du prova med

Kod: Markera allt

tchs ./script/backup
Som skrivet, Unix/Linux ignorerar filändelser. Punkt '.' är som vilket annat tecken som helst. Det är bara det att vi människor tenderar att vilja ha dem för att enklare se vilka filer som är vad. Unix/Linux tittar bara på x-rättigheten på filen. Är den satt, så försöker OS:et att använda filen som ett program och exekvera det.

Re: Debian, egen funktion[LÖST]

Postat: 26 okt 2008, 10:42
av webaake
Normalt är väl att lägga sina script i mappen (katalogen) /usr/local/bin/.
Gör man det och chmod +x på dem, så funkar de direkt.