Skip to content

Instantly share code, notes, and snippets.

@CodeBAou
Created December 10, 2022 21:05
Show Gist options
  • Save CodeBAou/55dcb53aba42014601f34d8ad419f514 to your computer and use it in GitHub Desktop.
Save CodeBAou/55dcb53aba42014601f34d8ad419f514 to your computer and use it in GitHub Desktop.
Bash scripting
#!/bin/bash
#comentario
# -.......................... variables
name="Paco" #Declaracion de variable
echo $name #Utilizamos variable
# - ...................variables especiales en bash
$0 representa el nombre del script
$1$9 los primeros nueve argumentos que se pasan a un script en Bash
$# el número de argumentos que se pasan a un script
$@ todos los argumentos que se han pasado al script
$? la salida del último proceso que se ha ejecutado
$$ el ID del proceso del script
$USER el nombre del usuario que ha ejecutado el script
$HOSTNAME se refiere al hostname de la máquina en la que se está ejecutando el script
$SECONDS se refiere al tiempo transcurrido desde que se inició el script, contabilizado en segundos.
$RANDOM devuelve un número aleatorio cada vez que se lee esta variable
$LINENO indica el número de líneas que tiene nuestro script.
Existen otras variables (variables del sistema ) se pueden ver ejecutando el comando 'env'
# -.......................... espacios comillas para el valor de variable
# bash utiliza los espacios para separar elementos, si el valor de una variable contiene espacios es necesario
# poner comillas.
frase='Esta es la casa de $variable1'
echo $frase
# -............................Asignar comando a una variable
archivos=$(find . -maxdepth 1 -type f | wc -l)
echo "Hay $archivos archivos"
# -........................... Argumentos
comando/funcion argumento1 argumento2 ...etc
$1 variable que contiene el primer argumento pasado
$2 variable que contiene el segundo argumento pasado
$0 representa el nombre del script
$1$9 los primeros nueve argumentos que se pasan a un script en Bash
$# el número de argumentos que se pasan a un script
$@ todos los argumentos que se han pasado al script
$? la salida del último proceso que se ha ejecutado
$$ el ID del proceso del script
# -............................ Asignar comandos a variables ..... $()
#Todo lo que está entre $() se ejecuta, y el resultado se asigna a la variable
archivos=$(find . -maxdepth 1 -type f | wc -l)
echo "Hay $archivos archivos"
#Operaciones Aritmeticas
resultado=$((2*2))
# -............................Arrays
#crear array
distros1=(Ubuntu Knoppix PureOS)
distros2=(Mandrake CentOS Fedora)distros=(${distros[@]:0:1} ${distros[@]:2})
#concatenando arrays
distros=(${distros1[@]} ${distros2[@]})
echo ${nuevo[@]} #visualizar array
#acceder a un elemento del array
${distros[i]}
#obtenemos las dos primeras distros
nuevo=(${distros[@]::2}
#iteracion
for i in "${distros[@]}"
do
echo "$i"
done
#eliminar segundo elemento del array
unset distros[1]
#eliminar array
unset nuevo
# -........................... Arrays asociativos (Diccionarios en Bash)
# array por <clave> <valor>
#Declarando
declare -A telefonos
telefonos[Juan]='123'
telefonos[Pedro]='456'
telefonos[Andres]='789'
#Declaraccion, valores en una line
declare -A telefonos
telefonos=([Juan]='123' [Pedro]='456' [Andres]='789')
#Accediendo valor
echo ${telefonos[Juan]}
#Espacios en la clave, poner entre comillas ''
clave='Ana Maria'
unset telefonos[$clave] # telefonos[Ana Maria] (ERROR) , telefonos['Ana Maria'] (CORRECTO)
# -........................... operadores condicionales
# [] -> dentro se pone la condicion
# [[ ]] -> Mejora con respecto a [], trabaja mejor con los espacios, se puede utilizar operadores (||,&&,<,>) con cadenas
# COMPARANDO CADENAS
# # [ ] (>,<,=,!=)
# # [[ ]] (>,<,=,!=)
# COMPARANDO ENTEROS
# [ ] -gt (mayor), -lt (menor), -ge (mayor o igual), -le(menor o igual), -eq(igual), -ne(distinto)
# [[ ]] -gt (mayor), -lt (menor), -ge (mayor o igual), -le(menor o igual), -eq(igual), -ne(distinto)
# # # [[ 001 = 1 ]] es falso (compara cadena), [[ 001 -eq 1 ]] es cierto (compara el valor numerico)
#OPERADORES BOOLEANOS
# [ ] -a(&&) -o (||)
# [[ ]] &&, ||
# # agrupar [[ ( 1=1) || (1=2) ]], [[ -r $f ]] || [[ -w $f ]]
#Otros comparadores
# -d te permitirá saber si es un directorio y si existe
# -f lo mismo que en el caso anterior pero para archivos. ([ -f "$file" ], [[ -f $file ]])
# -r en este caso te permite saber si el archivo tiene permiso de lectura
# -s con esta opción puedes saber si el tamaño del archivo es mayor que cero. Es decir, que no se trata de un archivo vacío
# -w te permitirá identificar si el archivo tienen permisos de escritura
# -x lo mismo que en el caso anterior pero para el caso de permisos de ejecución.
# =~ para expresiones regulares ( [[ $respuesta =~ ^s(i)?$ ]] )
# -...........................condicionales
# ########## if
# ([condicion] | [[condicion]])
if [[condicion]]
then
#............ la condicion se cumple
elif [[ condicion2 ]] # opcional, no tiene porque estar
else
#........... la condicion no se cumple
fi
# ########### case
case <expresión> in
<patrón 1>)
# comandos, coincidencia 1
;;
<patrón 2>)
# comandos, coincidencia 2
;;
*)
# comandos, se ejcuta si no hay coincidencias
;;
esac
# -...........................bucles
# while, el bucle continuará mientras se cumpla la condición
i=0
while [ $i -lt 1000 ]
do
echo 'Cemento Fresco, no hay letrero más bello… bueno, sólo Alto Voltaje.'
((i++))
done
# UNTIL, el bucle continuarás hasta que se cumpla la condción
i=10
until [ $i -lt 0 ]
do
echo $i
((i--))
done
#FOR,
for ((i=1;i<=1000;i++)) for i in $(ls) for color in rojo amarillo verde for i in $(ls)
do do do do
if ((i%2)) echo $i echo "Este es el color $color" echo $i
then done done done
echo $i
fi
done
# -...........................Fucinones
function mi_primera_funcion(){
echo Hola Mundo
echo $1 el argumento1
echo $2 el argumento2
}
mi_primera_funcion argumento1 argumento2
# - ....................Ejecutar otro archivo bash
source ./carpeta/archivo.sh
source ./archivo.sh
source ./archivoFuncion.sh
funcionUno param1 param2
# -..................... Manipulando texto en el terminal
https://atareao.es/como/manipulando-texto-en-el-terminal/
# -...................... Preguntar al usuario
#Preguntar de forma silenciosa (ocultar lo que escribe)
read -sp "Introduce la contraseña: " password
echo $password
#Preguntar
read -p "Dime tu nombre: " nombre
echo $nombre
# -..............................DEPURACION EN BASH
# con -x se imprime todas las instrucciones del script
!#/bin/bash -x
bash -x tu_script.sh # Ejecuta el script en modo depuracion
# -.............................. crear una ayuda --help
# https://atareao.es/tutorial/scripts-en-bash/una-ayuda-para-tus-scripts/
#!/bin/bash
for arg in "$@"
do
if [ "$arg" == "--help" ] || [ "$arg" == "-h" ]
then
echo "Help argument detected."
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment