Mostrando entradas con la etiqueta ejercicio. Mostrar todas las entradas
Mostrando entradas con la etiqueta ejercicio. Mostrar todas las entradas

viernes, 13 de enero de 2012

Shell Script Examen Viernes 13

Shell Script Examen Viernes 13

Para mis queridos alumnos y alumnas, para que vean que yo también hago exámenes:

#!/bin/bash

#examen viernes 13

#Elabora un Shell script que nos permitirá gestionar las copias de seguridad
#de un determinado directorio, que se recibirá por parámetro.
#Admitirá como argumento dos parámetros, el primero deberá ser Backup o
#Restore, y el segundo el nombre de un directorio.
#Si el primer parámetro es Backup, el Shell realizará una copia de seguridad
#(backup), para todos los usuarios del sistema, en el directorio pasado como
#segundo argumento.
#Si el primer parámetro es Restore, el Shell deberá restaurar todas las
#copias de seguridad guardadas en el directorio pasado como segundo
#parámetro. Se supone que restaura en el home.
#PD.- Recordad que es imprescindible comentad el código. (hacerlo a
#conciecia y la vinculación curricular aunque no lo pida).

#Comprueba el número de parámetros y si es distinto de 2, avisa del error y sale del programa
if (( $# != 2 ))
then
    echo "Número de parámetros no correcto"
    echo "Uso $0 Backup|Restore carpeta"
    exit
fi

#echo "Número de parámetros:"$#
#inicialización de variables
#operación a realizar, Backup o Restore
operacion=$1
#carpeta destino u origen
directorio=$2
#echo $operacion
#Se comprueba si la operación es Backup o Restore y si no lo es, se sale del programa
if [ $operacion = "Backup" ]
then
    echo "Operación Backup en curso..."   
else
    if [ $operacion = "Restore" ]
    then
        echo "Operación Restore en curso..."
    else
    echo "La operación debe ser Backup o Restore y tú has escrito " $operacion
    echo "Saliendo del programa..."
    exit
    fi
fi
#ahora se comprueba si existe el directorio destino u origen
#y si no se crea
if [ -d $directorio ]
then
    echo "El directorio existe. Se sigue el proceso..."
else
    echo "El directorio no existe. Se crea."
    mkdir $directorio
    if [ $? -ne 0 ]
    then
        echo "Error al crear el directorio. Seguramente, no tienes permiso para copiar en él"
        echo "Saliendo del programa"
        exit
    fi
fi
#echo "Operación:" $operacion
#si la operación es Backup
if [ $operacion = "Backup" ]
then
#se realiza la copia de seguridad
    echo "Realizando copia de seguridad..."
    cd $directorio
    carpetahome="/home/ubuntu" #esta es la carpeta de la que se hace la copia de seguridad
    tar -cf seguridad.tar $carpetahome
else
#se restaura la copia de seguridad
    echo "Realizando la restauración..."
    #cambia a la carpeta donde restaurar, que sería home   
    cd /home/jluserovilchez/examen13
    #descomprime
    tar -xf $directorio/*.tar
fi

martes, 10 de enero de 2012

Shell Script Sistemas de archivos ocupados al 90%

#!/bin/bash
#El comando df muestra el espacio disponible en los sistemas de archivos #montados. Su salida tiene esta forma:
#  Filesystem  1024-blocks   Used  Available  Capacity  Mounted on
#  /dev/hda2      1484386  433463     974213      31%   /
#  /dev/hda1      1228736  524576     704160      31%   /dosc
#  /dev/hda3       68263    63484       4779      93%   /tmp
#Los campos están separados por espacios. El campo Capacity indica el porcentaje ocupado. Escribir un script espacio que invoque el comando df y muestre en su salida el nombre del sistema de archivo y su capacidad ocupada para los sistemas de archivos con 90% o más espacio ocupado.

if [ $# -gt 1  ] #comprobar número de parámetros introducidos
then          #gracias a Alejandro por sus buenas formas
    echo "¡¡Horror!! Uso "$0" "
    exit
fi

df | tr -s " " | cut -d" " -f1,5 | grep 9[0-9]%

Shell Script Hacer ping a máquinas en archivo /etc/hosts

#!/bin/bash

#Un administrador de una máquina UNIX debe revisar día a día si hay conexión hacia todas las máquinas contenidas en el archivo /etc/hosts. Para ello dispone del comando
#   ping -c1 <nombre de la máquina destino>

lunes, 9 de enero de 2012

Shell Script Sumadora usando expr


#Escribir un script sumadora para hacer sumas y restas de enteros. #Presentará al usuario una interfaz similar a ésta:
#  SUMADORA: suma y resta enteros.
#  Los símbolos aceptados son: + y -
#  Debe haber espacio entre todos los operandos y operadores.
#  Ejemplo: 5 + 3 - 20 + 35
#  Ingrese operaciones:
#  3 * 2 + 10
#  Resultado:
#  16
#Si la expresión ingresada es correcta, el script realizará el cálculo y #presentará el resultado; si no lo es, emitirá en lugar del resultado el #mensaje "Expresión incorrecta. Debe comenzar de nuevo" y saldrá.
#¿Qué dificultas se presentaría al incluír otras operaciones?
#Sugerencia: para controlar la validez de la expresión, capturar el valor #de retorno del comando que realiza la operación.

viernes, 6 de enero de 2012

C++ Clase cola circular de enteros

//archivo ccolacircular.h
// Class automatically generated by Dev-C++ New Class wizard

#ifndef CCOLACIRCULAR_H
#define CCOLACIRCULAR_H

C++ Clase card para almacenar y mostrar datos sobre libros

//archivo ccard.h
// Class automatically generated by Dev-C++ New Class wizard
#include <string>
#include <iostream>
#include <string.h>   // Required by strcpy()
#include <stdlib.h>
#ifndef CCARD_H
#define CCARD_H

C++ Pila simple para almacenar caracteres mediante un array de caracteres

//archivo cpila.h
// Class automatically generated by Dev-C++ New Class wizard
#include <iostream>
#ifndef CPILA_H
#define CPILA_H

jueves, 5 de enero de 2012

C++ Clase entera simple con métodos para leer y escribir datos

//archivo centero.h
// Class automatically generated by Dev-C++ New Class wizard

#ifndef CENTERO_H
#define CENTERO_H

Java Clase Pez Añadir número de objetos de la clase Pez creados.

Hemos añadido a la clase base cPez, una variable pública que se inicializa a 0 al crear el primer objeto de la clase cPez. La variable está fuera de cualquier método y, al ser pública, puede ser accedida desde sus clases derivadas e incrementada, que es lo que se hace en las clases derivadas cada vez que se crea un objeto.

Java Clase Pez getNombre setNombre Crear 2 clases que extiendan la clase pez.

//archivo cPez.java
public class cPez {
    protected String nombre;
   
    public cPez(){
        this("");
    }

Java Realiza un programa que muestre por pantalla el siguiente cuadrado: 1 1 1 1 1 1 2 3 4 5 1 3 6 10 15 1 4 10 20 35 1 5 15 35 70 El programa podrá generar cuadrados de cualquier dimensión. Utiliza la recursividad.

Sin recursividad.
//archivo cCuadroRecursivo
public class cCuadradoRecursivo {
    private int n;
    int [][] tabla;

miércoles, 4 de enero de 2012

Java Lucky Number Número de la suerte Calcula tu numero de la suerte a partir de tu fecha de nacimiento

//fichero cLuckynumber.java
import java.util.*;
import java.io.*;
import java.util.Calendar;

public class cLuckynumber {
    protected Date fechanac;
   

Java Escalera con astericos

*
**
***
****
*****

//archivo cAsteriscos.java


Java Clase para calcular número de personas según el número de chocos y de papas

Ampliar el programa anterior creando una clase que permita almacenar los kilos de papas y chocos del restaurante.

import java.io.*;
public class cPapaschocos2 {


Java Calcular el número de personas según los kilogramos de papas y chocos que tenga

 El enunciado del ejercicio original está en http://pizarra2011.wikispaces.com/Ejercicio+11+t2
/*
Carlos Pascual Piles García

11. El restaurante mejicano de Israel cuya especialidad son las papas con chocos nos pide diseñar

martes, 3 de enero de 2012

Shell Script Visitas a web de máquinas externas

#!/bin/bash

#*Ejercicio 11.* Un administrador de sistema quiere saber si hay accesos a
#su servidor Web desde máquinas desconocidas. Para ello dispone de un
#archivo de log accesos.log cuyo primer campo, separado por blancos, es el
#nombre de una máquina o su número IP, indistintamente; luego otros dos
#campos, luego fecha y página solicitada. La lista de máquinas de su propio
#dominio se encuentran en el archivo /etc/hosts. Escribir un script que
#muestre los nombres o números IP de máquinas que accedieron el Web y la
#fecha, omitiendo las máquinas del propio dominio.  Recordar que el archivo
#/etc/hosts puede tener comentarios, y que accesos.log tiene varios campos.

if [ $# -gt 1  ] #comprobar número de parámetros introducidos
then          #gracias a Alejandro por sus buenas formas
    echo "¡¡Horror!! Uso "$0" "
    exit
fi

cat /etc/hosts | grep ^[^#.] | awk -F"[ \t]" '{print $1 }' > hosts.txt

while read linea
do
    servidor=`echo $linea | cut -d" " -f1`
    fecha=`echo $linea | cut -d" " -f4`
    #echo $servidor
    grep $servidor hosts.txt &>/dev/null
    if [[ $? != 0 ]]
    then
        echo "$servidor $fecha"
    fi
done < accesos.log

Shell Script A partir de un archivo con una lista de nombres, liste los que no están dados de alta en el sistema

#!/bin/bash

#*Ejercicio 10.* Construir un script que a partir de una lista de nombres de
#usuario contenida en el archivo alumnos.txt, uno por línea, determine si el
#usuario existe o no. El script emitirá un listado con los usuarios que
#figuren en el archivo alumnos.txt pero no existan en el sistema.
#*Ayuda:* el comando id usuario devuelve código de retorno 1 cuando el
#usuario no existe, 0 si existe. Redireccionar las salidas de id para no
#confundir el despliegue.

if [ $# -gt 1  ] #comprobar número de parámetros introducidos
then          #gracias a Alejandro por sus buenas formas
    echo "¡¡Horror!! Uso "$0" "
    exit
fi

while read linea
do
    existe=`id -u $linea 2>/dev/null`
    if [[ $existe == '' ]]
    then
        echo $linea
    fi
done < alumnos.txt

Shell Script Contar páginas accedidas según el archivo log de Apache

#!/bin/bash
#*Ejercicio 8.* Se desea saber qué páginas de un servidor web son más
#accedidas. El archivo /var/log/apache/access.log contiene líneas del
#siguiente formato:
#127.0.0.1 - - [25/Jul/2002:20:21:51 -0300] "GET
#/fabmelo/version7/modif_clave.php?nombre=pa232&clave=madrid HTTP/1.1" 200
#1609
#127.0.0.1 - - [25/Jul/2002:20:21:58 -0300] "POST /fabmelo/version7/menu.php
#HTTP/1.1" 200 1012
#127.0.0.1 - - [25/Jul/2002:20:22:00 -0300] "GET
#/fabmelo/version7/presupuestos2.php?nombre=pa232&clave=belice HTTP/1.1" 200
#642
#Los accesos contienen la palabra GET, los nombres de las páginas terminan
#en espacio o en "?". Listar los nombres de páginas de las 5 más accedidas.

if [ $# -gt 1  ] #comprobar número de parámetros introducidos
then          #gracias a Alejandro por sus buenas formas
    echo "¡¡Horror!! Uso "$0" "
    exit
fi

cat log | grep "GET" | cut -d" " -f7 > paginaslog.txt
cat paginaslog.txt | sort | uniq -c > cuentawebs.txt
cat cuentawebs.txt | sort -gr | head -5

Shell Script Instalación de programa

#!/bin/bash
#*Ejercicio 7.* Los creadores del programa maravil necesitan un script de
#instalación, llamado instalar.sh. Debe realizar estas tareas:
#1) presentar como pantalla de bienvenida el archivo bienvenida.txt, que
#ocupa menos de una pantalla; el usuario deberá digitar Enter para
#continuar.
#2) presentar una pantalla con la licencia, el archivo licencia.txt, también
#menor de una pantalla; el usuario deberá digitar la tecla S para aceptar la
#licencia, si no la acepta el programa avisa y termina con código de error
#1.
#3) inicializar una variable DIRINSTAL con el nombre del directorio de
#instalación por defecto, /usr/local/maravil.
#4) preguntar al usuario el directorio de instalación, mostrando el nombre
#sugerido (variable DIRINSTAL); el usuario podrá digitar un nombre de
#directorio o Enter para aceptar el directorio sugerido. En cualquier caso,
#el nombre del directorio de instalación deberá quedar en la variable
#DIRINSTAL.
#5) verificar si existe ya el directorio de instalación; es así, continúa la
#instalación, y si no, deberá pedir autorización al usuario, crearlo y
#verificar la creación exitosa. Si el usuario no autoriza la creación del
#directorio, el programa termina con error 2; si no se pudo crear el
#directorio el programa termina con error 3. En todos los casos se informa
#lo realizado.
#6) copiar los archivos maravil.py, LEAME y manual.txt hacia el directorio
#de instalación.  Si la copia no da error, se informa la terminación exitosa
#de la instalación; en otro caso, se informa el error y se borra el
#directorio de instalación y todo su contenido. 

cat bienvenida.txt
while :; do
        read tmp
        if [ -z "$tmp" ]; then
        break
        else
                echo "Pulsa Intro para continuar"
        fi
done
cat licencia.txt
read licencia
if [ $licencia == 'S' ]
then
    echo "Licencia aceptada."
else
    echo "No has aceptado la licencia. Saliendo."
    exit 1
fi
DIRINSTAL="/usr/local/maravil"
echo "Escribe el nombre del directorio donde instalar o INTRO para el directorio por defecto"
read directorio
if [ -z "$directorio" ]; then
    echo
else
    DIRINSTAL=$directorio
fi
echo "El directorio de instalación será $DIRINSTAL"
if [ -d $DIRINSTAL ]
then
    echo "El directorio ya existe. Se instalaré el programa en él. ¿Da usted su permiso?"
    read resdir
    if [[ $resdir == 'S' ]]
    then       
        echo "Se van a copiar los archivos."
    else
        echo "Si no da usted permiso, salimos."
        exit 3
    fi
else
    echo "El directorio no existe. Vamos a crearlo. Pulse S para crearlo. ¿Da usted su permiso?"
    read resdir
    if [[ $resdir == 'S' ]]
    then
        mkdir $DIRINSTAL       
        if [[ $? != 0 ]]
        then
            echo "Error al crear el directorio."
            exit 2
        fi
    else
        echo "Si no da usted permiso, salimos."
        exit 3
    fi
fi
cp maravil.py LEAME manual.txt $DIRINSTAL

if [[ $? == 0 ]]
then
    echo "Instalación exitosa"
else
    rm -r $DIRINSTAL
fi

Shellscript Comprobar último acceso al correo

#!/bin/bash

#*Ejercicio 6.* El correo de los usuarios se guarda en el directorio
#/var/mail, en archivos con el nombre de login de cada usuario.
#Se desea un script monimail.sh que monitoree estos archivos, realizando lo
#siguiente:
#a) si el usuario fue borrado, pero quedó su archivo de correo, listar estos
#usuarios.
#b) si el operador invocó el programa sin parámetros, acá termina.
#c) si el operador dio un parámetro no numérico, avisa el error y termina.
#d) si el operador da como parámetro un número, listar los usuarios que hace
#más de este número de días que no lee su correo, es decir, que el archivo
#con su nombre en /var/mail no ha sido accedido. Sugerencia: usar comando
#find.


if [ $# -gt 2  ] #comprobar número de parámetros introducidos
then          #gracias a Alejandro por sus buenas formas
    echo "¡¡Horror!! Uso "$0" "
    exit
fi

numero=$1

if [ $numero -ge 0 ]
then
    sudo ls /var/mail > correos.txt
    while read linea
    do
        find /var/mail/$linea -atime +$numero
    done < correos.txt
else
    echo "El parámetro no es un número"
fi