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:
- Pide al usuario que introduzca su contraseña: Introduzca password
- Pídele que repita la contraseña (Repita de nuevo su password)
- Si la contraseña no coincide con la contraseña inicial, presenta el siguiente mensaje: El password no coincide, intentelo de nuevo
- 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:
- Presenta un mensaje al usuario: Entra un nombre de archivo (exit para salir)
- El usuario proporcionará un nombre de archivo, si entra exit, el script finaliza
- Si el archivo no existe, presenta un mensaje: Archivo inexistente y vuelve a solicitar un nombre de archivo (vuelve a 1)
- 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».