Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #----------------------------------------------------------------------------
- # Script para usar estructuras condicionales
- # condicionalesBash01.sh
- # Autor: angeldp
- # Se pretende aportar ejemplos prácticos, sencillos de entender,
- # en los que se vea la utilidad y forma de usar estructuras condicionales.
- # Ejemplo de uso de la estructura condicional if en la shell bash.
- # En este primer ejemplo se creará un script que, al ejecutarlo,
- # comprueba cuántos servidores DNS hay configurados en el archivo
- # /etc/resolv.conf; permitiendo añadir para completar hasta cuatro;
- # de este modo, si hay dos DNS dejará introducir otros dos como
- # máximo; si hay tres permitirá añadir uno más; etc.
- clear
- # Variable para guardar la ruta al fichero de configuración de DNS
- dnsFICH="/etc/resolv.conf"
- # Condición con cadenas de caracteres para comprobar si
- # el usuario que ejecuta el script lo hace como root
- if [ "$USER" != "root" ]
- then
- echo "Sólo root puede ejecutar este script; use sudo"
- exit
- fi
- # Condición para comprobar si existe un fichero nagada (!)
- # Si NO existe un fichero /etc/resolv.conf...
- if ! [ -f $dnsFICH ]
- then
- echo "El archivo $dnsFICH no se encuentra; "
- echo "se omite la configuración de los DNS."
- exit
- fi
- # Si el script llega hasta aquí es que ha "salvado"
- # las comprobaciones anteriores, así que ejecuta su tarea:
- # Con valores enteros para comprobar cuántos DNS hay:
- # primero cuento las líneas que comienzan por nameserver...
- numDNS=`more $dnsFICH | grep ^nameserver | wc -l`
- # Si hay cuatro o más no haremos nada (sólo indicarlo y
- # mostrarlos)
- if [ $numDNS -ge 4 ]
- then
- echo "Hay 4 o más DNS configurados, no es necesario más."
- more $dnsFICH | grep ^nameserver
- # En cambio, si hay 3, pido uno más
- elif [ $numDNS -eq 3 ]
- then
- echo "Tiene 3 servidores DNS en el fichero $dnsFICH"
- more $dnsFICH | grep ^nameserver
- echo "Indique uno más: "
- read DNS4
- # Pero si hay dos se pueden introducir otros dos más
- elif [ $numDNS -eq 2 ]
- then
- echo "Se han encontrado dos DNS en su sistema."
- more $dnsFICH | grep ^nameserver
- echo "Indique un par de ellos separados por un espacio: "
- read DNS3 DNS4
- # Si tuviera uno, se pueden introducir hasta tres más
- elif [ $numDNS -eq 1 ]
- then
- echo "Solo se ha encontrado un DNS en su sistema."
- more $dnsFICH | grep ^nameserver
- echo "Indique hasta tres separados por espacios: "
- read DNS2 DNS3 DNS4
- # En cualquier otro caso (no tiene ningún DNS) pido todos:
- else
- echo "No se han configurado los servidores DNS."
- echo "Puede introducir hasta 4 separados por espacios: "
- read DNS1 DNS2 DNS3 DNS4
- fi
- # En el caso de que hayan indicado más DNS de los permitidos,
- # la variable DNS4 contendrá más de uno separados por espacios
- # en blanco, así que si hay más de un (wc -w mayor que uno)
- # lo indico y me quedo con el primero de ellos:
- # Se pueden incluir varias condiciones usando operadores lógicos
- # Si hay algo en $DNS4 y contiene más de un DNS...
- if [ -n "$DNS4" -a `echo $DNS4 | wc -w` -gt 1 ]
- then
- DNS4=`echo $DNS4 | cut -d' ' -f1`
- echo "Ha indicado más DNS de los permitidos; "
- echo "el cuarto DNS será: $DNS4 "
- fi
- # Queda introducir los DNS en el fichero,
- # pero solo si se han indicado, si se han dejado en blanco no.
- # para ello contaré los DNS introducidos y escribiré
- # los que corresponda:
- numESCRITOS=`echo "$DNS1 $DNS2 $DNS3 $DNS4" | wc -w`
- if [ $numESCRITOS -eq 4 ]
- then
- echo "nameserver $DNS1" >> $dnsFICH
- echo "nameserver $DNS2" >> $dnsFICH
- echo "nameserver $DNS3" >> $dnsFICH
- echo "nameserver $DNS4" >> $dnsFICH
- elif [ $numESCRITOS -eq 3 ]
- then
- echo "nameserver $DNS2" >> $dnsFICH
- echo "nameserver $DNS3" >> $dnsFICH
- echo "nameserver $DNS4" >> $dnsFICH
- elif [ $numESCRITOS -eq 2 ]
- then
- echo "nameserver $DNS3" >> $dnsFICH
- echo "nameserver $DNS4" >> $dnsFICH
- elif [ $numESCRITOS -eq 1 ]
- then
- echo "nameserver $DNS4" >> $dnsFICH
- else
- echo "No se ha indicado ningún DNS adicional."
- fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement