[AIX/KSH] do-while loop in scripts

Pagina: 1
Acties:

  • Aragnut
  • Registratie: Oktober 2009
  • Laatst online: 22:56
In C/C++ is het mogelijk om do-while loopjes te maken. Hierbij wordt de code in de loop minimaal 1 maal uitgevoerd, en aan het einde wordt de conditie gecontroleerd. In ksh zijn er wel while, until en for loops, maar deze checken allemaal aan het begin hun conditie voor het uitvoeren. Van wat ik heb kunnen vinden, zijn er geen soortgelijke loops mogelijk bij shell (ksh) scripting.

Los van het dupliceren van de code binnen de loop naar voor de loop, wat zijn (jullie) creatieve oplossingen hiervoor?

  • Big Mama
  • Registratie: Mei 2000
  • Laatst online: 06-10 09:11
#!/bin/ksh
NOGEENKEER="ja"

while [ "NOGEENKEER" = "ja" ]
do
# Doe iets leuks
NOGEENKEER="nee"
done

Computers follow your orders, not your intentions.


  • Aragnut
  • Registratie: Oktober 2009
  • Laatst online: 22:56
Big Mama schreef op woensdag 29 september 2010 @ 13:37:

<muggenzift modus>
Geeft dat niet een enkele iteratie? daar hoort toch nog bij:
#!/bin/ksh
NOGEENKEER="ja"

while [ <wat-je-maar-wil-checken> && "NOGEENKEER" = "ja" ]
do
# Doe iets leuks
NOGEENKEER="nee"
done
/muggenzift modus
Geeft dat niet een enkele iteratie? daar hoort toch nog bij (uiteraard met de correcte [ of ( ):

while [ <wat-je-maar-wil-checken> && "NOGEENKEER" = "ja" ]

</muggenzift modus>

Dat scheelt inderdaad al t.o.v. 2 maal dezelfde code, wat de zaak wel overzichtelijker maakt

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 21:46

Kees

Serveradmin / BOFH / DoC
Niet als je die boolean laat afhangen van je wil checken. In psuedocode:

do {
bla
} while ( expression=true)

naar:
tmp-expression = true
while (tmp-expression = true) {
bla
tmp-expression=expression
}

Dat zou dezelfde functionaliteit opleveren.

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


Acties:
  • 0 Henk 'm!

  • sam.vimes
  • Registratie: Januari 2007
  • Laatst online: 08-06 08:44
De kortste klap is denk ik:
code:
1
2
3
4
5
while :
do
  blabla
  expression || break
done


Dit gaat door zolang expression true is (do..while). Als je wilt stoppen als expression true is (repeat..until), de || vervangen door &&.

[ Voor 42% gewijzigd door sam.vimes op 05-10-2010 08:29 . Reden: end-clause uitgebreid ]