Created
December 10, 2022 21:05
-
-
Save CodeBAou/55dcb53aba42014601f34d8ad419f514 to your computer and use it in GitHub Desktop.
Bash scripting
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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