|
| 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
| |
|
|