Ejercicios Shell Scripts Resueltos (Relación 3 Ejercicios)

Antes de nada deberías leer el artículo Introducción a Ejercicios Shell Scripts resueltos para realizar estos ejercicios.

Ejercicio 1.

Realizar un script que inserte números a un fichero, los borre, y nos diga si el número que queremos consultar está o no en el fichero.

clear
if ! [ -f ficheroNumeros ]
then
   touch ficheroNumeros
fi
echo "==== MENÚ ===="
echo "=============="
echo "1.Inserta números a un fichero"
echo "2.Borra números de un fichero"
echo "3.Inserta el número que quieres saber si se encuentra en el fichero"
echo "4.Visualiza el contenido del fichero"
echo "5.SALIR"
echo "Elige una opción: "
read entrada
case $entrada in
1)
clear
echo "Estos son los números que hay en el fichero"
cat ficheroNumeros
echo "Dime un número: "
read numero
echo $numero >>ficheroNumeros
sort -no ficheroNumeros ficheroNumeros
#la n del sort es para que ordene los numeros por completo, si no lo ponemos ordenaría solamente por la 1ª columna del número
sh 1.sh
;;
2)
clear
echo "Estos son los números que contiene el fichero"
cat ficheroNumeros
echo "Dime que número deseas borrar: "
read numero
grep -w -v $numero ficheroNumeros >tmp
# -v hace el grep a la inversa
#-w seleciona el numero entero, es decir, si hay un 54 y metemos un 5 no iria
mv tmp ficheroNumeros

sh 1.sh
;;
3)
clear
echo "Dime un número: "
read numero
grep -w $numero ficheroNumeros
if [ $? -eq 0 ]
then
echo "El número: $numero se encuentra en el fichero"
else
echo "El número: $numero NO se encuentra en el fichero"
fi
sleep 4
#se puede poner sed  /$n/d ficheroNumeros
. 1.sh
;;
4)
clear
cat ficheroNumeros
. 1.sh
;;
5)
#Salir
;;
*)
echo "Opción Incorrecta."
sleep 2
sh 1.sh   #. 1.sh
;;
esac




Ejercicio 2.

Realizar un script que genere números aleatorios entre 1 y 10.

#!/bin/bash
num=$((1+$RANDOM % 10 ))
echo $num

Ejercicio 3.

Realizar un script que nos rellene automáticamente una columna de una quiniela.

#!/bin/bash

clear
echo "ONLAE te ofrece la Quiniela Aleatoria:"
echo "--------------------------------------"
for (( i=1;i<16;i++ ))
do
alea=$((RANDOM % 3))

if [ $alea = 0 ];then
	echo "$iº:X";
 	
else
     echo "$iº:$alea"; 
fi

done

-- OTRA FORMA --

#el tr se explica en práctica 3, lo que hace es coger lo que hay a la izquierda de la pipe y tranformarlo
#a lo que le digamos en la derecha de la pipe, en este caso transformaría lo treses que salgan a X
echo 1. At.Madrid - Betis $((1+$RANDOM%3)) | tr 3 X
echo 2. Las Palmas - Valencia $((1+$RANDOM%3)) | tr 3 X
echo 3. Celta - Deportivo $((0+$RANDOM%2)) | tr 0 X
# la línea de antes la cambiamos porque al haber un 3 detras del echo, no nos vale el mismo comando que para los anteriores
echo 4. Athletic - Granada $((1+$RANDOM%3)) | tr 3 X
echo 15. Barcelona - Real Madrid $(($RANDOM%4)) - $(($RANDOM%4)) | tr 3 Madrid
# Ahora en la quinielas en el pleno al 15 hay que poner el resultado, cuando el resultado es >2 hay que poner una M

-- OTRA FORMA --
clear
echo "Pulsa intro para ganar 2 millones de euros."
read intro
for (( i=0; i<15; i++ ))
do
	numero=$(( ($RANDOM % 3) +1 ))
    if  [ $numero -eq 3 ]
	then
		echo "         X "
		sleep 0.2
        elif [ $numero -eq 1 ]
        then
		echo "        "$numero
                sleep 0.2        
	else
		echo "          "$numero
 	        sleep 0.2
	fi

done

Ejercicio 4.

Realizar un script que automáticamente nos rellene una columna de un euromillón.

echo "ONLAE te ofrece El Euromillones:"
echo "--------------------------------"

alea1=$((RANDOM % 50+1))
alea2=$((RANDOM % 50+1))
alea3=$((RANDOM % 50+1))
alea4=$((RANDOM % 50+1))
alea5=$((RANDOM % 50+1))
	
if [ $alea1!=$alea2!=$alea3!=$alea4!=$alea5 ] 
	then
	echo "BOLA 1: $alea1"
	echo "BOLA 2: $alea2"
	echo "BOLA 3: $alea3"
	echo "BOLA 4: $alea4"
	echo "BOLA 5: $alea5"
else 
	
	alea1=$((RANDOM % 50+1))
	alea2=$((RANDOM % 50+1))
	alea3=$((RANDOM % 50+1))
	alea4=$((RANDOM % 50+1))
	alea5=$((RANDOM % 50+1))
fi

alea=$((RANDOM % 11+1))
alea1=$((RANDOM % 11+1))
	
if [ $alea!=$alea1 ] 
	then
	echo "ESTRELLA 1: $alea"
	echo "ESTRELLA 2: $alea1"
else 
	alea=$((RANDOM % 11+1))
	alea1=$((RANDOM % 11+1))
fi

--- OTRA FORMA ---
#!/bin/bash
clear
echo Números
shuf -i 1-50 -n5 |sort -n |xargs -n5
echo Estrellas
shuf -i 1-11 -n2 |sort -n |xargs -n2
#el xargs es para que lo muestre en horizontal en lugar de en vertical, el -n es para que muestre la
#cantidad de números que queramos por fila

Ejercicio 5.

Realizar un script con dialog que genere un combo de 6×35, donde ponga “Hello world”.

#!/bin/sh 
#La primer linea (#!/bin/sh) indica que shell se utilizara, se podría haber puesto 
#!/bin/bash con idénticos resultados.

# Mi primer script con dialog"
dialog --title "Mensaje en Dialog"   
#Con --title se define el titulo que tendrá el cuadro o la ventana
--msgbox "
 Hello world !" 6 35   
#--msbox determina el tipo de dialog que se usara así como el contenido del mismo entre comillas. Los números 6 y 35 son los parametrs de alto y ancho del cuadro o ventana.

--- OTRA FORMA ---

#!/bin/bash
dialog --title "Bienvenido" --yesno "Se va a proceder a formatear su disco 
Para continuar presione YES 
Para abortar presione NO"   10 50
#Dependiendo de lo que pusieron

case $? in

0)


        dialog --title "Borro Disco" --infobox "Formateo en Proceso" 10 50

        for i in $(seq 0 10 100) ;
        do
           sleep 1;
           echo $i | dialog --gauge "Formateando" 10 70 0;
        done


;;

1)
 dialog --title "No Borro Discos" --msgbox "Tranquilo, su disco no se va a formatear" 10 50
;;

esac

--- OTRA FORMA  ---
#!/bin/bash
dialog --title "Bienvenido" --msgbox "Se va a proceder a formatear su disco
" Para continuar presione   Para abortar presione
 ." 10 50
#Dependiendo de lo que pusieron
if [ "$?" = "255" ]
then
dialog --title "Borro Windows" --msgbox "Su disco ha sido formateado satifactoriamente" 10 50
else
dialog --title "No Borro Windows" --infobox "Formateo en Proceso" 10 50
for i in $(seq 0 10 100) ; do sleep 1; echo $i | dialog --gauge "Formateando" 10 70 0; done
fi

Ejercicio 6.

Script que simule las tiradas de un dado. El número de veces a tirar el dado se le debe pasar por teclado.

clear
echo "Introduce el número de veces que deseas tirar el dado"
read veces
clear
for ((i=1;i<=$veces;i++))
do
dado=$((1+$RANDOM % 6))
echo $i. $dado
done

RESTO SOLUCIONES EN BREVE

7.- Realizar un script al que se le vayan introduciendo números del 1 al 9, y que diga si el número es par o impar. Pulsando el número 0 el script debe terminar, y si se pulsa un número distinto del rango [0-9] debe salir un mensaje diciendo que el “Número pulsado es erróneo”.

8.- Crea un script que muestre información completa de los ficheros del directorio de trabajo que comiencen por la letra elegida:

  • Se pedirá al usuario que introduzca la letra de comienzo del nombre de los ficheros: Letra de comienzo de los ficheros =
  • En caso de encontrar alguno, presentará su información completa (comando ls -l).
  • En caso de que no existan ficheros que comiencen por la letra elegida, se presentará sólo el mensaje: No existen ficheros que comiencen por <valor_letra_elegida>.

9.- Deseas comprobar si un usuario especificado por parámetro está conectado al sistema, presentando un mensaje “nombre_de_usuario está conectado al sistema”, si no lo está, ser informado de que no lo está.

10.- Deseas comprobar si un usuario especificado por parámetro está conectado al sistema, presentando un mensaje “nombre_de_usuario está conectado al sistema”, si no lo está, ser informado tan pronto se conecte. (Esperar 30 segundos entre comprobación y comprobación).

11.- Escribe un script, que realice lo siguiente:

  1. Pide al usuario que introduzca su contraseña: Introduzca password
  2. Pídele que repita la contraseña (Repita de nuevo su password)
  3. Si la contraseña no coincide con la contraseña inicial, presenta el siguiente mensaje: El password no coincide, intentelo de nuevo
  4. Repite los pasos 2 y 3 hasta que la contraseña coincida con la contraseña inicial

12. Crea un script que actuará de la forma siguiente:

  1. Presenta un mensaje al usuario: Entra un nombre de archivo (exit para salir)
  2. El usuario proporcionará un nombre de archivo, si entra exit, el script finaliza
  3. Si el archivo no existe, presenta un mensaje: Archivo inexistente y vuelve a solicitar un nombre de archivo (vuelve a 1)
  4. El script debe analizar los permisos del archivo, relativos al grupo al que pertenece el usuario, y presentará los siguientes mensajes, de acuerdo con los permisos del archivo:
    – El grupo no tiene permiso de lectura
    – El grupo tiene permiso de lectura
    – El grupo no tiene permiso de escritura
    – El grupo tiene permiso de escritura
    – El grupo no tiene permiso de ejecución
    – El grupo tiene permiso de ejecución

13. Crea un script que dado un directorio especificado como parámetro en la llamada, busque, dentro de dicho directorio, todos los archivos que sean ejecutables.

  • Si el directorio especificado en la llamada al script no es válido, debe presentar el mensaje: valor_directorio no es un directorio válido.
  • En un fichero de texto llamado misEjecutables debe incluir el nombre de cada archivo localizado (uno en cada línea del archivo)
  • Al final presentará el contenido del archivo misEjecutables
  • Finaliza con un mensaje:
    Se han localizado número_archivos_localizados archivos

14. Escribir un script que genere un backup del directorio HOME cada hora asignándole el nombre de «backup-hora de generación».

 

Deja un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies ACEPTAR

Aviso de cookies