https://repl.
it/languages/bash
Lo primero que tenemos que saber es cómo crear un fichero en bash, la siguiente línea es
imprescindible
#!/bin/bash
A partir de aquí podemos crear lo que queramos. En los siguientes apartados vamos ir viendo
pequeños fragmentos de código que pueden ser copiados y pegados directamente en un
compilador, como el que os paso en el enlace superior, para ir probándolos
1.- IMPRIMIR POR PANTALLA:
Sintaxis:
echo opciones “Hello World”
echo -n -> elimina el INTRO del final
$ echo -n “hola ”
$ echo “adios”
hola adios
Sin -n la salida sería la siguiente:
hola
adios
Opción -e. Indicamos que se interpreten los caracteres con “\”
Opción -E. Indicamos que no se interpreten los caracteres con “\”
\n para hacer un intro:
$ echo -e 'ejemplo\nintro'
ejemplo
intro
\t para un tabulador:
$ echo -e 'tab\ttab'
tab tab
2.- LECTURA DE PARÁMETROS POR TECLADO:
Sintaxis:
read nombreVariableAlmacen
Algunas formas de uso:
echo “Introduce un valor por teclado”
read variable
read -p “Introduce un valor por teclado ” variable
read -p “Introduce dos valores por teclado ” variable1 variable2
3.- LECTURA DE PARÁMETROS EN LA EJECUCIÓN DEL SCRIPT:
Sintaxis:
$posicionDeLaVariableALeer
Ejemplo:
prueba.sh hola
echo $1
Salida por pantalla
hola
4.- NÚMERO DE ARGUMENTOS TOTALES:
Sintaxis:
$#
Ejemplo:
prueba.sh hola
echo $#
Salida por pantalla
2
$* Muestra todos los comandos metidos por la línea de comandos. Es una cadena
que contiene todos los argumentos
5.- BUCLES Y COMPARADORES
5.1. COMPARADORES
Comparaciones de cadenas alfanuméricas
Operador Verdad (TRUE) si:
------------------------------------------
cadena1 = cadena2 cadena1 es igual a cadena2
cadena1 != cadena2 cadena1 no es igual a cadena2
cadena1 < cadena2 cadena1 es menor que cadena2
cadena1 > cadena 2 cadena1 es mayor que cadena 2
-n cadena1 cadena1 no es igual al valor nulo (longitud mayorque 0)
-z cadena1 cadena1 tiene un valor nulo (longitud 0)
Comparación de valores numéricos
Operador Verdad (TRUE) si:
------------------------------------------
x -lt y x menor que y
x -le y x menor o igual que y
x -eq y x igual que y
x -ge y x mayor o igual que y
x -gt y x mayor que y
x -ne y x no igual que y
Comprobacion de atributos de fichero
Operador Verdad (TRUE) si:
------------------------------------------
-d fichero fichero existe y es un directorio
-e fichero fichero existe
-f fichero fichero existe y es un fichero regular (no un
directorio, u otro tipo de fichero especial)
-r fichero Tienes permiso de lectura en fichero
-s fichero fichero existe y no esta vacio
-w fichero Tienes permiso de escritura en fichero
-x fichero Tienes permiso de ejecucion en fichero (o de busqueda
si es un directorio)
-O fichero Eres el dueño del fichero
-G fichero El grupo del fichero es igual al tuyo.
fichero1 -nt fichero2 fichero1 es mas reciente que fichero2
fichero1 -ot fichero2 fichero1 es mas antiguo que fichero2
5.2. BUCLES
En scripting de shell, los bucles son estructuras de control que permiten repetir un conjunto de comandos
varias veces. Hay dos tipos principales de bucles en shell script: el bucle `for` y el bucle `while`.
5.2.1. if/else
La sintaxis de esta construcción es la siguiente:
if "condicion"
then
"comandos"
[elif "condicion"
then
"comandos"]
[else
"comandos"]
fi
EJEMPLO:
#!/bin/bash
# Comprobando terminación de un comando
DIRECTORIO="/tmp/test"
COMANDO="/bin/mkdir $DIRECTORIO"
if $COMANDO
then
echo "$DIRECTORIO ha sido creado"
else
echo "$DIRECTORIO no pudo ser creado"
fi
5.2.2. until
La sintaxis de esta construcción es la siguiente:
until condicion;
do
comandos
done
#!/bin/bash
#Escribe el valor de una determinada variable 10 veces, después de incrementar
su valor
NUM=0
until [ $NUM -gt 10 ];
do
echo "\$NUM: $NUM"
let NUM=$NUM+1
done
5.2.3. Bucle for:
El bucle `for` itera sobre un conjunto de elementos, como una lista de archivos, valores numéricos o
elementos en una cadena.
Sintaxis básica:
for variable in lista_de_elementos
do
# comandos a ejecutar en cada iteración
done
Ejemplo:
for i in {1..5}
do
echo "Número: $i"
done
Este ejemplo imprimirá los números del 1 al 5.
5.2.4. Bucle `while`:
El bucle `while` ejecuta un conjunto de comandos mientras una condición sea verdadera.
Sintaxis básica:
while [ condición ]
do
# comandos a ejecutar mientras la condición sea verdadera
done
Ejemplo:
contador=1
while [ $contador -le 5 ]
do
echo "Contador: $contador"
((contador++))
done
Este ejemplo imprimirá los números del 1 al 5 utilizando un bucle `while`.
5.2.5. case
La sintaxis de esta construcción es la siguiente:
case expresion in
caso_1 )
comandos;;
caso_2 )
comandos;;
......
esac
#!/bin/bash
for NUM in 0 1 2 3
do
case $NUM in
0)
echo "\$NUM es igual a cero";;
1)
echo "\$NUM es igual a uno";;
2)
echo "\$NUM es igual a dos";;
3)
echo "\$NUM es igual a tres";;
esac
done
5.2.6. select
La sintaxis de esta construccion es la siguiente:
select nombre [in lista]
do
comandos que pueden utilizar $nombre
done
Un ejemplo simple para aclarar las cosas.
#!/bin/bash
select OPCION in opcion_1 opcion_2 opcion_3
do
if [ $OPCION ]; then
echo "Opcion elegida: $OPCION"
break
else
echo "Opcion no valida"
fi
done
5.2.7.Control de bucles:
En ambos bucles, puedes utilizar comandos como `break` y `continue` para controlar el flujo del bucle.
- `break`: Sale del bucle.
- `continue`: Salta a la siguiente iteración del bucle.
Ejemplo con `break`:
for i in {1..10}
do
if [ $i -eq 5 ]; then
break # Sale del bucle cuando i es igual a 5
fi
echo "Número: $i"
done
Ejemplo con `continue`:
for i in {1..5}
do
if [ $i -eq 3 ]; then
continue # Salta a la siguiente iteración cuando i es igual a 3
fi
echo "Número: $i"
done
6.- CUT
Corta caracteres y campos. Se pueden usar delimitadores y otras opciones, y a continuación, extraer las
partes seleccionadas de cada fichero.
Sintaxis:
cut –d “delimitador” –f “camposAmostrar” ……
Vamos a trabajar cada una de las siguientes opciones a través del ejemplo:
$ echo "Esto es una prueba, 1 2 3, probando"
Salida por pantalla
Esto es una prueba, 1 2 3, probando
El comando cut nos ofrece los siguientes argumentos:
-d, –delimiter=DELIM usa DELIM en vez de caracteres de tabulación para delimitar los
campos
-f, –fields=LISTA selecciona solamente estos campos; también muestra cualquier línea
que no tenga un carácter delimitador, a menos que se especifique la opción –s
$ echo "Esto es una prueba, 1 2 3, probando" | cut -d "," -f 1
Salida por pantalla
Esto es una prueba
____________________________
$ echo "Esto es una prueba, 1 2 3, probando" | cut -d "," -f 2
Salida por pantalla
123
____________________________
$ echo "Esto es una prueba, 1 2 3, probando" | cut -d "," -f 3
Salida por pantalla
probando
-c, –characters=LISTA selecciona solamente estos caracteres
$ echo "Esto es una prueba, 1 2 3, probando" | cut -c 1-4
Salida por pantalla
Esto
____________________________
$ echo "Esto es una prueba, 1 2 3, probando" | cut -c 6-8
Salida por pantalla
es
____________________________
$ echo "Esto es una prueba, 1 2 3, probando" | cut -c 9-12
Salida por pantalla
una
____________________________
$ echo "Esto es una prueba, 1 2 3, probando" | cut -c 14-18
Salida por pantalla
rueba
____________________________
$ echo "Esto es una prueba, 1 2 3, probando" | cut -c 13-18
Salida por pantalla
prueba
7.- LET
El comando let nos permite trabajar con variables numéricas en scripts.
Sintaxis:
let variable1=variable2(tipo de operación)variable3
$ simple=4
$ let doble=simple*2
$ echo $doble
Salida por pantalla
8
EJEMPLO: Hacer un bucle while que incremente el valor de una variable CONTADOR y vaya
mostrando los valores de dicha variable:
#!/bin/bash
VALOR=0
VALOR_MAXIMO=20
while [ $VALOR -lt $VALOR_MAXIM ];
do
let VALOR=VALOR+1
echo El contador es $VALOR
done
8.- CARPETAS
Sintaxis creación:
mkdir NombreCarpeta
-d -» Comprobar si existe determinado directorio
-f -» Comprobar si existe determinado archivo
-w -» Comprobar si determinado archivo tiene permisos de escritura
-x -» Comprobar si determinado archivo tiene permisos de ejecución.
creador.sh aa bb cc
creador.sh
for dir in $@
do
if [ -d $dir ]
then
echo “La capeta $dir ya existe.”
Else
mkdir $dir
if [ $? -eq 0 +
then
echo “$dir se ha creaco con éxito”
else
echo “Ups! Algo ha fallado al crear $dir”
fi
fi
done
9.- OPERACIONES CON DECIMALES
bc y scale para realizar operaciones con decimales
#!/bin/bash
echo "scale=10; 10 / 3" | bc
# resultado: 3.3333333333
10.- LECTURA POR LÍNEAS DE UN FICHERO SIEMPRE QUE NO HAYA ESPACIOS
Sintaxis:
for LINEA in ‘cat datos.txt’
Ejemplo:
Pepe:23
Paula:34
Juan:27
Maria:54
Federico:50
Pablo:32
Sonia:33
Elena:60
echo "Nombre y edades"
echo "---------------"
for LINEA in `cat datos.txt ` #LINEA guarda el resultado del fichero datos.txt
do
NOMBRE=`echo $LINEA | cut -d ":" -f1` #Extrae nombre
EDAD=`echo $LINEA | cut -d ":" -f2` #Extrae edad
echo "$NOMBRE tiene $EDAD años." #Muestra resultado.
Done
11.- LECTURA POR LÍNEAS DE UN FICHERO MÁS SEGURA
Evita leer archivos con la construcción "for linea in `cat ...`". Si hay algún espacio en el archivo, tus resultados no serán
los esperados. Una forma más segura de leer un archivo línea a línea es:
Sintaxis:
while read LINEA;
do
done < cat datos.txt
Ejemplo:
Pepe: 23
Paula: 34
Juan: 27
Maria: 54
Federico: 50
Pablo:32
Sonia:33
Elena:60
Código BASH:
Ver original
while read LINEA;
do
NOMBRE=`echo $LINEA | cut -d ":" -f1` #Extrae nombre
EDAD=`echo $LINEA | cut -d ":" -f2` #Extrae edad
echo "$NOMBRE tiene $EDAD años." #Muestra resultado.
done < datos.txt
12.- CAT
Sintaxis:
cat nombreFichero1
$ cat Madrigal.txt