A única diferença entre texto e binário é como você o interpreta. * nix tende a não interpretá-los, então misturá-los dessa maneira é bom; a parte de texto do script pode extrair o conteúdo da parte binária do script usando vários comandos.
No final, parece que é apenas um script sh comum:
[USER@MACHINE ~/Desktop/D] head -2 truecrypt-7.1-setup-x86
#!/bin/sh
CHECKSUM=163123652
mas os scripts acabam:
[USER@MACHINE ~/Desktop/D] tail -2 truecrypt-7.1-setup-x86
5��\V<Rx+÷o��6ܺF!&8�ʷ�����^��T4
Sk�!�0"�W���L�'���Su�VP�!m�]5����C'}�/���%�������8�4�?�N;:��zgf�q�14S%oL�hҌz����+����Ƥ<'��jN7)m�H�^�ɧa��:�S��
A única diferença entre texto e binário é como você o interpreta. * nix tende a não interpretá-los, então misturá-los dessa maneira é bom; a parte de texto do script pode extrair o conteúdo da parte binária do script usando vários comandos.
Este é um truque comum que vejo nos instaladores. Normalmente, a parte binária é um arquivo e o topo tem os comandos para extraí-lo.
"Como o arquivo pode conter dados binários ASCII + também?"
Simplesmente porque o texto ASCII é apenas um subconjunto de dados binários.