/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
unix script spørgsmål
Fra : lasse poulsen


Dato : 13-04-01 22:17

hej

Hvordan kan man lave et script i unix der skyder flere unix kommandoer efter
hinanden som en bat fil i dos.

cd $gtxxxxx
Ls 40*






 
 
Steen Suder (14-04-2001)
Kommentar
Fra : Steen Suder


Dato : 14-04-01 22:32

lasse poulsen wrote:
>
> hej
>
> Hvordan kan man lave et script i unix der skyder flere unix kommandoer efter
> hinanden som en bat fil i dos.
>
> cd $gtxxxxx
> Ls 40*

På næsten samme måde:


#!/bin/sh
cd /tmp
rm -rf *
echo Saa er her ryddet op > status.txt
cd /


Husk den første linie (#!/bin/sh); den er vigtig da shell'en
sandsynligvis ellers ikke vil vide hvad den skal gøre med resten.

Du skal huske at gøre scriptet executable:
chmod u+x testscript

--
Steen Suder

"We reject kings, presidents and voting.
We believe in rough consensus and running code."

lasse poulsen (13-04-2001)
Kommentar
Fra : lasse poulsen


Dato : 13-04-01 22:54


Steen Suder skrev i meddelelsen <3AD8C1B7.DB033EA5@earthling.net>...
>lasse poulsen wrote:
>>
>> hej
>>
>> Hvordan kan man lave et script i unix der skyder flere unix kommandoer
efter
>> hinanden som en bat fil i dos.
>>
>> cd $gtxxxxx
>> Ls 40*
>
>På næsten samme måde:
>
>
>#!/bin/sh
>cd /tmp
>rm -rf *
>echo Saa er her ryddet op > status.txt
>cd /
>

tak for hurtig svar - tak



Peter Makholm (15-04-2001)
Kommentar
Fra : Peter Makholm


Dato : 15-04-01 09:15

Steen Suder <CAB@earthling.net> writes:

> Husk den første linie (#!/bin/sh); den er vigtig da shell'en
> sandsynligvis ellers ikke vil vide hvad den skal gøre med resten.

Jeg ved ikke lige hvad POSIX siger om evenstående, men linux/bash ser
ud til at bruge et eller andet fornuftigt:

xyzzy% /bin/sh --login --posix
sh-2.04$ cat /tmp/testscript
echo "testscript"
sh-2.04$ /tmp/testscript
testscript
sh-2.04$

(Om den så bruger min standardkomandolinjefortolker, /bin/sh eller
noget helt andet har jeg ikke lige nogen ide til at finde ud af)

--
hash-bang-slash-bin-slash-bash

Steen Suder (15-04-2001)
Kommentar
Fra : Steen Suder


Dato : 15-04-01 11:08

Peter Makholm wrote:
>
> Steen Suder <CAB@earthling.net> writes:
>
> > Husk den første linie (#!/bin/sh); den er vigtig da shell'en
> > sandsynligvis ellers ikke vil vide hvad den skal gøre med resten.
>
> Jeg ved ikke lige hvad POSIX siger om evenstående, men linux/bash ser
> ud til at bruge et eller andet fornuftigt:

Har du nogle gode kilder til forklaring af POSIX i denne sammenhæng? Jeg
er bekendt med konceptet, men vil egentligt gerne vide noget mere.

<SNIP et eksempel>

--
Steen Suder

"We reject kings, presidents and voting.
We believe in rough consensus and running code."

Kristian Frederiksen (15-04-2001)
Kommentar
Fra : Kristian Frederiksen


Dato : 15-04-01 16:21

Steen Suder wrote:

> Peter Makholm wrote:
> >
> > Steen Suder <CAB@earthling.net> writes:
> >
> > > Husk den første linie (#!/bin/sh); den er vigtig da shell'en
> > > sandsynligvis ellers ikke vil vide hvad den skal gøre med resten.
> >
> > Jeg ved ikke lige hvad POSIX siger om evenstående, men linux/bash ser
> > ud til at bruge et eller andet fornuftigt:
>
> Har du nogle gode kilder til forklaring af POSIX i denne sammenhæng? Jeg
> er bekendt med konceptet, men vil egentligt gerne vide noget mere.
>
> <SNIP et eksempel>
>
> --
> Steen Suder
>
> "We reject kings, presidents and voting.
> We believe in rough consensus and running code."

Man kan jo også bare bruge de gode gamle metoder, og indsætte et sødt lille
| mellem hver kommando.
cd $gtxxxxx | ls 40*
Bash scripts er fine nok, men du kan også bare smide det i fil, og chmod
775 den så den kan executes.
Hvorfor gøre ting mere indviklede end de er ?

- Kristian Frederiksen


Peter Makholm (15-04-2001)
Kommentar
Fra : Peter Makholm


Dato : 15-04-01 16:41

Kristian Frederiksen <cfp12851@vip.cybercity.dk> writes:

> Man kan jo også bare bruge de gode gamle metoder, og indsætte et sødt lille
> | mellem hver kommando.
> cd $gtxxxxx | ls 40*

Mener du ikke &&?

cd foobar && ls baz*

> Hvorfor gøre ting mere indviklede end de er ?

Nej, men det skal gøres rigtigt og det du skriver er noget ævl.

--
hash-bang-slash-bin-slash-bash

frank damgaard (15-04-2001)
Kommentar
Fra : frank damgaard


Dato : 15-04-01 17:01

Steen Suder <CAB@earthling.net> wrote:

....
> Har du nogle gode kilder til forklaring af POSIX i denne sammenhæng? Jeg
> er bekendt med konceptet, men vil egentligt gerne vide noget mere.


POSIX er blot en standard som bla. indeholder nogle standarder for
kommandofortolkeren. De fleste er dog mere end POSIX, og nogle
er helt forskellig fra POSIX, bla. csh og tcsh.
Man kan købe en bog der beskriver hele POSIX (eller er det flere bøger?).

Lidt læsning om kommandofortolkere (shell) på
http://www.sslug.dk/foredrag/shell/
og
http://www.sslug.dk/linuxbog/program/bog/program-shell.html
--
Frank Damgaard


Kent Friis (15-04-2001)
Kommentar
Fra : Kent Friis


Dato : 15-04-01 22:11

Den 15 Apr 2001 10:14:44 +0200 skrev Peter Makholm:
>Steen Suder <CAB@earthling.net> writes:
>
>> Husk den første linie (#!/bin/sh); den er vigtig da shell'en
>> sandsynligvis ellers ikke vil vide hvad den skal gøre med resten.
>
>Jeg ved ikke lige hvad POSIX siger om evenstående, men linux/bash ser
>ud til at bruge et eller andet fornuftigt:
>
>xyzzy% /bin/sh --login --posix
>sh-2.04$ cat /tmp/testscript
>echo "testscript"
>sh-2.04$ /tmp/testscript
>testscript
>sh-2.04$
>
>(Om den så bruger min standardkomandolinjefortolker, /bin/sh eller
>noget helt andet har jeg ikke lige nogen ide til at finde ud af)

Når du kalder et script fra shell'en, vil den forsøge flg:

1. lave en exec() på scriptet.

Hvis scriptet er 755 (eller tilsvarende), og starter med #!/bin/sh
eller en anden magic værdi (fx. "^?ELF") sørger exec for at udføre
scriptet.

2. Hvis exec'en fejler, prøver shell'en selv at fortolke filen. Dvs
hvis man bruger bash, er det bash der fortolker den - bruger man
csh er det csh der fortolker den[1].

I dit eksempel er det pkt. 2 der sørger for at fortolke scriptet.

Hvis et andet program (fx. cron eller sendmail) kalder scriptet,
vil kun pkt. 1 blive udført. Derfor bør man altid starte et script
med #!/bin/sh (eller #!/bin/csh eller #!/bin/cat ...).

Mvh
Kent

[1] Csh har muligvis en måde selv at finde ud af at det ikke er et
c-shell-script og kalder /bin/sh i stedet, men hvis det er tilfældet,
gælder det kun csh.
--
http://www.celebrityshine.com/~kfr - sidste billede: planets.png

Søg
Reklame
Statistik
Spørgsmål : 177514
Tips : 31968
Nyheder : 719565
Indlæg : 6408615
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste