01-bash-shell.
md 2024-09-06
Scripting usando Bash-shell
Script
Secuencia de comandos
Programa simple
No compilado, Interpretado usando Bash
Son identificados por el sistema a través de encabezados:
#!/bin/bash
Terminal
Se llama prompt al carácter o conjunto de caracteres que se muestran en una línea de comandos para
indicar que se esta a la espera de ordenes
Interfaz gráfica que simula una linea de comandos (Ventana que nos muestra el prompt)
La terminal ALOJA a la Shell
Línea de comandos (shell)
Un programa que toma comandos y los pasa al sistema operativo para procesarlos. (Interpreta los
comandos y le dice al Sistema operativo QUE HACER)
Bourne Shell, Bash Shell, C Shell, Power Shell
La shell es el programa que usa los comandos, los procesa y nos envía los resultados.
Y esto ¿Para qué sirve?
En ocasiones, los comandos independientes de la consola son insuficientes, es necesario utilizar un
conjunto de comandos para realizar una tarea especifica, combinando estos conocimientos y flujo de
eventos con programación para solucionar una tarea determinada.
Variables de entorno
Valores almacenados en la shell que contienen información de la misma shell, del sistema, entre otro tipo de
información importante del equipo.
Ubicación de binarios
Ubicación de carpeta home
etc
Podemos ver las variables de entorno de la siguiente manera:
printenv
1/8
[Link] 2024-09-06
Nos devuelve una lista de las variables de entorno. La sintaxis de una variable de entorno es en mayúsculas,
para imprimir alguna en especifio usamos el comando echo seguido de signo pesos mas la variable.
echo $HOME
Si queremos crear una variable usamos lo siguiente:
export EJEMPLO_VARIABLE=$PATH
En este caso decimos que la EJEMPLO_VARIABLE es igual a la variable PATH.
Crear un Script Bash
Se crea un archivo con la extensión .sh.
Necesita de una cabecera para que el sistema reconozca que es un script bash, es decir el binario de
bash
(Opcional) Luego se pone el autor
(Opcional) Descripción del script
#!/bin/bash
#Author: Juan Mora
#Mi primer Script Shell
echo "Hola Mundo"
En este caso se revisan los permisos sobre el archivo, sino se tienen permisos ejecución no se podra ejecutar
el .sh, una forma de darle permisos de ejecución en cada terna es chmod +x [Link]. Para ejecutarlo se
utiliza ./[Link] donde . hace referencia a la ruta donde esta ubicado.
Otro ejemplo:
#!/bin/bash
#Author: Juan Mora
#Mi primer Script Shell
pwd
cd $HOME
echo "Dirigiendose a $HOME ..."
pwd
Se mueve a la ubicación de $HOME, a su vez va impriendo la posición donde se encuentra.
2/8
[Link] 2024-09-06
Parámetros
#!/bin/bash
#Author: Juan Mora
#Ejemplo de variables y parámetros dinámicos
ubicacion=$(pwd)
echo $ubicacion
Es necesario para comandos usar $(comando) para que lo tome como comando y no texto
Pasandole parámetros
#!/bin/bash
#Author: Juan Mora
#Ejemplo de variables y parámetros dinámicos
ubicacion=$(pwd)
nombre=$1
apellido=$2
echo "Hola mi nombre es $nombre $apellido"
echo "Cantidad de parametros: $*"
echo $ubicacion
De esta manera se impremen los dos primeros valores pasados al script "./script parametro1
parametro2" y saldra "Hola mi nombre es parametro1 parametro2"
Scripts interactivos
Que el programa me pregunte los parámetros para usarlos de manera interactiva...
#!/bin/bash
#Author: Juan Mora
#Ejemplo de variables y parámetros dinámicos
name=""
age=0
read -p "Ingresa tu nombre: " name
read -p "Ingresa tu edad: " age
echo "Hola mi nombre es $name y tengo $age años."
De esta manera se ingresan dos parámetros y estos son recibidos para imprimirlos por pantalla.
3/8
[Link] 2024-09-06
Condicionales
Se puede usar simbolos o usar lo siguiente:
#!/bin/bash
#Author: Juan Mora
#Ejemplo de variables y parámetros dinámicos
name=""
age=0
year=0
read -p "Ingresa tu nombre: " name
read -p "Ingresa tu edad: " age
read -p "Ingresa el año actual: " year
echo "Hola mi nombre es $name y tengo $age años."
echo "=========================================="
if (( $age >= 18 )); then
echo "$name, Eres mayor de edad"
else
echo "$name, No eres mayor de edad"
fi
echo "========================================="
if [ $age -ge 18 ] && [ $year -eq 2022 ]; then
echo "$name, Eres mayor de edad y este año puedes votar"
else
echo "$name, No se cumplen las condiciones para votar"
fi
fi = final if, cuando se añaden mas condiciones se usan los corchetes.
Comparar cadenas de texto
#!/bin/bash
# Author: Juan Mora
# Comparación de texto
4/8
[Link] 2024-09-06
opcion=""
read -p "Ingrese una opción (A-B): " opcion
if [ "$opcion" == "E" ];then
echo "Es igual a E"
else
echo "No son iguales"
fi
Case
#!/bin/bash
# Author: Juan Mora
# Comparación de texto
opcion=""
read -p "Ingrese una opción (A-B): " opcion
if [ "$opcion" == "E" ];then
echo "Es igual a E"
else
echo "No son iguales"
fi
case $opcion in
"A") echo "Ha ingresado la Opción A";;
"B") echo "Ha ingresado la Opción B";;
[C-Z]) echo "Ha ingresado un valor de C a Z";;
"*") echo "Ha ingresado otro valor";;
[C-Z]: dice que va desde C a Z. * significa cualquier otro elemento, este puede funcionar con comillas o
sin comillas depende del *SO*.
Arreglos e Iteraciones
#!/bin/bash
# Author: Juan Mora
# Arrays & Loops
numeros=(1 2 3 4 5 6 7 8)
textos=(juan luis sara alejandra sofia "juan mora")
rangos=({A..Z} {10..20})
echo "===== Imprimir todos los valores ====="
echo "Arreglo de números: ${numeros[*]}"
echo "Arreglo de textos: ${textos[*]}"
5/8
[Link] 2024-09-06
echo "Arreglo de rangos: ${rangos[*]}"
echo "===== Tamaño de los arreglos ====="
echo "El arreglo de números tiene ${#numeros[*]} elementos"
echo "El arreglo de textos tiene ${#textos[*]} elementos"
echo "El arreglo de rangos tiene ${#rangos[*]} elementos"
echo "===== Imprimir un elemento del arreglo ====="
echo "El primer elemento del arreglo números ${numeros[0]}"
echo "El segundo elemento del arreglo números ${numeros[1]}"
echo "El tercer elemento del arreglo números ${numeros[2]}"
echo "==== Manipular arreglos ====="
unset numeros[0]
echo "Arreglo de números: ${numeros[*]}, se ha eliminado el primer valor"
numeros[0]=1
echo "Arreglo de números: ${numeros[*]}, se ha agregado el primer valor que estaba
con anterioridad"
echo "===== Recorrer arreglos ====="
for i in ${numeros[*]}
do
echo "numero: $i"
done
echo "=======Otra forma de iterar==========="
for ((i=0; i<${#numeros[*]}>; i++))
do
echo "numero: ${numeros[i]}"
done
${[*]} Sintaxis para imprimir todos los valores de un arreglo, con " encerramos los elementos de tipo
texto en caso de ser muy grandes y contengan espacios
Se tienen formas similares de ciclos a for each y el tipico bucle for
Archivos
#!/bin/bash
# Author: Juan Mora
# Manipular archivos
input_type=""
input_name=""
input_text=""
6/8
[Link] 2024-09-06
read -p "Ingrese si desea crear un directorio(1) o un archivo(2): " input_type
if (( $input_type == 1 ));then
read -p "Ingrese el nombre del directorio: " input_name
mkdir -m 777 $input_name #Se crea con los permisos 777
fi
if (( $input_type == 2 ));then
read -p "Ingrese el nombre del archivo, con su extension: " input_name
touch $input_name
read -p "Ingrese un texto para el archivo $input_name: " input_text
echo $input_text >> $input_name
echo "Contenido del archivo: "
cat $input_name
fi
De esta manera se crea un directorio con el nombre puesto en la variable input_name
#!/bin/bash
# Author: Juan Mora
# Lectura de archivos
input_name = $1
echo "========= Lectura de archivos ============"
cat $input_name
echo "========= Lectura de archivos línea por línea ==========="
echo "IFS (INTERNAL FIELD SEPARATOR), para leer línea por línea"
while IFS= read i
do
echo "== $i =="
done < $input_name
Funciones
Ejemplo de función:
#!/bin/bash
# Author: Juan Mora
# Definición y uso de funciones
hola_mundo () {
echo "Hola mundo"
}
# Ingresando parámetros
parametros () {
echo "Hola soy $1 y tengo $2 años"
}
7/8
[Link] 2024-09-06
hola_mundo
read -p "Ingrese su nombre: " nombre
read -p "Ingrese su edad: " edad
parametros $nombre $edad
8/8