Scripts de Bash: el comienzo

Scripts de Bash: el comienzo
Scripts de Bash, parte 2: bucles
Scripts Bash, Parte 3: Opciones y conmutadores de la línea de comandos
Scripts Bash Parte 4: Entrada y salida
Scripts de Bash, Parte 5: Señales, Tareas en segundo plano, Gestión de scripts
Bash Scripts, Parte 6: Funciones y desarrollo de bibliotecas
Bash Scripts, Parte 7: sed y procesamiento de textos
Scripts Bash, parte 8: lenguaje de procesamiento de datos awk
Scripts Bash Parte 9: Expresiones regulares
Bash Scripts Parte 10: Ejemplos prácticos
Scripts Bash, parte 11: expectativa y automatización de utilidades interactivas

Hoy hablaremos sobre scripts bash. Este - secuencias de comandos de línea de comando, escrito para el shell bash. Hay otros shells como zsh, tcsh, ksh, pero nos centraremos en bash. Este material está destinado a todos, la única condición es la capacidad de trabajar en línea de comando Linux.

Scripts de Bash: el comienzo

Los scripts de línea de comandos son colecciones de los mismos comandos que se pueden ingresar desde el teclado, recopilarse en archivos y combinarse con un propósito común. En este caso, los resultados del trabajo de los equipos pueden tener un valor independiente o servir como datos de entrada para otros equipos. Los scripts son una forma poderosa de automatizar acciones realizadas con frecuencia.

Scripts de Bash: el comienzo

Entonces, si hablamos de la línea de comando, te permite ejecutar varios comandos a la vez ingresándolos separados por punto y coma:

pwd ; whoami

De hecho, si probó esto en su terminal, su primer script bash que involucra dos comandos ya estará escrito. Funciona así. equipo primero pwd muestra información sobre el directorio de trabajo actual, luego el comando whoamimuestra información sobre el usuario con el que inició sesión.

Con este enfoque, puede combinar tantos comandos como desee en una línea, el único límite es la cantidad máxima de argumentos que se pueden pasar al programa. Puede definir este límite usando el siguiente comando:

getconf ARG_MAX

La línea de comandos es una gran herramienta, pero debes ingresar comandos cada vez que los necesites. ¿Qué pasaría si escribiéramos un conjunto de comandos en un archivo y simplemente llamáramos a ese archivo para ejecutarlos? De hecho, el archivo del que estamos hablando se llama script de línea de comando.

Cómo funcionan los scripts de bash

Crea un archivo vacío usando el comando touch. Su primera línea debe indicar qué shell vamos a utilizar. Estamos interesados ​​en bash, por lo que la primera línea del archivo será:

#!/bin/bash

Otras líneas de este archivo utilizan el símbolo de almohadilla para indicar comentarios que el shell no procesa. Sin embargo, la primera línea es un caso especial, hay un hash seguido de un signo de exclamación (esta secuencia se llama el asunto) y el camino hacia bash, indica al sistema que el script fue creado específicamente para bash.

Los comandos de Shell están separados por un avance de línea, los comentarios están separados por un signo de almohadilla. Esto es lo que parece:

#!/bin/bash
# This is a comment
pwd
whoami

Aquí, al igual que en la línea de comando, puede escribir comandos en una línea, separados por punto y coma. Sin embargo, si escribe los comandos en líneas diferentes, el archivo será más fácil de leer. En cualquier caso, el shell los procesará.

Configuración de permisos de archivos de script

Guarda el archivo dándole un nombre. myscript, y el trabajo de creación del script bash está casi terminado. Ahora todo lo que queda es hacer que este archivo sea ejecutable; de ​​lo contrario, si intentas ejecutarlo, encontrarás un error. Permission denied.

Scripts de Bash: el comienzo
Intentar ejecutar un archivo de secuencia de comandos con permisos configurados incorrectamente

Hagamos el archivo ejecutable:

chmod +x ./myscript

Ahora intentemos ejecutarlo:

./myscript

Después de configurar los permisos, todo funciona como debería.

Scripts de Bash: el comienzo
Ejecutando exitosamente el script bash

Salida de mensaje

Para enviar texto a la consola de Linux, use el comando echo. Usemos el conocimiento de este hecho y editemos nuestro script, agregando explicaciones a los datos que generan los comandos que ya están en él:

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Esto es lo que sucede después de ejecutar el script actualizado.

Scripts de Bash: el comienzo
Enviar mensajes desde un script

Ahora podemos mostrar notas explicativas usando el comando echo. Si no sabe cómo editar un archivo usando herramientas de Linux o no ha visto el comando antes echo, echa un vistazo a este material.

Usando variables

Las variables le permiten almacenar información en un archivo de script, como los resultados de los comandos, para que otros comandos los utilicen.

No hay nada de malo en ejecutar comandos individuales sin almacenar sus resultados, pero este enfoque tiene capacidades bastante limitadas.

Hay dos tipos de variables que se pueden utilizar en scripts bash:

  • Variables de entorno
  • Variables de usuario

Variables de entorno

A veces, los comandos de shell necesitan funcionar con algunos datos del sistema. A continuación se muestra un ejemplo de cómo mostrar el directorio de inicio del usuario actual:

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Tenga en cuenta que podemos utilizar una variable del sistema. $HOME entre comillas dobles, esto no impedirá que el sistema lo reconozca. Esto es lo que obtienes si ejecutas el escenario anterior.

Scripts de Bash: el comienzo
Usar una variable de entorno en un script

¿Qué sucede si necesita mostrar un signo de dólar en la pantalla? Intentemos esto:

echo "I have $1 in my pocket"

El sistema detectará un signo de dólar en una cadena entre comillas y asumirá que hemos hecho referencia a una variable. El script intentará mostrar el valor de una variable indefinida. $1. Esto no es lo que necesitamos. ¿Qué hacer?

En esta situación, será útil utilizar el carácter de escape, una barra invertida, antes del signo de dólar:

echo "I have $1 in my pocket"

El script ahora generará exactamente lo que se espera.

Scripts de Bash: el comienzo
Usando una secuencia de escape para imprimir un signo de dólar

Variables de usuario

Además de las variables de entorno, los scripts bash le permiten definir y utilizar sus propias variables en el script. Estas variables mantienen un valor hasta que el script completa su ejecución.

Al igual que con las variables del sistema, se puede acceder a las variables del usuario mediante el signo de dólar:
TNW-CUS-FMP: código de promoción para un 10% de descuento en nuestros servicios, disponible para activación dentro de 7 días

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

Esto es lo que sucede después de ejecutar dicho script.

Scripts de Bash: el comienzo
Variables personalizadas en un script

Sustitución de comando

Una de las características más útiles de los scripts bash es la capacidad de extraer información de la salida del comando y asignarla a variables, lo que le permite utilizar esta información en cualquier parte del archivo de script.

Esto se puede hacer de dos maneras.

  • Usando la comilla invertida "`"
  • Por diseño $()

Al utilizar el primer método, tenga cuidado de no incluir comillas simples en lugar de la comilla grave. El comando debe estar encerrado entre dos de estos iconos:

mydir=`pwd`

En el segundo enfoque, lo mismo se escribe así:

mydir=$(pwd)

Y el guión podría terminar luciendo así:

#!/bin/bash
mydir=$(pwd)
echo $mydir

Durante su operación, la salida del comando pwdse guardará en una variable mydir, cuyo contenido, utilizando el comando echo, irá a la consola.

Scripts de Bash: el comienzo
Un script que guarda los resultados de un comando en una variable.

Operaciones matemáticas

Para realizar operaciones matemáticas en un archivo de script, puede utilizar una construcción como $((a+b)):

#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2

Scripts de Bash: el comienzo
Operaciones matemáticas en un guión

constructo de control si-entonces

En algunos escenarios, es necesario controlar el flujo de ejecución del comando. Por ejemplo, si un determinado valor es mayor que cinco, es necesario realizar una acción; en caso contrario, otra. Esto es aplicable en muchas situaciones, y aquí la estructura de control nos ayudará if-then. En su forma más simple se ve así:

if команда
then
команды
fi

Aquí hay un ejemplo práctico:

#!/bin/bash
if pwd
then
echo "It works"
fi

En este caso, si se ejecuta el comando pwdse completará con éxito, el texto "funciona" se mostrará en la consola.

Usemos el conocimiento que tenemos y escribamos un guión más complejo. Digamos que necesitamos encontrar un determinado usuario en /etc/passwd, y si lograste encontrarlo informa que existe.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Esto es lo que sucede después de ejecutar este script.

Scripts de Bash: el comienzo
Búsqueda de usuarios

Aquí usamos el comando grepbuscar un usuario en un archivo /etc/passwd. si el equipo grepdesconocido para usted, su descripción se puede encontrar aquí.

En este ejemplo, si se encuentra al usuario, el script mostrará el mensaje correspondiente. ¿Qué pasa si no se puede encontrar al usuario? En este caso el script simplemente completará la ejecución sin decirnos nada. Nos gustaría que él también nos contara sobre esto, así mejoraremos el código.

constructo de control si-entonces-si no

Para que el programa pueda informar tanto los resultados de una búsqueda exitosa como los fallidos, usaremos la construcción if-then-else. Así es como funciona:

if команда
then
команды
else
команды
fi

Si el primer comando devuelve cero, lo que significa que se ejecutó exitosamente, la condición será verdadera y la ejecución no continuará en la rama. else. De lo contrario, si se devuelve algo distinto de cero, lo que indicaría un error o un resultado falso, los comandos posteriores else.

Escribamos el siguiente script:

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

Su ejecución se fue por el desagüe else.

Scripts de Bash: el comienzo
Ejecutar un script con una construcción if-then-else

Bueno, sigamos adelante y preguntémonos por condiciones más complejas. ¿Qué pasa si necesita verificar no una condición, sino varias? Por ejemplo, si se encuentra el usuario deseado, se debe mostrar un mensaje, si se cumple alguna otra condición, se debe mostrar otro mensaje, y así sucesivamente. En tal situación, las condiciones anidadas nos ayudarán. Se parece a esto:

if команда1
then
команды
elif команда2
then
команды
fi

Si el primer comando devuelve cero, lo que indica que se ejecutó exitosamente, se ejecutarán los comandos del primer bloque. thenDe lo contrario, si la primera condición es falsa y el segundo comando devuelve cero, se ejecutará el segundo bloque de código.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi

En dicho script, puede, por ejemplo, crear un nuevo usuario usando el comando useradd, si la búsqueda no produjo resultados, o hacer algo más útil.

Comparación de números

En los scripts puedes comparar valores numéricos. A continuación se muestra una lista de comandos relevantes.

n1 -eq n2Devuelve verdadero si n1 igual n2.
n1 -ge n2 Devuelve verdadero si n1más o igual n2.
n1 -gt n2Devuelve verdadero si n1 más n2.
n1 -le n2Devuelve verdadero si n1menos o igual n2.
n1 -lt n2Devuelve verdadero si n1 es menor que n2.
n1 -ne n2Devuelve verdadero si n1no igual n2.

Como ejemplo, probemos con uno de los operadores de comparación. Tenga en cuenta que la expresión está entre corchetes.

#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi

Esto es lo que generará este comando.

Scripts de Bash: el comienzo
Comparación de números en guiones.

Valor variable val1mayor que 5, la rama termina ejecutándose thenoperador de comparación y se muestra el mensaje correspondiente en la consola.

Comparación de cadenas

Los scripts también pueden comparar valores de cadena. Los operadores de comparación parecen bastante simples, pero las operaciones de comparación de cadenas tienen ciertas características, que veremos a continuación. Aquí hay una lista de operadores.

str1 = str2 Prueba la igualdad de las cadenas y devuelve verdadero si las cadenas son idénticas.
str1 != str2Devuelve verdadero si las cadenas no son idénticas.
str1 < str2Devuelve verdadero si str1menos que str2.
str1 > str2 Devuelve verdadero si str1mas que str2.
-n str1 Devuelve verdadero si la longitud str1Por encima de cero.
-z str1Devuelve verdadero si la longitud str1es cero.

A continuación se muestra un ejemplo de comparación de cadenas en un script:

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

Como resultado de ejecutar el script, obtenemos lo siguiente.

Scripts de Bash: el comienzo
Comparar cadenas en scripts

Aquí hay una característica de la comparación de cadenas que vale la pena mencionar. Es decir, los operadores ">" y "<" deben tener como carácter de escape una barra invertida; de lo contrario, el script no funcionará correctamente, aunque no aparecerán mensajes de error. El script interpreta el signo ">" como un comando de redirección de salida.

Así es como se ve trabajar con estos operadores en el código:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Aquí están los resultados del guión.

Scripts de Bash: el comienzo
Comparación de cadenas, advertencia dada

Tenga en cuenta que el script, aunque se ejecuta, emite una advertencia:

./myscript: line 5: [: too many arguments

Para deshacernos de esta advertencia, concluimos $val2 entre comillas dobles:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Ahora todo funciona como debería.

Scripts de Bash: el comienzo
Comparación de cadenas

Otra característica de los operadores ">" y "<" es cómo trabajan con caracteres en mayúsculas y minúsculas. Para comprender esta característica, preparemos un archivo de texto con el siguiente contenido:

Likegeeks
likegeeks

Salvémoslo dándole un nombre. myfile, luego ejecute el siguiente comando en la terminal:

sort myfile

Ordenará las líneas del archivo de esta manera:

likegeeks
Likegeeks

Equipo sort, de forma predeterminada, ordena las cadenas en orden ascendente, es decir, la letra minúscula en nuestro ejemplo es más pequeña que la mayúscula. Ahora preparemos un script que comparará las mismas cadenas:

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Si lo ejecuta, resulta que todo es al revés: la letra minúscula ahora es más grande que la mayúscula.

Scripts de Bash: el comienzo
El comando ordenar y comparar cadenas en un archivo de script

En los comandos de comparación, las letras mayúsculas son más pequeñas que las minúsculas. La comparación de cadenas aquí se realiza comparando los códigos ASCII de los caracteres; por lo tanto, el orden de clasificación depende de los códigos de caracteres.

Equipo sort, a su vez, utiliza el orden de clasificación especificado en la configuración de idioma del sistema.

comprobaciones de archivos

Quizás los siguientes comandos se utilicen con mayor frecuencia en scripts bash. Le permiten comprobar diversas condiciones relativas a los archivos. Aquí hay una lista de estos comandos.

-d fileComprueba si un archivo existe y es un directorio.
-e fileComprueba si el archivo existe.
-f file Comprueba si un archivo existe y es un archivo.
-r fileComprueba si el archivo existe y es legible.
-s file ПComprueba si el archivo existe y no está vacío.
-w fileComprueba si el archivo existe y se puede escribir.
-x fileComprueba si el archivo existe y es ejecutable.
file1 -nt file2 Comprueba si es más nuevo. file1que file2.
file1 -ot file2Comprueba si es mayor file1que file2.
-O file Comprueba si el archivo existe y es propiedad del usuario actual.
-G fileComprueba si el archivo existe y si su ID de grupo coincide con el ID de grupo del usuario actual.

Estos comandos, así como muchos otros que se analizan hoy, son fáciles de recordar. Sus nombres, al ser abreviaturas de varias palabras, indican directamente los controles que realizan.

Probemos uno de los comandos en la práctica:

#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi

Este script, para un directorio existente, mostrará su contenido.

Scripts de Bash: el comienzo
Listar el contenido de un directorio

Creemos que usted mismo puede experimentar con los comandos restantes; todos se utilizan según el mismo principio.

resultados

Hoy hablamos sobre cómo empezar a escribir scripts bash y cubrimos algunas cosas básicas. De hecho, el tema de la programación bash es enorme. Este artículo es una traducción de la primera parte de una gran serie de 11 materiales. Si quieres continuar ahora mismo, aquí tienes una lista de los originales de estos materiales. Para mayor comodidad, se incluye aquí la traducción de lo que acaba de leer.

  1. Script Bash paso a paso — Aquí estamos hablando de cómo comenzar a crear scripts bash, se considera el uso de variables, se describen estructuras condicionales, cálculos, comparaciones de números, cadenas y cómo obtener información sobre archivos.
  2. Bash Scripting Parte 2, Bash lo increíble — aquí se revelan las características de trabajar con bucles for y while.
  3. Bash Scripting Parte 3, Parámetros y opciones — este material está dedicado a los parámetros y claves de la línea de comandos que se pueden pasar a los scripts, trabajando con datos que el usuario ingresa y que se pueden leer desde archivos.
  4. Bash Scripting Parte 4, Entrada y salida - aquí estamos hablando de descriptores de archivos y de trabajar con ellos, de entrada, salida, flujos de errores y de redirección de salida.
  5. Bash Scripting Parte 5, Sighals y trabajos — este material está dedicado a las señales de Linux, su procesamiento en scripts y el lanzamiento de scripts según un cronograma.
  6. Bash Scripting Parte 6, Funciones — aquí puede aprender sobre cómo crear y usar funciones en scripts y desarrollar bibliotecas.
  7. Secuencias de comandos Bash, parte 7, uso de sed — este artículo está dedicado a trabajar con el editor de texto de transmisión sed.
  8. Secuencias de comandos Bash, parte 8, uso de awk — este material está dedicado a la programación en el lenguaje de procesamiento de datos awk.
  9. Bash Scripting Parte 9, Expresiones regulares — aquí puedes leer sobre el uso de expresiones regulares en scripts bash.
  10. Bash Scripting Parte 10, Ejemplos prácticos — aquí se presentan técnicas para trabajar con mensajes que se pueden enviar a los usuarios, así como un método para monitorear el disco.
  11. Bash Scripting Parte 11, comando esperar — este material está dedicado a la herramienta Expect, con la que puede automatizar la interacción con utilidades interactivas. En particular, estamos hablando de scripts expect y su interacción con scripts bash y otros programas.

Creemos que una de las características valiosas de esta serie de artículos es que, empezando por los más simples, aptos para usuarios de cualquier nivel, poco a poco va llegando a temas bastante serios, dando a todos la oportunidad de avanzar en la creación de scripts de línea de comandos de Linux. .

¡Queridos lectores! Les pedimos a los gurús de la programación bash que hablen sobre cómo alcanzaron la cima de su dominio, compartan sus secretos y esperamos recibir impresiones de aquellos que acaban de escribir su primer guión.

Scripts de Bash: el comienzo

Solo los usuarios registrados pueden participar en la encuesta. Registrarsepor favor

¿Debería traducir el resto de la serie de artículos?

  • ¡Sí!

  • No, no es necesario

1030 usuarios votaron. 106 usuarios se abstuvieron.

Fuente: habr.com

Añadir un comentario