Cómo ejecutar comandos desde dentro de un script de shell

How Execute Commands From Within Shell Script



En bash, ejecutar comandos desde un script de shell puede ser un poco intimidante al principio y puede requerir un acto de fe. Después de todo, los comandos ejecutados dentro de un script bash no son interactivos. Aquí sentaremos las bases para ejecutar comandos desde dentro de un script de shell respondiendo las siguientes preguntas sobre los comandos: ¿De dónde provienen? ¿Qué son? ¿Cómo los usamos en un guión?

¿De dónde vienen los comandos?

Los comandos en bash provienen de cualquiera de las siguientes categorías:







Bash sí mismo (ver incorporados)

Bash viene con su propio conjunto de comandos para permitir el acceso a sus funciones integradas, como declarar matrices, leer líneas de un archivo y otras funciones integradas en bash. Llamamos comandos de esta categoría, comandos integrados de bash, o integrados para abreviar.



Ejecutables en su entorno (ver comandos externos)

Por defecto, bash heredará determinadas variables por defecto. Esto se observa en el caso de la variable PATH, incluidas las ubicaciones de los ejecutables a los que se hace referencia como comandos externos en bash. Es decir, si el rizo comando está en su ruta, puede ejecutarse desde dentro de un script bash de la misma manera que en el modo interactivo. Llamamos comandos de esta categoría, comandos externos o comandos para abreviar.



Función definida por el usuario (ver funciones)

Antes de ejecutar comandos externos e incorporados, bash comprueba si una función está definida. Si es así, la función se ejecuta como un comando. Si no es así, sigue el orden de precedencia de los comandos. Para ejecutar una función definida fuera de un script, deben declararse con el atributo -x; de lo contrario, pueden incluirse utilizando el. Mando. Llamamos a los comandos de esta categoría funciones definidas por el usuario o funciones para abreviar.





Que son los comandos

Un comando es cualquier palabra que se tratará como un único punto de entrada de un programa dentro del entorno de shell. En el caso de que se ejecute el comando, el comando en sí y los argumentos opcionales se pasan como parámetros posicionales, $ {0}, $ {1}, $ {2},… El parámetro posicional cero ($ {0}) designa el comando en sí mismo y no se modifica en contexto. Es decir, a diferencia de los parámetros posicionales en funciones, $ {1}, $ {2},… que pueden cambiar según el contexto, $ {0} no cambia entre llamadas a funciones.

El alcance de los comandos depende de la ubicación de la declaración y los atributos asignados como globales, integrados en bash o locales en su programa bash.



Aquí hay una lista de tipos de comandos que debe conocer.

Comandos integrados

Estos son ciudadanos de primera clase del universo bash, incluidos caracteres como '.' ':' '[' ']' Y palabras reservadas como declare in bash. Usted cuenta con estos comandos, contenidos en la lista de comandos integrados de bash, que estarán disponibles para usar dentro de su script bash.

Dependiendo de la designación y el número de versión de su intérprete de bash, es posible que algunos comandos no estén disponibles.

Comandos externos

Los comandos externos son ejecutables accesibles fuera de un script bash como curl. A diferencia de las funciones, los comandos externos no se almacenan como variables.

Cuanto menor sea la precedencia de un tipo de comando, más tarde se podrá interpretar el comando. Los comandos externos tienen el orden de precedencia más bajo en bash. Es decir, antes de ejecutar un comando externo, el intérprete bash, buscará funciones, luego integraciones y finalmente tratará de ver si un comando existe externamente. Si no es así, debería ver el siguiente error.

bash: comando desconocido:mandoextraviado

En un script bash, las funciones pueden anular el comportamiento de un comando externo si comparten el mismo nombre, como hemos visto anteriormente en los ejemplos de curl bash. A continuación, se muestra un ejemplo de un comando externo personalizado que utiliza una función.

rizo() {
mando $ {FUNCNAME}...
}

Esto funciona porque las funciones tienen mayor precedencia que los comandos externos e incluso las funciones integradas de bash. La limitación son los caracteres permitidos en el nombre de una función.

Tenga en cuenta que el ejemplo anterior se puede lograr utilizando un alias de la siguiente manera.

alias rizo=’
{
rizo ...
}

En el caso de los alias, el tipo de comando puede diferir dependiendo del contexto en ejecución, mientras que en el caso de los comandos externos personalizados que usan el método de función, el punto de entrada es siempre una función.

Funciones

Las funciones gobiernan en bash. Antes de mirar los comandos internos y externos, bash comprueba si una función definida por el nombre de una función candidata, la primera palabra que aparece en una línea o después de; carácter que designa el final de una línea de comando. La única excepción son las variables bash escritas en mayúsculas como $ {FUNCNAME}.

alias() { FUNCNAME= asdf;echo ${@,,};}
alias rizo='TEST CURL ALIAS' # ?

Comandos simples

Los comandos simples se definen en las páginas de manual de bash como una palabra seguida de argumentos opcionales. En contexto, un comando simple puede ser un comando interno, externo o una función.

Cómo ejecutar comandos desde dentro de un script bash

Ahora que sabemos qué tipos de comandos están disponibles, podemos expandirnos a cómo usarlos en sus scripts. Primero, necesitaremos saber cómo funciona la precedencia de comandos en bash.

A continuación, se muestran algunas formas de controlar la precedencia en un script bash.

Deja que bash decida

command_name

En su mayor parte, especialmente al principio, simplemente dejamos que bash decida qué comando usar. Sin embargo, hay casos en los que bash no interpreta correctamente su intención. Tal es el caso cuando los nombres de funciones y los comandos externos o incorporados se superponen.

Ejecutar un comando externo

mandocommand_name

Suponga que hay un comando externo command_name que está disponible en modo interactivo y desea usarlo en un script bash. Podemos decirle explícitamente a bash que command_name es un comando externo usando el comando incorporado.

Ejemplos de comandos externos

Ejemplos de comandos externos suponiendo que se instalen los siguientes:

expediente
ir
figlet
Ejemplo: obtener el tipo de archivo y la información
{ # obtener el tipo de archivo y la información
expediente $ {infile} # (1,2)
}
# (1) comando, archivo
# (2) infile = {Ruta al archivo}
Ejemplo: Stage modificado y archivos nuevos en git
{ # archivos de escenario en git
git agregar.# (1)
}
# (1) comando, git
Ejemplo: crear arte ascii usando figlet
{ # crear arte ascii
figlet$ {mensaje} # (1,2)
}
# (1) comando, figlet
# (2) message = {Mensaje para mostrar como arte ascii}

Ejecuta un comando incorporado

incorporadocommand_name

Suponga que command_name es uno de los comandos definidos como incorporado en bash. Para hacerle saber a bash que queremos ejecutar command_name como una función incorporada, usamos la función incorporada.

Ejemplos de comandos integrados
Ejemplo: ¿cuántas incorporaciones?
incorporado{,}{,,}{,,,} # ¿cuántas incorporaciones?
Ejemplo: declaración fantasma
{
declare() { echoUPS!;}
declare–Xfdeclare # ?
}

Conclusión

Es bastante fácil ejecutar un comando desde un script de shell bash. Hay tres tipos de comandos principales. Saber cómo se interpretan los comandos simples en bash puede mejorar el control sobre qué tipo de comando se ejecuta en tiempo de ejecución.