/ 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
bash script
Fra : Jacob d'Andrade


Dato : 02-02-05 21:10

Hej Ng

Jeg sidder og leger med at script der kan oprette brugere på mit system, da
jeg tilbyder mine nærmeste venner at hoste websider på min server, jeg
mangler en stump kode der gør således:

Hvor mange websites skal brugeren have ?
read $websitenumber (hvis så man skriver 2, så skal den køre efterfølgende
kode igennem to gange)
if $websitenumber = 2 then
bla
bla
bla
fi
for så at køre dette igen... er det muligt og hvordan ?

Mvh Jacob



 
 
Simon Lyngshede (02-02-2005)
Kommentar
Fra : Simon Lyngshede


Dato : 02-02-05 22:06

On Wed, 02 Feb 2005 21:09:32 +0100, Jacob d'Andrade wrote:

> Hej Ng
>
> Jeg sidder og leger med at script der kan oprette brugere på mit system, da
> jeg tilbyder mine nærmeste venner at hoste websider på min server, jeg
> mangler en stump kode der gør således:
>
> Hvor mange websites skal brugeren have ?
> read $websitenumber (hvis så man skriver 2, så skal den køre efterfølgende
> kode igennem to gange)
> if $websitenumber = 2 then
> bla
> bla
> bla
> fi
> for så at køre dette igen... er det muligt og hvordan ?
>


Noget i stil med

if [ "$websitenumber" -eq "2" ]
   then
   
   x=2

   while [ "$x" -gt "0" ]
do
do_wicked_cool_user_add_thingy()
(( x-- ))
done
fi

Ovenstående skulle virke med bash.

Se også:
http://www.linuxbog.dk/unix/bog/shell-script.html


--
Simon Lyngshede
simon@giraf.spiceweasel.dk
Remove long necked animal.


Michael Knudsen (03-02-2005)
Kommentar
Fra : Michael Knudsen


Dato : 03-02-05 14:24

On 2005-02-02, Jacob d'Andrade <jacob@removethezub.dk> wrote:
[snip: loop i sh]
> for så at køre dette igen... er det muligt og hvordan ?

Proev med noget ala dette:

   read num
   for i in $(jot $num); do
      bla bla bla
   done

Mvh. Michael.
--
Rumour is information distilled so finely that it can filter through
anything.
-- (Terry Pratchett, Feet of Clay)

Peter Makholm (03-02-2005)
Kommentar
Fra : Peter Makholm


Dato : 03-02-05 14:29

Michael Knudsen <e@mongers.org> writes:

> Proev med noget ala dette:
>
>    read num
>    for i in $(jot $num); do
>       bla bla bla
>    done

Og hvis man sidder på en unix der ikke har jot kan man måske bruge
seq.

Meget bedre vil det dok nok være at bruge noget aritmetik der er
indbygget i bourneshell. Det skal virke uanset unixvariant.

--
Peter Makholm | Have you ever felt trapped inside a Klein bottle?
peter@makholm.net |
http://hacking.dk |

Michael Knudsen (03-02-2005)
Kommentar
Fra : Michael Knudsen


Dato : 03-02-05 16:02

On 2005-02-03, Peter Makholm <peter@makholm.net> wrote:
> Og hvis man sidder på en unix der ikke har jot kan man måske bruge
> seq.

   luggage$ jot
   usage: jot [-cnr] [-b word] [-p precision] [-s string] [-w word]
    [reps [begin [end [s]]]]
   luggage$ seq
   ksh: seq: not found

Hm. Jeg ved ikke, om nogen af de to er POSIX eller noget.

> Meget bedre vil det dok nok være at bruge noget aritmetik der er
> indbygget i bourneshell. Det skal virke uanset unixvariant.

Ja, hvis folk saa bruger det korrekt, og ikke noget bash/zsh/ksh-specifikt
fnidder, saa alle andre faar problemer. Alternativt kan man bruge
standardvaerktoejer (expr og test).

Det irriterer mig lidt, at nogle systemer insisterer paa at vaere
fuldstaendigt fragmenterede, saa folk begynder at udvide
implementationer med ikke-portable ting for at have faerre afhaengigheder.
--
Rumour is information distilled so finely that it can filter through
anything.
-- (Terry Pratchett, Feet of Clay)

Simon Lyngshede (03-02-2005)
Kommentar
Fra : Simon Lyngshede


Dato : 03-02-05 17:44

On Thu, 03 Feb 2005 15:01:44 +0000, Michael Knudsen wrote:
> Det irriterer mig lidt, at nogle systemer insisterer paa at vaere
> fuldstaendigt fragmenterede, saa folk begynder at udvide
> implementationer med ikke-portable ting for at have faerre afhaengigheder.

Jeg var engang stor fan af bash script, man kan gøre alt muligt med
interne funktioner... Knapt så imponeret har jeg været da jeg lærte at
/bin/sh ikke bare det samme på alle variationer af Unix.

Mit lille forslag bruger godt nok intern bash aritmetik, det havde nok
være mere korrekt med expr eller let.

Hvis man vil have features, så er zsh løsning, jeg har har script der
opretter ftp forbindelser igennem interne funktioner... ZSH, flere
features end Gud

--
Simon Lyngshede
simon@giraf.spiceweasel.dk
Remove long necked animal.


Michael Knudsen (03-02-2005)
Kommentar
Fra : Michael Knudsen


Dato : 03-02-05 21:02

On 2005-02-03, Simon Lyngshede <simon@giraf.spiceweasel.dk> wrote:
> Jeg var engang stor fan af bash script, man kan gøre alt muligt med
> interne funktioner... Knapt så imponeret har jeg været da jeg lærte at
> /bin/sh ikke bare det samme på alle variationer af Unix.

Jeg forstaar ikke den store fanskare, bash har. Noget saa simpelt som at
haandtere lange kommandolinier er fuldstaendig umuligt -- i hvert fald
paa de terminaler, jeg har brugt (xterm, vt100, linux).

Naeh, giv mig pdksh med foelgende tilfoejet til .profile:

   PS1="$(hostname -s) $"; export PS1
   set -o emacs
   bind ^I=complete-list

Naah, jeg stopper, inden det udvikler sig til shell-bashing(!).
--
Rumour is information distilled so finely that it can filter through
anything.
-- (Terry Pratchett, Feet of Clay)

Ivar Madsen (03-02-2005)
Kommentar
Fra : Ivar Madsen


Dato : 03-02-05 21:09

Simon Lyngshede wrote:

> Jeg var engang stor fan af bash script, man kan gøre alt muligt med
> interne funktioner... Knapt så imponeret har jeg været da jeg lærte at
> /bin/sh ikke bare det samme på alle variationer af Unix.

Nu er jeg lidt forviret, hvad med /bin/bash er det så det samme på alle UNIX
afarter?

Hvis man vil lave noget der er kompatibelt på alle UNIX afarter, hvad skal
man så lave det i?

--
Med venlig hilsen

Ivar Madsen

Simon Lyngshede (03-02-2005)
Kommentar
Fra : Simon Lyngshede


Dato : 03-02-05 21:29

On Thu, 03 Feb 2005 21:08:44 +0100, Ivar Madsen wrote:

> Nu er jeg lidt forviret, hvad med /bin/bash er det så det samme på alle UNIX
> afarter?

Det er hovedsagligt kun Linux distributioner der har bash med som
standard. Når bash bliver en ekstra pakke, som i OpenBSD, så bliver det
svært at forudsige hvor den ligger, hvis den da i det hele tager er
installeret. Hvis vi går ud fra at bash nu er installeret, så kan man
angive
#!/usr/bin/env bash frem for #!/bin/bash

>
> Hvis man vil lave noget der er kompatibelt på alle UNIX afarter, hvad skal
> man så lave det i?

Ægte sh skulle virke overalt, hvis man da kan snakke om en ægte sh.
Desværre ser alle Linux distributioner ud til bare at placere en statisk
kompileret udgave af bash som sh, Debian bruger vidst ash. Hvis man laver
et script til sh så burde bash også kunne forstå det.

Man kan nå ret langt ved ikke at bruge for mange indbyggede funktioner,
og i stedet kalde små eksterne programmer, men så ender du ud med at
skulle regne ud hvad der er tilgængelig på de forskellige platforme.

Det er desværre ikke så nemt.

--
Simon Lyngshede
simon@giraf.spiceweasel.dk
Remove long necked animal.


Michael Knudsen (03-02-2005)
Kommentar
Fra : Michael Knudsen


Dato : 03-02-05 21:57

On 2005-02-03, Simon Lyngshede <simon@giraf.spiceweasel.dk> wrote:
> Man kan nå ret langt ved ikke at bruge for mange indbyggede funktioner,
> og i stedet kalde små eksterne programmer, men så ender du ud med at
> skulle regne ud hvad der er tilgængelig på de forskellige platforme.
>
> Det er desværre ikke så nemt.

En del af problemet er nok ogsaa, at folk bruger sh til ting, det slet
ikke er beregnet til. Mange problemer er langt bedre loest med et
Perl-script eller tilsvarende.
--
Rumour is information distilled so finely that it can filter through
anything.
-- (Terry Pratchett, Feet of Clay)

Allan Joergensen (03-02-2005)
Kommentar
Fra : Allan Joergensen


Dato : 03-02-05 22:43

Michael Knudsen <e@mongers.org> wrote:

> En del af problemet er nok ogsaa, at folk bruger sh til ting, det slet
> ikke er beregnet til. Mange problemer er langt bedre loest med et
> Perl-script eller tilsvarende.

Tilsvarende kan man desværre ikke regne med at Perl findes på alle
platforme.

--
Allan Joergensen

"Tech support? What's that?"--Bill Gates

Ivar Madsen (03-02-2005)
Kommentar
Fra : Ivar Madsen


Dato : 03-02-05 23:07

Allan Joergensen wrote:

>> En del af problemet er nok ogsaa, at folk bruger sh til ting, det slet
>> ikke er beregnet til. Mange problemer er langt bedre loest med et
>> Perl-script eller tilsvarende.
> Tilsvarende kan man desværre ikke regne med at Perl findes på alle
> platforme.

Kan man så konkludere, at hvis man vil have noget der virker på alle
platforme, så skal man lave det i et kompilet sprog, og sørge for at det
ikke er afhænig af noget. Man kan ikke lave noget i et scriptsprog?

--
Med venlig hilsen

Ivar Madsen

Allan Joergensen (03-02-2005)
Kommentar
Fra : Allan Joergensen


Dato : 03-02-05 23:13

Ivar Madsen <spam.news.cc@milli.dk> wrote:

> Kan man så konkludere, at hvis man vil have noget der virker på alle
> platforme, så skal man lave det i et kompilet sprog, og sørge for at det
> ikke er afhænig af noget. Man kan ikke lave noget i et scriptsprog?

Jeg har ofte lavet ting i ksh som har virket på både Solaris, HP-UX, AIX
og Linux (og selvom det ikke er ALLE platforme så dækker det mit behov)

mvh
--
Allan Joergensen

"Yes, I'm talking to >you<, Strudel Boy!" - Dr. Niles Crane

Michael Knudsen (03-02-2005)
Kommentar
Fra : Michael Knudsen


Dato : 03-02-05 23:20

On 2005-02-03, Allan Joergensen <allan@nowhere.dk> wrote:
>> En del af problemet er nok ogsaa, at folk bruger sh til ting, det slet
>> ikke er beregnet til. Mange problemer er langt bedre loest med et
>> Perl-script eller tilsvarende.
>
> Tilsvarende kan man desværre ikke regne med at Perl findes på alle
> platforme.

Nej, men i det mindste er der kun (saa vidt jeg ved) een implementation
af Perl. Et andet problem med shellscripts er, at de forventes at fungere
med /bin/sh.

Der er dog ingen tvivl om, at portabilitet ikke er trivielt opnaaet. Jeg
mener nu ogsaa, at i mange tilfaelde boer man reparere systemet i stedet
for at tilfoeje et laes #ifdef og andet kodeobfuskerende fnidder i sin
kode.
--
Rumour is information distilled so finely that it can filter through
anything.
-- (Terry Pratchett, Feet of Clay)

Peter Makholm (03-02-2005)
Kommentar
Fra : Peter Makholm


Dato : 03-02-05 19:46

Simon Lyngshede <simon@giraf.spiceweasel.dk> writes:

> Jeg var engang stor fan af bash script, man kan gøre alt muligt med
> interne funktioner... Knapt så imponeret har jeg været da jeg lærte at
> /bin/sh ikke bare det samme på alle variationer af Unix.

Følgende er klippet fra SUSv3:

# repeat a command 100 times
x=100
while [ $x -gt 0 ]
do
command
x=$(($x-1))
done

Det skal bare virke på en unix der er fulgt med tiden.

--
Peter Makholm | We constantly have to keep in mind why natural
peter@makholm.net | languages are good at what they're good at. And to
http://hacking.dk | never forget that Perl is a human language first,
| and a computer language second

Peter Makholm (03-02-2005)
Kommentar
Fra : Peter Makholm


Dato : 03-02-05 19:58

Michael Knudsen <e@mongers.org> writes:

>> Og hvis man sidder på en unix der ikke har jot kan man måske bruge
>> seq.
>
>    luggage$ jot
>    usage: jot [-cnr] [-b word] [-p precision] [-s string] [-w word]
>     [reps [begin [end [s]]]]
>    luggage$ seq
>    ksh: seq: not found
>
> Hm. Jeg ved ikke, om nogen af de to er POSIX eller noget.

Ingen af dem er nævnt i IEEE 1003.1:2001 (POSIX eller SUSv3 - om man
vil).

jot er vist en BSD-ting og tilsyneladende introduceret i 4.4BSD. seq
er vist en GNU-ting.

--
Peter Makholm | There are 10 kinds of people. Those who count in
peter@makholm.net | binary and those who don't
http://hacking.dk |

Jacob d'Andrade (04-02-2005)
Kommentar
Fra : Jacob d'Andrade


Dato : 04-02-05 10:59

Jeg takker alle for en dejlig livlig diskussion... Jeg vil lige prøve jeres
forskellige metoder af... Jeg takker mange gange...


Mvh Jacob


"Peter Makholm" <peter@makholm.net> skrev i en meddelelse
news:87u0otbhd7.fsf@xyzzy.adsl.dk...
> Michael Knudsen <e@mongers.org> writes:
>
>>> Og hvis man sidder på en unix der ikke har jot kan man måske bruge
>>> seq.
>>
>> luggage$ jot
>> usage: jot [-cnr] [-b word] [-p precision] [-s string] [-w word]
>> [reps [begin [end [s]]]]
>> luggage$ seq
>> ksh: seq: not found
>>
>> Hm. Jeg ved ikke, om nogen af de to er POSIX eller noget.
>
> Ingen af dem er nævnt i IEEE 1003.1:2001 (POSIX eller SUSv3 - om man
> vil).
>
> jot er vist en BSD-ting og tilsyneladende introduceret i 4.4BSD. seq
> er vist en GNU-ting.
>
> --
> Peter Makholm | There are 10 kinds of people. Those who count in
> peter@makholm.net | binary and those who don't
> http://hacking.dk |



Claus Alboege (04-02-2005)
Kommentar
Fra : Claus Alboege


Dato : 04-02-05 07:07

Simon Lyngshede <simon@giraf.spiceweasel.dk> writes:

> On Thu, 03 Feb 2005 21:08:44 +0100, Ivar Madsen wrote:
>
>> Nu er jeg lidt forviret, hvad med /bin/bash er det så det samme på
>> alle UNIX afarter?
>
> Det er hovedsagligt kun Linux distributioner der har bash med som
> standard. Når bash bliver en ekstra pakke, som i OpenBSD, så bliver det
> svært at forudsige hvor den ligger, hvis den da i det hele tager er
> installeret. Hvis vi går ud fra at bash nu er installeret, så kan man
> angive
> #!/usr/bin/env bash frem for #!/bin/bash

Hvilket selvfølgelig kræver at env ligger i /usr/bin på alle systemer :)


/Claus A

Claus Alboege (04-02-2005)
Kommentar
Fra : Claus Alboege


Dato : 04-02-05 07:09

Hej,

Ivar Madsen <spam.news.cc@milli.dk> writes:
> Allan Joergensen wrote:
>>> En del af problemet er nok ogsaa, at folk bruger sh til ting, det
>>> slet ikke er beregnet til. Mange problemer er langt bedre loest med
>>> et Perl-script eller tilsvarende.
>> Tilsvarende kan man desværre ikke regne med at Perl findes på alle
>> platforme.
>
> Kan man så konkludere, at hvis man vil have noget der virker på alle
> platforme, så skal man lave det i et kompilet sprog, og sørge for at
> det ikke er afhænig af noget.

Det er nødvendigvis heller ikke helt trivielt (afhængigt af hvad du vil
lave), se fx:

http://cr.yp.to/docs/unixport.html


/Claus A

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408943
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste