Objetivo:
Aprender a crear un primer script de shell en Linux, entender la función de la línea shebang, otorgarle permisos de ejecución, ejecutarlo de distintas formas y comprender el papel de la variable de entorno PATH para poder ejecutar un script desde cualquier ubicación.
Escenario:
- Herramientas: Terminal de Linux, editor de texto (
vio similar) y dos ventanas de terminal. - Conceptos clave: script, shebang, permisos de ejecución, ruta relativa y absoluta, variable de entorno
PATH, diferencia de comportamiento entre Linux y Windows al localizar ejecutables.
Instrucciones:
Fase 1: Creación del script
- Abre tu editor de texto y crea un nuevo fichero:
- Entra en modo edición con
iy escribe el siguiente contenido: - Pulsa
Escy guarda el fichero saliendo con:x.
vi s1.sh
#!/bin/bash # mi primer programa echo "este es mi primer script de linux" echo "esta es la segunda línea" date # fin del programa
Fase 2: Comprobación del contenido del script
- Visualiza el contenido del fichero recién creado:
- Identifica en la salida las distintas partes: la línea shebang, los comentarios y las instrucciones
echoydate.
cat s1.sh
Fase 3: Intento de ejecución sin permisos
- Comprueba los permisos actuales del fichero:
- Intenta ejecutar el script utilizando la ruta relativa:
- Observa el mensaje de error y relaciona ese mensaje con los permisos que has visto en el paso anterior.
ls -l s1.sh
./s1.sh
Fase 4: Asignación de permisos de ejecución
- Otorga permisos de ejecución al script:
- Comprueba de nuevo los permisos del fichero:
- Verifica que ahora aparece el permiso de ejecución para el usuario, el grupo y otros.
chmod +x s1.sh
ls -l s1.sh
Fase 5: Ejecución del script
- Ejecuta el script utilizando la ruta relativa al directorio actual:
- Ejecuta ahora el mismo script indicando su ruta absoluta (ajusta la ruta a tu usuario):
- Comprueba que en ambos casos el script se ejecuta correctamente y muestra el mismo resultado.
./s1.sh
/home/tu_usuario/s1.sh
Fase 6: Comprobación del comportamiento sin indicar ruta
- Sitúate en el directorio donde se encuentra el script y ejecútalo escribiendo solo su nombre:
- Observa el mensaje de error, aunque el fichero exista en ese directorio.
- Reflexiona sobre la diferencia entre este comportamiento y el de otros sistemas operativos, en los que se buscaría también en el directorio actual.
s1.sh
Fase 7: Añadir el script al PATH
- Crea un directorio para almacenar tus scripts:
- Copia tu script a ese directorio:
- Consulta el contenido actual de la variable
PATH: - Añade el directorio de tus scripts al PATH, conservando el contenido anterior de la variable (ajusta la ruta a tu usuario):
- Comprueba que el nuevo directorio se ha añadido correctamente:
- Desde cualquier directorio, ejecuta el script escribiendo solo su nombre:
- Comprueba que ahora se ejecuta correctamente sin necesidad de indicar su ruta ni situarte en su directorio.
mkdir scripts
cp s1.sh scripts/
echo $PATH
PATH=$PATH:/home/tu_usuario/scripts
echo $PATH
s1.sh
Preguntas de reflexión:
- ¿Qué es un script de shell y de qué está compuesto realmente?
- ¿Qué función cumple la línea que empieza por
#!al principio de un script? - ¿Es obligatorio nombrar los scripts con extensión
.sh? ¿Por qué se recomienda hacerlo de todos modos? - ¿Por qué el script no se puede ejecutar aunque exista en el directorio y tenga contenido correcto, antes de aplicar
chmod +x? - ¿Qué diferencia hay entre ejecutar un script con
./s1.shy con su ruta absoluta? - ¿Por qué al escribir solo
s1.shestando en su mismo directorio Linux responde que no encuentra la orden? - ¿Qué diferencia de comportamiento existe entre Linux y Windows a la hora de localizar un ejecutable?
- ¿Qué contiene la variable de entorno
PATH? - ¿Por qué al modificar el PATH es importante escribir
PATH=$PATH:nueva_rutaen lugar dePATH=nueva_ruta? - ¿Qué ventaja obtienes al añadir el directorio de tus scripts al PATH?
Haz clic aquí para ver las soluciones y explicaciones
1. ¿Qué es un script de shell y de qué está compuesto?
Un script es un programa formado por una secuencia de comandos de la shell, los mismos que se podrían ejecutar uno a uno en la terminal, pero agrupados en un fichero para que se ejecuten todos seguidos y se puedan reutilizar cuantas veces sea necesario.
2. ¿Qué función cumple la línea #!?
Esta línea, conocida como shebang, indica a Linux qué intérprete o shell debe utilizarse para ejecutar el script, por ejemplo /bin/bash para la shell Bash. No es obligatoria, pero es muy recomendable incluirla para evitar ambigüedades.
3. ¿Es obligatorio usar la extensión .sh?
No es obligatorio, ya que en Linux las extensiones no determinan el tipo de fichero. Sin embargo, es una buena práctica utilizarla porque permite identificar rápidamente que un fichero es un script de shell.
4. ¿Por qué no se puede ejecutar el script antes de chmod +x?
Porque, aunque el fichero contenga instrucciones válidas, el sistema no lo trata como un programa ejecutable hasta que se le asignan permisos de ejecución. Sin ese permiso, Linux deniega la ejecución aunque el usuario pueda leer o escribir el fichero.
5. ¿Qué diferencia hay entre ./s1.sh y la ruta absoluta?
Ambas formas indican explícitamente dónde se encuentra el fichero: ./s1.sh indica que está en el directorio actual, mientras que la ruta absoluta indica su ubicación completa en el sistema de ficheros. Las dos permiten ejecutar el script sin depender del PATH.
6. ¿Por qué falla al escribir solo s1.sh?
Porque Linux, a diferencia de otros sistemas, no busca automáticamente los ejecutables en el directorio actual, sino únicamente en los directorios listados en la variable PATH. Si el directorio actual no está en el PATH, el sistema no encuentra el programa aunque esté presente.
7. ¿Qué diferencia de comportamiento existe entre Linux y Windows?
Windows busca los ejecutables tanto en el directorio actual como en las rutas del PATH, mientras que Linux busca exclusivamente en las rutas definidas en el PATH, salvo que se indique explícitamente la ubicación del fichero.
8. ¿Qué contiene la variable PATH?
Contiene una lista de directorios, separados por dos puntos, en los que el sistema busca los programas ejecutables cuando se invoca un comando por su nombre.
9. ¿Por qué escribir PATH=$PATH:nueva_ruta y no PATH=nueva_ruta?
Porque al escribir PATH=$PATH:nueva_ruta se conserva el contenido previo de la variable y se añade la nueva ruta al final. Si se escribiera solo PATH=nueva_ruta, se perderían todas las rutas anteriores y dejarían de encontrarse los programas que dependían de ellas.
10. ¿Qué ventaja se obtiene al añadir el directorio de scripts al PATH?
Permite ejecutar los scripts guardados en ese directorio escribiendo únicamente su nombre, desde cualquier ubicación del sistema, sin necesidad de indicar la ruta completa ni situarse en el directorio donde se encuentran.
Ficha de Laboratorio: Creación, Permisos y Ejecución de Scripts
Instrucciones de entrega:
- Rellena los campos y responde en este formulario desde tu navegador.
- Pulsa el botón de imprimir al final de la página.
- Selecciona "Guardar como PDF" en el diálogo de impresión.
- Entrega el archivo PDF en el aula virtual.
Alumno/a: Fecha:
Grupo:
Completa la ficha realizando las siguientes actividades:
- Crea un script llamado
s1.shcon la línea shebang, un comentario y al menos dos instruccionesechomásdate.
Copia aquí el contenido completo de tu script:
Explica para qué sirve la primera línea del script:
- Comprueba los permisos del script e intenta ejecutarlo antes de darle permiso de ejecución.
Escribe el comando utilizado para comprobar los permisos:
Escribe el comando utilizado para intentar ejecutarlo:
Copia aquí el mensaje de error obtenido:
Explica a qué se debe ese error:
- Otorga permisos de ejecución al script y ejecútalo con ruta relativa y con ruta absoluta.
Escribe el comando utilizado para dar permisos:
Escribe el comando utilizado con ruta relativa:
Escribe el comando utilizado con ruta absoluta:
Copia aquí la salida obtenida al ejecutar el script:
- Intenta ejecutar el script escribiendo solo su nombre, estando en el mismo directorio donde se encuentra.
Escribe el comando utilizado:
Copia aquí el mensaje obtenido:
Explica por qué ocurre esto en Linux:
- Consulta el contenido de la variable PATH antes y después de añadir tu directorio de scripts.
Escribe el comando utilizado para consultar el PATH:
Escribe el comando utilizado para añadir tu directorio al PATH:
Copia aquí el contenido del PATH antes y después del cambio:
- Ejecuta el script escribiendo solo su nombre desde un directorio distinto al de scripts, una vez añadido al PATH.
Escribe el comando utilizado:
Copia aquí la salida obtenida:
Explica por qué ahora sí funciona sin indicar la ruta: