Hay dos formas de ejecutar un script de shell en Linux. Puedes usar:
bash script.sh
O puede ejecutar el script de shell como este:
./script.sh
Eso puede ser simple, pero no explica mucho. No se preocupe, haré las explicaciones necesarias con ejemplos para que comprenda por qué se usa una sintaxis en particular en el formato dado mientras se ejecuta un script de shell.
Voy a usar este script de shell de una línea para hacer las cosas lo más sencillas posible:
[email protected]:~/Scripts$ cat hello.sh
echo "Hello World!"
Método 1: ejecutar un script de shell pasando el archivo como argumento al shell
El primer método implica pasar el nombre del archivo de secuencia de comandos como argumento al shell.
Teniendo en cuenta que bash es el shell predeterminado, puede ejecutar un script como este:
bash hello.sh
¿Conoce la ventaja de este enfoque? Su secuencia de comandos no necesita tener el permiso de ejecución. Muy útil para tareas rápidas y sencillas.
Ejecución de un script de Shell Linux
Si aún no está familiarizado, le aconsejo que lea mi guía detallada sobre permisos de archivos en Linux.
Tenga en cuenta que debe ser un script de shell que pase como argumento. Un script de shell se compone de comandos. Si usa un archivo de texto normal, se quejará de los comandos incorrectos.
Ejecución de un archivo de texto como secuencia de comandos
En este enfoque, especificó explícitamente que desea usar bash como intérprete para el guión.
Shell es solo un programa y bash es una implementación de eso. Hay otros programas de shells como ksh, zsh, etc. Si tiene otros shells instalados, puede usarlos también en lugar de bash.
Para example, Instalé zsh y lo usé para ejecutar el mismo script:
Ejecute el script de Shell con Zsh .ugb-4037db6-wrapper.ugb-container__wrapper {border-radius: 0px! Important; padding-top: 0! Important; padding-bottom: 0! Important; background-color: # f1f1f1! Important}. ugb-4037db6-wrapper> .ugb-container__side {padding-top: 35px! important; padding-bottom: 35px! important} .ugb-4037db6-wrapper.ugb-container__wrapper: before {background-color: # f1f1f1! important}. ugb-4037db6-content-wrapper> h1, .ugb-4037db6-content-wrapper> h2, .ugb-4037db6-content-wrapper> h3, .ugb-4037db6-content-wrapper> h4, .ugb-4037db6-content- wrapper> h5, .ugb-4037db6-content-wrapper> h6 {color: # 222222} .ugb-4037db6-content-wrapper> p, .ugb-4037db6-content-wrapper> ol li, .ugb-4037db6-content- envoltorio> ul li {color: # 222222}
Lectura recomendada:
.ugb-16406c5 .ugb-blog-posts__featured-image {border-radius: 0px! important} .ugb-16406c5 .ugb-blog-posts__title a {color: # 000000! important} .ugb-16406c5 .ugb-blog-posts__title a: hover {color: # 00b6ba! important}
Cómo ejecutar varios comandos de Linux a la vez en la terminal de Linux [Essential Beginners Tip]
Método 2: ejecutar el script de shell especificando su ruta
El otro método para ejecutar un script de shell es proporcionando su ruta. Pero para que eso sea posible, su archivo debe ser ejecutable. De lo contrario, tendrá el error de “permiso denegado” cuando intente ejecutar el script.
Entonces, primero debe asegurarse de que su secuencia de comandos tenga el permiso de ejecución. Usted puede usa el comando chmod para darse este permiso así:
chmod u+x script.sh
Una vez que su script sea ejecutable, todo lo que necesita hacer es escribir el nombre del archivo junto con su ruta absoluta o relativa. La mayoría de las veces estás en el mismo directorio, así que utilízalo así:
./script.sh
Si no está en el mismo directorio que su secuencia de comandos, puede especificar la ruta absoluta o relativa a la secuencia de comandos:
Ejecución de la secuencia de comandos de Shell en otro directorio
Eso ./ antes del script es importante (cuando estás en el mismo directorio que el script)
¿Por qué no puede usar el nombre del script cuando está en el mismo directorio? Esto se debe a que sus sistemas Linux buscan que los ejecutables se ejecuten en algunos directorios seleccionados que se especifican en la variable PATH.
Aquí está el valor de la variable PATH para mi sistema:
[email protected]:~$ echo $PATH
/home/abhishek/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Esto significa que cualquier archivo con permisos de ejecución en uno de los siguientes directorios se puede ejecutar desde cualquier lugar del sistema:
- /home/abhishek/.local/bin
- / usr / local / sbin
- / usr / local / bin
- / usr / sbin
- / usr / bin
- / sbin
- /compartimiento
- / usr / juegos
- / usr / local / games
- / snap / bin
Los archivos binarios o ejecutables para comandos de Linux como ls, cat, etc. se encuentran en uno de esos directorios. Es por eso que puede ejecutar estos comandos desde cualquier lugar de su sistema con solo usar sus nombres. Vea, el comando ls se encuentra en el directorio / usr / bin.
Cuando especifica el script SIN la ruta absoluta o relativa, no puede encontrarlo en los directorios mencionados en la variable PATH.
¿Por qué la mayoría de los scripts de shell contienen #! /compartimiento/bash al comienzo de los scripts de shell?
Recuerde cómo mencioné que shell es solo un programa y hay diferentes implementaciones de shells.
Cuando usa el #! /compartimiento/bash, está especificando que el script se ejecutará con bash como intérprete. Si no hace eso y ejecuta un script en forma ./script.sh, generalmente se ejecuta con cualquier shell que esté ejecutando.
¿Importa? Podria. Vea, la mayor parte de la sintaxis de shell es común en todo tipo de shell, pero algunas pueden diferir.
Para example, el comportamiento de la matriz es diferente en bash y conchas zsh. En zsh, el índice de la matriz comienza en 1 en lugar de 0.
Bash Vs Zsh
Utilizando #! /compartimiento/bash indica que el guión es bash script de shell y debe ejecutarse con bash como intérprete independientemente del shell que se esté utilizando en el sistema. Si está utilizando una sintaxis específica de zsh, puede indicar que es un script zsh agregando #! / bin / zsh como la primera línea del script.
El espacio entre #! /compartimiento/bash no importa. También puede usar #! / Bin /bash.
¿Fue de ayuda?
Espero que este artículo se agregue a sus conocimientos sobre Linux. Si aún tiene preguntas o sugerencias, deje un comentario.
Los usuarios expertos aún pueden criticar este artículo sobre las cosas que me perdí. Pero el problema con estos temas para principiantes es que no es fácil encontrar el equilibrio adecuado de información y evitar tener demasiados o muy pocos detalles.
Si estas interesado en aprender bash guión, tenemos un toda la serie Bash Beginner en nuestro sitio web centrado en administradores de sistemas Manual de Linux. Si lo desea, también puede compre el libro electrónico con ejercicios adicionales para admitir el manual de Linux.