Mantenha uma contagem e verifique o case
:
i=0
for file in *.jpg
do
case $i in
0)
cat << _EOF
code one
</div>
_EOF
;;
1)
cat << _EOF
code two
</div>
_EOF
;;
2)
cat << _EOF
code three
</div>
_EOF
;;
esac
((i = (i+1) % 3))
done >> page.html
Observe que *.jpg
pode não terminar com a ordem desejada.
Agora que sabemos o resultado desejado, podemos gerá-lo mais facilmente:
#! /bin/bash
td_format='
<td style="width:100%%;height:100%%;" align="%s" valign="%s" > <img alt="" src="%s"> </td>
'
set -- *.jpg
{
echo '<table class="super-centered">'
while [[ -n $1 ]]
do
echo ' <tr>'
printf "$td_format" center middle "$1" right right "$2" left left "$3"
echo ' </tr>'
shift 3
done
echo '</table>'
}> page.html
Aqui, a variável td_format
é uma string de formato para printf
. %s
na string de formato é substituído por argumentos para printf
(e %%
por %
). printf
faz um loop sobre argumentos, portanto, só precisamos especificar o formato de um elemento aqui, e printf
cuidará do loop sobre os argumentos para imprimir linhas suficientes.
Em seguida, definimos os argumentos do script para os nomes dos arquivos. Agora, podemos acessar esses nomes de arquivos usando $1
, $2
, etc. No loop, eu uso $1
, $2
e $3
e, em seguida, removo esses três usando shift 3
. Em seguida, os próximos três nomes de arquivos se tornarão $1
, $2
e $3
, respectivamente. Então, podemos fazer um loop em lotes de três.
Por fim, em vez de redirecionar todos os comandos, envolvi o bloco inteiro em { }
e redirecionei esse grupo.
Você provavelmente deve repensar o HTML e o estilo usados aqui.