La estructura básica de un script en Linux es la siguiente
#!/bin/bash
# Este es nuestro primer programa
echo "Hello world"
echo
que sirve para imprimir texto en la pantalla.En los sistemas Linux existen varios editores de texto de linea de comandos, uno de ellos es nano
Para editar un archivo en nano:
sudo nano nombre_archivo
sudo nano Hello_World.sh
Control
+ o
y pulsamos Enter
Control
+ x
En la parte inferior de la ventana, se encuentra una lista de los atajos de comandos más básicos para usar con el editor Nano.
^
= Control
M-
= Alt
(“Meta” key)^O
^X
M-U
M-E
^C
^W
^\
A
^W
M-R
^\
M-R
^K
M-6
^U
M-A
M-}
M-{
TAB
M-\
M-/
^A
^E
DEL
Gedit es un editor de texto inluido por defecto en Ubuntu (y en otras distribuciones de LInux)
gedit Hello_World.sh
Otra posibilidad es instalar el editor en entorno gráfico Visual Studio Code Se puede descargar desde: https://code.visualstudio.com/download.
Las instrucciones de la instalación se Visual Studio Code en Ubuntu pueden ver en: https://ubunlog.com/visual-studio-code-editor-codigo-abierto-ubuntu-20-04/
Para ejecutar un script, primero tenemos que estar seguros que tenga permisos de ejecución.
Le damos permisos de ejecución: chmod +x task.sh
Recuerda que para dar todos los permisos a un archivo: chmod 777 Hello_World.sh
. Recuerda que otorgar el permiso 777 no es recomendable en entornos en producción.
sudo sh ./Hello_World.sh
.::
Si estamos como root
sh ./Hello_World.sh
Bash es una ampliación de sh, es posible Por lo tanto algunas construcciones/funciones que funcionan en bash puede que no funcionen en sh mientras que todo lo que funciona en sh debería funcionar en bash.
bash ./Hello_World.sh
En programación, una variable es un espacio de almacenamiento con un nombre simbólico (identificador) que se utiliza para contener y representar un valor o información modificable durante la ejecución de un programa.
Cada variable tiene un tipo de datos que define la naturaleza del valor que puede almacenar, como enteros, flotantes, cadenas de texto, entre otros. La capacidad de cambiar el valor de una variable a lo largo del programa proporciona flexibilidad y permite la adaptación del software a diferentes situaciones y condiciones.
Las variables se asignan con “=” sin espacios entre el nombre de la variable.
MI_VARIABLE="tiene un valor"
la_2da_variable="tiene otro valor"
mi_variable="es distinta a MI_VARIABLE"
numerica=8
numerica="me arrepenti, ahora es un string"
array=(1 2 3 4)
variable.sh
#!/bin/bash
# Variable.sh
Variable1="Alex"
Edad=18
echo "El profesor" $Variable1 "No tiene" $Edad "años"
Salida:
root@alexlopez-virtual-machine:/home/test# sh ./variable.sh
El profesor Alex No tiene 18 años
Los scripts pueden recibir parámetros al momento de ejecutarlos. Para acceder a estos parámetros, existe un conjunto de variables especiales:
$0 es el nombre del script tal como se lo invocó
$1 a $9 son los parámetros en el orden que se los recibió, del primero al noveno
$* son todos los parámetros que recibió el script
$# es la cantidad de parámetros que recibió el script
echo "Este script fue invocado como: $0"
echo "El primer parámetro recibido fue: $1"
echo "El segundo parámetro recibido fue: $2"
echo "El tercer parámetro recibido fue: $3"
echo "El cuarto parámetro recibido fue: $4"
echo "El quinto parámetro recibido fue: $5"
echo "El sexto parámetro recibido fue: $6"
echo "El séptimo parámetro recibido fue: $7"
echo "El octavo parámetro recibido fue: $8"
echo "El noveno parámetro recibido fue: $9"
echo "Todos los parámetros recibidos fueron: $*"
echo "El script recibió $# parámetros"
parametros.sh
#! /bin/bash
#parametros.sh. Le pasamos dos parametros e imprime el que esta en la posicion 1 y 2
echo "Hola" $1;
echo "Hola" $2;
echo "Nombre del fichero:" $0;
echo "Numero de parametros": $#;
echo "Todos los parametros menos el 0": $*;
En la ejecución del script ‘parametros.sh’ le pasamos el parámetro $1=Juan
y el $2=Luis
A veces es necesario pasar valores por teclado y asignarlos a una variable. Un ejemplo donde se suele hacer es en los scripts que contienen puntos de menú. Para almacenar una entrada por teclado se usa el comando read
.
#!/bin/bash
#Ejemplo #2: Script que muestra como asignar valores a variables en forma interactiva por el usuario, uso de la funcion read.
#pedir el dato al usuario
echo 'Introduzca un valor para la variable var1:'
#leer el dato del teclado y guardarlo en la variable de usuario var1
read var1
#Mostrar el valor de la variable de usuario
echo $var1
En esta sección, vamos a aprender algunos conceptos básicos de las comparaciones de shell de bash numérico y de cadena. Usando comparaciones, podemos comparar cadenas (palabras, oraciones) o números enteros sin procesar o como variables. La siguiente tabla enumera operadores de comparación rudimentarios para números y cadenas:
Descripción | Comparación numérica | Comparación de cadenas |
---|---|---|
Ejemplo de comparación de shell: | [100 -eq 50]; echo $? | ["GNU" = "UNIX"]; echo $? |
menos que | -lt | < |
mas grande que | -gt | > |
igual | -eq | = |
no es igual | -ne | ! = |
menor o igual | -le | N / A |
mayor o igual | -ge | N / A |
#!/bin/bash
if [ "$a" -eq "$b" ]; then
echo "\$a es IGUAL que \$b"
fi
if [ "$a" -ne "$b" ]; then
echo "\$a NO ES IGUAL que \$b"
fi
if [ "$a" -gt "$b" ]; then
echo "\$a es MAYOR que \$b"
fi
if [ "$a" -lt "$b" ]; then
echo "\$a es MENOR que \$b"
fi
if [ "$a" -ge "$b" ]; then
echo "\$a es MAYOR O IGUAL que \$b"
fi
if [ "$a" -le "$b" ]; then
echo "\$a es MENOR O IGUAL que \$b"
fi
#!bin/bash
echo "Ingresa tu edad: "
read AGE
if ["$AGE" -lt 20] || ["$AGE" -ge 50]; then
echo "No esta en el rango 20-50.";
elif ["$AGE" -ge 20 ] && ["$AGE" -lt 30]; then
echo "Estas en los 20.";
elif ["$AGE" -ge 30] && ["$AGE" -lt 40]; then
echo "Estas en los 30.";
elif ["$AGE" -ge 40] && ["$AGE" -lt 50]; then
echo "Estas en los 40.";
fi
#!/bin/bash
if [ "$a" = "$b" ]; then
echo "\$a es IGUAL que \$b"
fi
if [ "$a" == "$b" ]; then
echo "\$a es IGUAL que \$b"
fi
if [ "$a" != "$b" ]; then
echo "\$a NO ES IGUAL que \$b"
fi
if [ "$a" \> "$b" ]; then
echo "\$a es MAYOR que \$b"
fi
if [ "$a" \< "$b" ]; then
echo "\$a es MENOR que \$b"
fi
if [ -z "$a" ]; then
echo "\$a ES NULO"
fi
if [ -n "$a" ]; then
echo "\$a NO ES NULO"
fi
En Bash, los operadores aritméticos son símbolos que se utilizan para realizar operaciones matemáticas en expresiones numéricas. Algunos de los operadores aritméticos más comunes en Bash son:
Suma (+
): Se utiliza para sumar dos valores.
Resta (-
): Se utiliza para restar el segundo valor del primero.
Multiplicación (*
): Se utiliza para multiplicar dos valores.
División (/
): Se utiliza para dividir el primer valor por el segundo.
Módulo (%
): Devuelve el resto de la división entera del primer valor por el segundo.
Incremento (++
): Aumenta el valor de una variable en uno.
Decremento (--
): Reduce el valor de una variable en uno.
En shell script, puedes realizar operaciones aritméticas utilizando varias técnicas.
$(( ))
La forma más común de realizar operaciones aritméticas en Bash es mediante la expresión $(( ))
. Dentro de esta expresión, puedes colocar cualquier operación aritmética básica.
Por ejemplo:
resultado=$((5 + 3))
echo "El resultado es $resultado"
suma=$((10 + 5))
resta=$((20 - 8))
multiplicacion=$((4 * 6))
division=$((25 / 5))
modulo=$((10 % 3))
echo "Suma: $suma"
echo "Resta: $resta"
echo "Multiplicación: $multiplicacion"
echo "División: $division"
echo "Módulo: $modulo"
expr
Otra forma de realizar operaciones aritméticas es utilizando el comando expr
.
Por ejemplo:
resultado=`expr 10 + 20`
echo "El resultado es $resultado"
let
También puedes usar el comando let
para realizar operaciones aritméticas.
Por ejemplo:
let resultado=10+5
echo "El resultado es $resultado"
Los scripts se ejecutan línea a línea hasta llegar al final, sin embargo, muchas veces nos interesará modificar ese comportamiento de manera que el programa pueda responder de un modo u otro dependiendo de las cirscunstancias o pueda repetir trozos de código.
Los condicionales en Bash se utilizan para ejecutar bloques de código basados en el resultado de una expresión condicional.
Su forma más sencilla es:
if CONDICION; then
comandos
fi
Si la CONDICION es verdadera, ejecuta los comandos especificados, si es falsa, no hace nada.
A esto le podemos añadir que ejecute otras instrucción únicamente si la condición es falsa:
if CONDICION; then
comandos
else
otros comandos
fi
Y por último podemos encadenar distintas condiciones:
if CONDICION; then
comandos
elif CONDICION; then
otros comandos
else
otros comandos distintos
fi
Ejemplo
# Definir una variable
edad=20
# Condicional if-else
if [ $edad -ge 18 ]; then
echo "Eres mayor de edad."
else
echo "Eres menor de edad."
fi
En el ejemplo anterior, se evalúa si la variable edad es mayor o igual a 18. Si es verdadero, se imprime “Eres mayor de edad.”; de lo contrario, se imprime “Eres menor de edad.”.
La sentencia case ejecutará unas instrucciones u otras en función del valor que encuentre en una variable o expresión. Es útil cuando la cantidad de valores a considerar es elevada ya que es una estructura muy legible y fácil de interpretar. En esta ocasión valor NO es un únicamente verdadero o falso, sino que contiene un dato y en función de él ejecutaremos una líneas u otras.
case valor in
exp1)
...
ultimaorden1;;
exp2)
...
ultimaorden2;;
expN)
...
ultimaordenN;;
esac
La ultima orden de cada bloque termina con doble punto y coma para indicar que termina el “CASE”
Ejemplo
case $1 in
"rm")
echo "has elegido el comando borrar";;
"cp")
echo "has elegido el comando copiar";;
"ls")
echo "has elegido el comando listar";;
esac
for VARIABLE in SERIE; do
bloque de comandos
done
Ejemplos
[!NOTE]
Los tres siguientes ejemplos de bucle for son equivalentes. Itera sobre los números del 1 al 5 e imprime el mensaje “Iteración x” en cada iteración.
# Bucle for para iterar sobre una lista de elementos
for i in {1..5}; do
echo "Iteración $i"
done
for i in 1 2 3 4 5; do
echo "Iteración $i"
done
for i in $(seq 1 5); do
echo "Iteración $i"
done
Ejemplo con palabras
for palabra in uno dos tres cuatro cinco; do
echo $palabra
done
De forma similar al bucle for usado en C generamos un bucle for que estará iterando hasta que la variable que inicialicemos ( en el ejemplo ‘$i’) alcance un determinado valor i = 100. Es util si queremos realizar una accion un numero determinado de veces.
for ((inicializacion; condicion; incremento)); do
bloque de sentencias
done
Ejemplo
for ((i = 0 ; i < 100 ; i++)); do
echo $i
done
while [ condición ]; do
[COMANDOS]
done
Ejemplo
# Bucle while para repetir una acción mientras se cumpla una condición
contador=0
while [ $contador -lt 5 ]; do
echo "El contador es: $contador"
((contador++))
done
En este ejemplo, se ejecuta un bucle while que incrementa el contador en cada iteración y muestra su valor hasta que el contador sea menor que 5.
Los arrays son una estructura de datos que nos permite almacenar múltiples valores en una sola variable. En shell script, los arrays pueden contener números, cadenas de texto u otros datos.
Para declarar un array en shell script, utilizamos la siguiente sintaxis:
nombre_array=(valor1 valor2 valor3 ...)
Por ejemplo:
nombres=("Juan" "María" "Carlos" "Luisa")
edades=(20 25 30 35)
Para acceder a los elementos de un array, utilizamos su índice entre corchetes [ ]. Los índices en shell script comienzan desde 0.
Acceder al primer elemento del array nombres
echo ${nombres[0]}
Acceder al segundo elemento del array edades
echo ${edades[1]}
Acceso a varios elementos del array
digito1=${numero:0:1}
dosprimerosdigitos=${numero:0:2}
tresdigitos=${numero:1:3}
Podemos obtener la longitud de un array utilizando la expresión
${#nombre_array[@]}.
Obtener la longitud del array nombres
echo "La longitud del array nombres es: ${#nombres[@]}"
Podemos iterar a través de un array utilizando un bucle for.
for nombre in "${nombres[@]}"
do
echo "Nombre: $nombre"
done
Podemos modificar un elemento del array asignándole un nuevo valor.
edades[1]=28
Añadir Elementos Podemos añadir elementos a un array utilizando el operador +=.
nombres+=("Ana")
Para eliminar un elemento de un array, podemos utilizar la palabra clave unset.
unset edades[1]