Os comento lo primero.
Lo primero que vamos a ver son los comentarios, es decir, todo aquello que será ignorado por el intérprete de comandos y nos sirve a nosotros como instrucciones o notas aclaratorias.
Para comentar líneas vamos a usar el símbolo '#' de tal forma que todo lo que vaya detrás de este símbolo será ignorado por el intérprete de comandos hasta el final de la línea. De hecho, como curiosidad, esto también funciona en la línea de comandos:
matados2k@geosanidad:~/curso$ #Me ignoran
matados2k@geosanidad:~/curso$ cat holamundo1.sh #Me siguen ignorando
echo hola mundo
matados2k@geosanidad:~/curso$
Y ¿por qué los comentarios son lo primero que os cuento? Pues porque es bueno empezar siempre nuestros scripts de la siguiente forma:
#! /bin/AQUÍ EL INTERPRETE
Este comentario es una indicación sobre qué interprete de comandos debe usarse para interpretar el shell script . O lo que es lo mismo, si debe ser interpretado por 'bash' pondrás '#! /bin/bash', si es por 'sh' pues '#! /bin/sh'. En resumidas cuentas, es la ruta del ejecutable con el que debe ser interpretado el script.
Esta forma de empezar los script no es obligatoria, ni necesaria, pero si es una muy buena práctica que nos asegura transmitir la correcta interpretación de nuestro script.
Dado el siguiente script (lo llamaré no_me_ejecuto.sh):
#! /bin/tcsh
chdir
No será interpretado correctamente por 'bash' pero sí por 'tcsh':
matados2k@geosanidad:~/curso$ sh no_me_ejecuto.sh
no_me_ejecuto.sh: line 3: chdir: command not found
matados2k@geosanidad:~/curso$ tcsh no_me_ejecuto.sh
matados2k@geosanidad:~/curso$
Pero, en cambio, si le doy permisos de ejecución con este comentario, se ejecuta correctamente en el intérprete necesario:
matados2k@geosanidad:~/curso$ chmod +x no_me_ejecuto.sh
matados2k@geosanidad:~/curso$ ./no_me_ejecuto.sh
matados2k@geosanidad:~/curso$
Con lo cual, este comentario no es un comentario, sino una indicación al intérprete de comandos acerca de con qué interprete de comandos debe interpretarse el script en el caso de que tenga permisos de ejecución (¡Toma ya!). Y con el permiso de ejecución y este “no comentario” nos aseguramos de que, o se interpreta bien nuestro script, o no se ejecuta. Si cambiamos en el script anterior '#! /bin/tcsh' por '#! /bin/judas' pasará lo siguiente:
matados2k@geosanidad:~/curso$ ./no_me_ejecuto.sh
bash: ./no_me_ejecuto.sh: /bin/judas: bad interpreter: No existe el fichero o el directorio
matados2k@geosanidad:~/curso$