Aprende leyendo en orden

Introducción a los scripts de shell — #!/bin/sh y chmod +x

Este artículo forma parte del Curso de Linux, con el que dominarás desde cero habilidades prácticas de Linux, desde los comandos básicos hasta los scripts de shell.
Crea un script de shell en vi, añade #!/bin/sh, hazlo ejecutable con chmod +x y ejecútalo con ./hello.sh. Ilustrado y practicado en tu navegador.

Crear un script — vi y #!/bin/sh

Un script de shell agrupa en un archivo los comandos que normalmente escribirías en la terminal, para que puedas ejecutarlos todos de una vez.

En lugar de teclear a mano un conjunto fijo de pasos cada vez, los escribes en un archivo y puedes repetir el mismo trabajo con precisión tantas veces como quieras.

Aquí aprenderás lo básico para crear y ejecutar un script de shell.

Abre el archivo con vi hello.sh, pulsa i para entrar en modo inserción y escribe el cuerpo, luego pulsa Esc y guarda y cierra con :wq (las operaciones básicas de vi son las mismas que aprendiste la última vez).

Haz que la primera línea sea #!/bin/sh, un shebang, que indica qué shell ejecuta el script.

Las líneas que empiezan por # se ignoran al ejecutar, como comentarios.

La única excepción es la primera línea: aunque #!/... empiece por #, no es un comentario — se interpreta de forma especial como la directiva que indica qué shell ejecutar.

Crear → dar permiso → ejecutar, y cómo cambia ls -l
Escribir con vihello.sh creado-rw-r--r--Ver permisocon ls -lDar permiso ejec.-rwxr-xr-xaparece xCon x puesto,ejecuta con ./Ejecutar el scriptrun info: etc.se imprimevi hello.shchmod +x hello.sh./hello.sh
Crearlo con vi hello.sh da -rw-r--r-- (sin x); chmod +x lo cambia a -rwxr-xr-x (con x), y ./hello.sh lo ejecuta. El centro muestra la comprobación con ls -l.
SintaxisSignificadoEjemplo
vi fAbrir un archivo en el editor (lo crea si no existe)vi hello.sh
iEscEscribir el cuerpo en modo inserción, Esc vuelve al modo normalPulsa iEsc
:wqGuardar y salir de vi:wq
#!/bin/shEl shebang en la primera línea (indica la shell a ejecutar)#!/bin/sh
# comentarioUna línea explicativa ignorada al ejecutar# create backup
chmod +x fAñadir permiso de ejecución a un archivochmod +x hello.sh
./fEjecutar el script en el directorio actual./hello.sh
>> fAñadir al final de un archivo (sin sobrescribir)date >> run.log
vi note.sh        # abre el script en el editor
# pulsa i para entrar en modo inserción y escribe:
#   #!/bin/sh
#   # show a short message
#   echo "build step 1"
#   echo "build step 2"
# pulsa Esc y guarda y sal con :wq
chmod +x note.sh  # añade permiso de ejecución
./note.sh         # imprime build step 1 / build step 2

Vas a construir una pequeña herramienta que registra la fecha en que lo ejecutaste y el directorio de trabajo.

① Abre hello.sh con vi hello.sh y pulsa i para entrar en modo inserción.

② En la primera línea escribe #!/bin/sh, luego añade una línea de comentario que indique para qué sirve el script y los comandos que imprimen la fecha actual y el directorio de trabajo (puedes copiar y pegar el contenido desde el panel de respuesta).

③ Pulsa Esc y guarda y sal con :wq.

④ Añade permiso de ejecución al hello.sh que creaste.

⑤ Ejecuta ls -l hello.sh y confirma que aparece una x en el borde izquierdo, mostrando que el permiso de ejecución cambió.

⑥ Ejecuta el script y confirma que se imprimen la fecha y el directorio de trabajo. (Si se ejecuta correctamente, aparecerá una explicación.)

Linux console
0 / 4 completado(s)
Loading Linux Terminal...

Ejecutarlo — chmod +x y ./

Un archivo que acabas de crear no se puede ejecutar tal cual.

Una vez que añades permiso de ejecución con chmod +x file, puedes ejecutarlo en la forma ./file.

./ es la manera de referirse a un archivo en el directorio actual; sin él, la shell solo busca el comando dentro de PATH y no lo encuentra.

vi greet.sh        # abre en el editor, escribe #!/bin/sh y echo hi, guarda con :wq
ls -l greet.sh      # aún sin permiso de ejecución
chmod +x greet.sh   # añade permiso de ejecución
ls -l greet.sh      # aparece una x en el borde izquierdo
./greet.sh          # imprime hi

También hay una forma de ejecutarlo sin permiso de ejecución

Cuando quieras ejecutarlo sin añadir permiso de ejecución, también hay una forma de entregar el archivo a una shell, como sh file.

En este curso usamos la forma básica de añadir permiso de ejecución y ejecutar con ./file.

Puedes comprobar si se añadió el permiso de ejecución según aparezca una x en el borde izquierdo de ls -l.

Vas a recorrer el flujo de crear un script, añadir permiso de ejecución y ejecutarlo.

① Abre run.sh con vi run.sh, escribe #!/bin/sh en la primera línea y un comando que imprima un mensaje corto en la siguiente línea, luego guarda con :wq.

② Comprueba los permisos actuales con ls -l run.sh (aún no hay permiso de ejecución).

③ Añade permiso de ejecución al run.sh que creaste.

④ Ejecuta ls -l run.sh de nuevo y confirma que apareció una x en el borde izquierdo.

⑤ Ejecuta el script con ./ y confirma que se imprime el mensaje.

Linux console
0 / 4 completado(s)
Loading Linux Terminal...

Construir una pequeña herramienta que registra las ejecuciones

El flujo de crear, dar permiso y ejecutar que aprendiste puede usarse directamente en pequeñas herramientas del mundo real.

Aquí vas a construir una herramienta de registro que añade "cuándo se ejecutó el script" a un único archivo de log.

Cuando añades con >>, las líneas se acumulan cada vez que lo ejecutas, así que puedes revisar después el historial de ejecución.

Las dos acciones de who.sh y la acumulación del historial
Ejecutar who.shAñadir una línea dehora a run.log>> añade al final,no sobrescribeMostrar todas laslíneas de run.logEjecutarlouna vez másrun.log crece a2 y luego 3 líneasEl historialse acumuladate >> run.logcat run.log./who.sh
Una sola ejecución provoca el añadido de date >> run.log y la visualización de cat run.log, y cada repetición acumula otra línea en run.log.

Vas a construir una pequeña herramienta que registra en un archivo de log la hora en que lo ejecutaste.

① Abre who.sh con vi who.sh, pulsa i para entrar en modo inserción y escribe #!/bin/sh en la primera línea.

② Añade una línea de comentario que indique para qué sirve el script, añade la hora actual a un archivo de log (>>) y luego escribe un comando para mostrar todo el log.

③ Pulsa Esc, guarda con :wq, luego añade permiso de ejecución al archivo.

④ Ejecuta el script y confirma que la línea registrada aparece en el log.

Linux console
0 / 3 completado(s)
Loading Linux Terminal...
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Qué indica el #!/bin/sh de la primera línea de un script de shell?

Pregunta 2¿Qué comando añade permiso de ejecución a un script que creaste?

Pregunta 3¿Cuál es la forma de ejecutar hello.sh en el directorio actual?