O while executa o loop entre o do e o done enquanto o cmd a sua frente for bem sucedido. Nesse caso ele usou um bloco de cmds, onde os 3 primeiros cmds sempre serão bem sucedidos:
echo "previous-variable = $previous"
echo
previous=$var1
restando somente o último ([ "$var1" != end ]) que pode ser bem ou mal sucedido.
Se pode inserir um monte de echo ou de atribuição nesse bloco que o prog rodará ok, mas se vc colocar apenas unzinho após o test, seu prog não sairá mais do loop.
Experimente fazer:
#!/bin/bash
var1=unset
previous=$var1
while echo "previous-variable = $previous"
echo
previous=$var1
true
:
echo continuo enchendo linquiça
[ "$var1" != end ] # Keeps track of what $var1 was previously.
# Four conditions on *while*, but only the final one controls loop.
# The *last* exit status is the one that counts.
do
echo "Input variable #1 (end to exit) "
read var1
echo "variable #1 = $var1"
done
# Try to figure out how this all works.
# It's a wee bit tricky.
exit 0
e vc verá que o prg continua funcionando.
Não é a mesma coisa, mas para ter certeza que seria informado uma data ao zenity, fiz o código a seguir:
until data="" --calendar \
--title "Datas dos vôos" \
--text "Escolha uma data para o vôo de ida" \
--day $(date +%_d) \
--month $(date +%_m) \
--year $(date +%Y))
do
:
done