Construcción
Falta para nuestra inaguración:
01/11/2025 12:00 AM

Shell Script

Condicional

if (CONDICION); then
    (BLOQUE DE COMANDOS)
else
    (BLOQUE DE COMANDOS)
fi

Este comando evalúa expresión, y si evalúa a cierto, devuelve cero (true), o en otro caso 1 (false). Si no hay expresión, test siempre devuelve falso.

#!/bin/bash
 
# Recibe un parámetro y dice que tipo es
 
if  test -e $1; then
        echo "Has introducido un fichero";
else
        echo "No es un fichero";
fi
 
if test -d $1; then
        echo "Has introducido un directorio";
else
        echo "No es un directorio"
fi

Este comando evalúa expresión, y si evalúa a cierto, devuelve cero (true), o en otro caso 1 (false). Si no hay expresión, test siempre devuelve falso. test soporta gran cantidad de operadores, algunos son:

ExpresiónDefinición
-d ficherocierto si fichero existe y es un directorio
-e ficherocierto si fichero existe, independientemente del tipo que sea
-f ficherocierto si fichero existe y es un fichero normal
-r ficherocierto si fichero existe y se puede leer
-s ficherocierto si fichero existe y tiene tamaño mayor que cero
-w ficherocierto si fichero existe y es se puede escribir sobre él
-x ficherocierto si fichero existe y es ejecutable
n1 -eq n2cierto si los enteros n1 y n2 son iguales
n1 -ne n2cierto si los enteros n1 y n2 no son iguales
n1 -gt n2cierto si el enteros n1 es mayor que n2
n1 -ge n2cierto si los enteros n1 y n2 son iguales o n1 es mayor que n2
n1 -lt n2cierto si el enteros n1 es menor que n2
n1 -le n2cierto si los enteros n1 y n2 son iguales o n1 es menor que n2
s1 = s2cierto si las cadenas de texto s1 y s2 son idénticas
s1 != s2cierto si las cadenas de texto s1 y s2 no son idénticas
s1 < s2cierto si la cadena de texto s1 es menor que s2
s1 > s2cierto si la cadena de texto s1 es mayor que s2
-n cadenacierto si la longitud de la cadena de texto es distinta de cero
! expresioncierto si expresión es falsa (negación)
expresion1 -a expresion2cierto si expresion1 y expresion2 son ciertas
expresion1 -o expresion2cierto si expresion1 o expresion2 son ciertas

Ejemplo:

#! /bin/bash
 
# Dado el numero, indicar si es o no divisible entre 20. Si no se mete un número debe mostrar como usar el programa
 
read n1;
if test -n "$n1"; then
        if test $(($n1%20)) -eq 0; then
        echo Divisible;
        else
        echo No divisible;
        fi
else
        echo Introduce un numero;
fi

Bucle

for (VARIABLE) in (SERIE); do
    (BLOQUE DE COMANDOS)
done

En cada iteración la variable VARIABLE toma un valor de SERIE, que en caso de no contener elementos hará que no se ejecute nada y se devuelva un valor 0.

#!/bin/bash

for var in 1 2 3 4 5 6 7 8 9; do
   echo $var
done

# Usando el comando seq

for var in $(seq 1 9); do
  echo $var
done

# Con texto

for pal in uno dos tres cuatro cinco; do
  echo $pal
done

Ejemplos:

#!/bin/bash
 
# Borrar usuarios con IDs entre dos números recibidos por parámetro
 
for i in $(seq $1 $2); do
        nombre=$(cut -d":" -f1,3 /etc/passwd | grep "\b$i\b" | cut -d":" -f1);
        $(userdel -r $nombre);
done;
#!/bin/bash
echo "Nombres de los usuarios y sus grupos";
nombre_usuario=$(who | cut -d" " -f1 | sort | uniq);
for i in $nombre_usuario; do
        gid=$(grep "\b$i\b" /etc/passwd | cut -d":" -f4);
        grupo=$(cut -d":" -f1,3  /etc/group | grep "\b$gid\b" | cut -d":" -f1);
        echo "El usuario es $i y su grupo es $grupo";
done;
#!/bin/bash
echo "Ficheros del directorio actual y su tamaño";
ficheros=$(find -type f);
for i in $ficheros;do
        num_lineas=$(wc -l $i | cut -d" " -f1);
        echo "Nombre del fichero: $i";
        echo "Contiene $num_lineas lineas";
        echo " ";
done;

Deja una respuesta