Ah! So a 'break' quits the inner loop then hits the 'shift' which has the same effect as putting the shift at the top of the outer loop. That's very clever. Never seen 'repeat' used in a real life way. There are tools which aren't used often, but still very useful when needed.shift while [ "$1" ]; do repeat 1 do if [ a ]; then b; c; break; fi if [ d ]; then e; f; break; fi if [ g ]; then h; i; break; fi ... done shift done