GNU/Linux >> Tutoriales Linux >  >> Linux

Bash secuencias de comandos (I)

Este es el primer artículo de una serie centrada en el scripting de Gnu Bash. No es un curso completo sobre programación bash, pero al final deberías aprender una o dos cosas. Quiero decir, cosas útiles que te ayudarán a hacer tu vida más fácil.

La pereza es la clave del éxito

A veces necesito ejecutar el comando 1, seguido del comando 2, luego el comando 3 y finalmente el comando 4. Después de un tiempo necesito repetir esa secuencia de comandos. Pero como soy muy inteligente, revisé el historial de comandos con la tecla de flecha hacia arriba para no escribir todo de nuevo.

Luego, después de otro tiempo, tengo que volver a hacerlo, y sé que tendré que volver a hacerlo varias veces en el futuro. Por ejemplo, todos los días, inicia su computadora, inicia sesión en su Linux basado en Debian y busca actualizaciones de paquetes:

# apt-get update
(...)
# apt-get upgrade
(...)
# apt-get dist-upgrade

En lugar de escribir esos 52 caracteres cada vez, podría ponerlos en un script como este:

#!/bin/bash
#this is not a Hello world
apt-get update
apt-get upgrade
apt-get dist-upgrade

Puede guardar este script como 'up.sh' y, a la mañana siguiente, después de iniciar sesión, simplemente ejecute:./up.sh . Así de fácil has ahorrado 44 pulsaciones de teclas, ¿te estás volviendo perezoso o qué?

No, no lo estamos, si intenta ejecutar 'tal cual', obtendrá un hermoso Error de permiso denegado . Eso es porque nunca le he dicho que establezca el permiso de ejecución:

# chmod +x up.sh

Más tarde te mostraré cómo ser aún más perezoso.

Además de los comandos en las últimas líneas, notó el carácter de número (#) en las dos primeras líneas. La primera línea se llama shebang y le dice al sistema qué intérprete usa para ejecutar los comandos en el script.

El segundo es solo un comentario y puedes ponerlo en todas partes:lo que viene detrás de ese letrero será ignorado. Por ejemplo:

# this is a comment
command1 # this also is a comment. Should explain what that command do
#command2. # This was command... but as was commented out, bash would ignore it

Es importante (al menos para mí) agregar al menos un par de comentarios para recordar qué hace el script y por qué. También, en guiones grandes, para agregar comentarios para explicar bloques, secciones o partes del guión. Los comentarios lo ayudarán cuando regrese a su guión algunos meses, semanas o incluso días después.

Cada vez más vago

No hay necesidad de escribir cada vez que iniciamos sesión en nuestros sistemas. Podemos hacer que la computadora ejecute ese script por nosotros. Puede agregar la línea “./up.sh ” en uno de los siguientes lugares:

  • .bashrc . Esto ejecutará el script cada vez que inicie un shell que no sea de inicio de sesión (es decir, el terminal incluido en su escritorio, como xterm)
  • .bash_profile Esto es para el shell de inicio de sesión, por ejemplo, cuando ingresa su usuario y contraseña en la consola o inicia sesión en su sistema a través de ssh.
  • .xinitrc como .bashrc pero para sesiones gráficas. Probablemente esté utilizando un escritorio moderno con sus propias herramientas para iniciar automáticamente las aplicaciones, utilícelas.
  • una entrada en su archivo crontab, por lo que se ejecuta periódicamente.

Variables

Necesitamos "algo" para almacenar valores, por ejemplo, la entrada del usuario, un parámetro de la línea de comando. Este 'algo' es una variable. Por cierto, asumo que ya sabes qué es una variable.

Para declarar una variable, puede

  • asigne un valor a un nombre de variable. Ejemplo:x=1
  • ingrese el valor del usuario con el comando de lectura:leer x
  • un parámetro de la línea de comandos. Volveré a esto muy pronto
  • hay otras formas de definir una variable que veremos más adelante

Para 'llamar' a una variable, escriba el signo de dólar seguido del nombre de la variable. Por ejemplo si queremos imprimir en pantalla el valor de la variable $x:

echo "x value: $x"
echo "Type y vaue:"
read y
echo "You typed: $y"

Los parámetros de la línea de comandos se almacenan en variables numeradas. Por ejemplo, use el primer argumento, llame a la variable $1. Para el segundo, llama $2. Y así. La variable $0 almacena el nombre del archivo de script. En mi primer ejemplo de not-a-hello-world, el valor de $0 es "up.sh".

Matrices

Las matrices se definen de la misma manera, pero con los valores encerrados entre corchetes. Así:

array=(uno dos tres)

Más adelante puede agregar más valores a la matriz con el índice entre corchetes:

array[3]=cuatro

Puede 'llamar' a un elemento de matriz con corchetes para el nombre de la matriz y corchetes para la posición del elemento (comenzando con 0):

$ echo ${array[0]}
uno

Si no usa el corchete, bash imprimirá una [posición del elemento] literal, por ejemplo:

$ echo $array[0]
uno[0]

Puede llamar a toda la matriz con un @ como índice como este:

$ echo ${array[@]}
uno dos tres cuatro

Finalmente puedes obtener el número de elementos de un arreglo con el signo almohadilla (el mismo que he dicho antes es para comentarios) así:

echo ${#array[@]}
4

Hay muchas otras cosas que podemos hacer con arreglos y otros tipos de arreglos, como arreglos asociativos. Pero esto es suficiente por hoy.

Estén atentos

Hasta ahora no mostré nada muy "woaaah “. Ni siquiera hay una sola captura de pantalla en este artículo. Pero mi intención hacia el final de esta serie -tal vez tres o más artículos- es dar herramientas para hacer algo útil. No sé si te convertirás en un gurú de scripting bash, pero puedes intentarlo 😉

En el próximo, cubriré algunas estructuras de control, canalizaciones y redirección. Mientras tanto, puede consultar la página de manual de bash, pero al menos para mí es un poco confuso


Linux
  1. Bash Dynamic (variable) ¿Nombres de variables?

  2. Cómo comparar cadenas en Bash Shell Scripting

  3. Alias ​​con variable en bash

  4. ¿Cómo eliminar la variable de solo lectura en bash?

  5. bash - coincidencia de variables que no distingue entre mayúsculas y minúsculas

Bash Scripting – Manipulación de cadenas

Bash Scripting – Declaración de caso

Script Bash (II)

Script Bash (III)

Cómo establecer la variable de entorno en Bash

Bash Beginner Series #2:Comprender las variables en Bash Shell Scripting