sábado, 28 de enero de 2012

Shell Script Nº de usuarios conectados

Buena referencia para Shell Scripts

awk es mejor que cut

tamfichmenor=`ls -S -l -r -R| head -3 | tail -1 | awk '{print $5}'
Con cut al final, detecta los espacios, así que no me saca el tamaño del fichero.

Enlace a buena página de shell script en español

Shell Script Enero 5. Leer un número indeterminado de argumentos, ejecutar, crear copia de seguridad, parámetros con letras, fichero de ayuda

#!/bin/bash
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#5. Implementar un shell-script bajo Linux que realice lo siguiente: El script tendrá el siguiente formato ej5.sh [opciones] [argumentos] Al ejecutar el shell-script, eśte deberá mostrar un saludo (Buenos días) con el nombre del usuario que lo ejecuta.
#Las opciones que puede recibir el shell son las siguientes:
#Sin opciones ni argumentos, deberá mostrar el contenido del propio shell-script.
#-m Comprobará que los argumentos (tras -m) son ficheros, en cuyo caso muestra su contenido por pantalla.
#-x Deberá comprobar que los argumentos (tras -x) son programas ejecutables, en cuyo caso los ejecutará.
#-b Con esta opción se borrarán todos los ficheros y directorios que se le pasen como parámetro. Antes de ser eliminados, creará una copia de seguridad de los mismos en el directorios $HOME/backup.
#-help Mostrará el contenido de un fichero de texto, de nombre ayuda.hlp, en el que se explicará el funcionamiento del shell-script.
#Se valorará es uso de funciones y llamadas a shell-scripts externos, si procede.

function error {
    echo "¡¡Horror!! Uso "$0" -[|m|x|b|help] [argumentos] "
    exit
}

echo $#

if [[ $# -eq 0 ]]
then
    echo "Contenido del archivo."
    cat enero05
elif [[ $# -gt 0 ]]
then
    #Decir buenos días, nombre del usuario
    nombreusuario=`id -un`
    echo "Buenos días, $nombreusuario"
    #si el primer parámetro es -m
    if [[ $1 == "-m" ]]
    then
        echo "Entrando en -m"
        #la siguiente línea muestra todos los parámetros en una línea, pero no me gusta mucho, voy a probar otra opción       
        #echo $*
        #esta manera es muy limpia
        #primero se quita de en medio el primer parámetro, que es la -m
        shift
        #y luego va sacando cada parámetro hasta que la lista de parámetros esta vacía
        #ni hay que contar parámetros ni nada
        while [[ $1 != "" ]]
        do
            archivo=$1           
            if [ -f $archivo ]
            then
                echo "LISTANDO ARCHIVO $archivo..."
                cat $archivo
            else
                echo "El archivo $archivo no existe"
            fi
            #pasa al siguiente parámetro, esto es, borra el primero y pasa todos los demas hacia adelante, así que el 2º pasa a ser el 1º
            shift
        done
    elif [[ $1 == "-x" ]]
    then
        echo "Entrando en -x"
        shift
        while [[ $1 != "" ]]
        do
            archivo=$1           
            if [ -f $archivo ]
            then
                echo "EJECUTANDO $archivo..."
                $archivo               
            else
                echo "El archivo $archivo no es ejecutable."
            fi
        shift
        done
    elif [[ $1 == "-b" ]]
    then
        echo "Entrando en -b"
        shift
        #comprobar si existe carpeta de backup y, si no, crearla
        nombreusuario=`id -un`
        echo $nombreusuario
        carpeta=`cat /etc/passwd | grep $nombreusuario | cut -d: -f6`
        echo $carpeta
        if [ -d $carpeta/backup1 ]
        then
            echo "La carpeta backup existe"
        else
            echo "Creando carpeta backup en carpeta de usuario"
            mkdir $carpeta/backup1
        fi
        while [[ $1 != "" ]]
        do
            archivo=$1           
            if [ -f $archivo ]
            then
                echo "BORRANDO $archivo..."
                cp $archivo $carpeta/backup1
                #esto lo comento para evitar que borre archivos
                #rm $archivo
            else
                echo "El archivo $archivo no existe."
            fi
        shift
        done
    elif [[ $1 == "-help" ]]
    then
        cat ayuda.hlp

    else
        error
    fi
   
   
else
    error
fi

Shell Script Enero 4. Escribir un programa copiabin.sh que mueva todos los programas del directorio actual (archivos ejecutables) hacia el subdirectorio bin del directorio propio del usuario, muestre los nombres de los que mueve e indique cuántos ha movido o que no ha movido ninguno. Si el directorio bin no existe, deberá ser creado.

#!/bin/bash

#4. Escribir un programa copiabin.sh que mueva todos los programas del directorio actual (archivos ejecutables) hacia el subdirectorio bin del directorio propio del usuario, muestre los nombres de los que mueve e indique cuántos ha movido o que no ha movido ninguno. Si el directorio bin no existe, deberá ser creado.

if [[ $# -gt 1 ]]
then
    echo "¡¡Horror!! Uso "$0" nombrearchivo "
    exit
fi

nombreusuario=`id -un`
echo $nombreusuario
carpeta=`cat /etc/passwd | grep $nombreusuario | cut -d: -f6`
echo $carpeta
#carpeta= `echo $carpeta/bin 2>/dev/null`
#carpeta= `echo "$carpeta/bin"` 
#carpetabin= `echo "$carpeta"/bin`

if [ -d $carpeta/bin ]
then
    echo "La carpeta bin existe"
else
    echo "Creando carpeta bin en carpeta de usuario"
    mkdir $carpeta/bin
fi

ls > ficheros.txt
while read linea
do
    echo $linea
    if [ -f "$linea" ]
    then
        if [ -x "$linea" ]
        then
            cp $linea $carpeta/bin       
        fi
    fi
done < ficheros.txt

Shell Script Enero 3. Realizar un script que permita copiar un archivo pasado como parámetro en un directorio cualquiera también pasado como parámetro, antes de copiar comprobar si el archivo se puede leer.

#!/bin/bash

#3. Realizar un script que permita copiar un archivo pasado como parámetro en un directorio cualquiera también pasado como parámetro, antes de copiar comprobar si el archivo se puede leer.

if [[ $# -gt 3 ]]
then
    echo "¡¡Horror!! Uso "$0" nombrearchivo "
    exit
fi

archivo=$1
carpeta=$2

if [ -r $nombre ]
then
    cp $archivo $carpeta
fi

Shell Script Enero 2. Recibir un nombre de archivo como parámetro e indicar, imprimiendo todas las leyendas que correspondan, si el archivo es legible, modificable y ejecutable por el usuario.

#!/bin/bash

#2. Recibir un nombre de archivo como parámetro e indicar, imprimiendo todas las leyendas que correspondan, si el archivo es legible, modificable y ejecutable por el usuario.

if [[ $# -gt 2 ]]
then
    echo "¡¡Horror!! Uso "$0" nombrearchivo "
    exit
fi

archivo=$1

if [ -f $nombre ]
then
    if [ -r $nombre ]
    then
        echo "El archivo $archivo se puede leer"
    else
        echo "El archivo $archivo no se puede leer"   
    fi

    if [ -w $nombre ]
    then
        echo "El archivo $archivo se puede escribir"
    else
        echo "El archivo $archivo no se puede escribir"   
    fi

    if [ -x $nombre ]
    then
        echo "El archivo $archivo se puede ejecutar"
    else
        echo "El archivo $archivo no se puede ejecutar"   
    fi

fi

Shell Script Enero 1. Hacer un script que visualice un menú de tres opciones, la primera borra un fichero leído por teclado, la segunda visualiza un fichero también leído por teclado y la tercera sale del programa

#!/bin/bash

#1. Hacer un script que visualice un menú de tres opciones, la primera borra un fichero leído por teclado, la segunda visualiza un fichero también leído por teclado y la tercera sale del programa

function menu {
echo "1. Borrar fichero."
echo "2. Visualizar fichero."
echo "3. Salir."
echo "Introduce una opción:"
}

until [[ $opcion -eq 3 ]]
do
menu
read  opcion
#echo $opcion
if [[ $opcion -eq 1 ]] ;then
    echo "Opción 1 seleccionada"
    read -p "Introduce el nombre del archivo" nombre
    #echo $nombre
    if [ -f $nombre ]
    then
        rm $nombre
    fi
elif [[ $opcion -eq 2 ]] ; then
    echo "Opción 2 seleccionada"
    read -p "Introduce el nombre del archivo" nombre
    $echo $nombre
    if [ -f $nombre ]
    then
        cat $nombre
    fi
else
    echo "Saliendo del programa..."
fi
done

sábado, 21 de enero de 2012

¡Ya está bien! CULTURA LIBRE Y GRATUITA

¡Ya está bien! Ya está bien de pagar por algo que es patrimonio de la humanidad.
¿Quién inventó el cine? Los hermanos Lumiere. ¿Se le paga a la familia de los hermanos Lumiere cada vez que alguien hace una película? No.
¿Qué es Star Wars? Un pastiche de escenas de películas del oeste, bélicas, de espada y brujería, de kárate, trufado de referencias a las más variadas culturas:
los moños de la princesa Leia están copiados de la Dama de Elche, los trajes de Jedi son japoneses, los caballeros Jedi son los de la Mesa Redonda,
los Padawan llevan una coleta como los toreros... ¿Eso no es copiar? ¿Eso no es piratear ideas? Ah, no, eso es "inspirado en". (Y mira que soy fan de Star Wars).
Yo me gastaba la paga de un mes para comprar un disco de vinilo. Un cd costaba 50 pesetas, y te cobraban 20€, con suerte, por 10 canciones, de las cuales, 2 o 3 estaban bien y el resto era relleno.
Las industrias cinematográfica y discográfica son herramientas de marketing que crean estrellas como Amy Winehouse, pero luego no la ayudan cuando tiene problemas.
¿Cuántos niños prodigio han acabado siendo víctimas de su propio éxito? Macauley Culkin, Joselito, Edward Furlong...
Marisol fue inteligente y consiguió escapar del rodillo asesino de las grandes multinacionales.
¿Por qué Rock Hudson no podía ser él mismo? ¿Cuánto sufrimiento tuvo que pasar esa persona porque alguien creía que iba a vender menos si salía del armario?
¿Cuánto dinero han amasado? ¿Qué han hecho con él? Y siguen queriendo exprimir la gallina de los huevos de oro.
No se dan cuenta de que las personas somos inteligentes y de que no nos dejamos manipular.
Que hay miles de chavales y chavalas con más talento, ganas y capacidad de trabajo que las supuestas estrellitas que nos venden y con las que nos machacan día tras día.
Si una mentira se repite las suficientes veces, acaba convirtiéndose en la verdad (Joseph Goebbels). Joseph Goebbles fue ministro de propaganda de la Alemania Nazi.
Pues lo mismo intentan usar con nosotros: Pitbull es muy bueno, Shakira es muy buena, Carlos Jean es muy bueno... Lo ponen una y otra vez, una y otra vez, y repiten que son buenos.
Tenemos criterio, tenemos inteligencia y tenemos libertad. Y si prohiben intercambiar las cosas de una manera, saldré a la calle y le pediré al panadero que me preste la última serie de éxito.
¿Estaré cometiendo un delito? ¿Qué nos van a poner, un policía al lado a ver si le presto mis cosas a alguien? ¡Anda ya!
Yo abogo por una protesta pacífica: cambiar los contratos de todos los curritos, y cada vez que alguien pise una loseta que un albañil o albiñila ha puesto, que pague por ello,
cada vez que un alumno o alumna sume, que se pague al profesor que le enseñó a sumar, cada vez que alguien use un ordenador que yo he arreglado, que me pague,
cada vez que alguien haga una foto en Nueva York, que pague a los dueños de las casas, al Ayuntamiento por poner el río y al que hizo la Estatua de la Libertad.
Y llegamos al absurdo... Cada vez que alguien use un número, ¿quién tiene la patente de los números? ¿Y del teorema de Bolzano? ¿Y de la estructura básica del ordenador de Von Neumann?
LA CULTURA HA DE SER LIBRE Y GRATUITA. TODA. SIEMPRE.
Y si te crees con derecho a tener más que los demás por escribir 100 líneas de poemas en 2 años, ¿cuánto debería tener yo, que escribo 100 líneas de código en una hora? Deberías estar contento de que una persona igual que tú valore lo que haces y sea un poco más feliz gracias a ti. Pero no, tú quieres dinero, dinero, dinero...

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.

Shell Script Agregar máquinas al archivo /etc/hosts

#!/bin/bash

#Ejercicio 12. Escribir un script admaq para agregar una máquina al archivo /etc/hosts. Solicitará al usuario un número IP y luego un nombre #de máquina. El ingreso del nombre de máquina se reiterará hasta que el usuario ingrese un nombre de máquina vacío (tecla #Enter sin escribir nada). El script armará la línea en el formato del archivo hosts y la presentará al usuario pidiendo #confirmación. Si la obtiene, adjuntará la línea al final del archivo /etc/hosts.

Shell Script Número de elementos en un array y más

Resumen de Shell Script muy bueno

domingo, 8 de enero de 2012

sábado, 7 de enero de 2012

Podcast Informática Divulgada 03 Tema 27 Estructuras de Programación

Pogramita número 3 de mi PODCAST

Podcast Informática Divulgada 03  Tema 27 Estructuras de Programación

27. Estructuras de programación
27.1. Tipos de datos y variables.
27.2. Expresiones y operadores.
27.3. Estructuras de control de flujo.
27.4. Subrutinas y funciones.
27.5. Paso de parámetros.
27.6. Programación basada en eventos.

 

IES Campanilllas, atacado

Me he intentado meter en la web el IES Campanillas y me redirige a otra dirección.
QUE FAIL
Éste es el FAIL2.

Programación didáctica: dudas

-Los dos primeros trimestres tienen 26 semanas, mientras que aquí da para 242 horas. He puesto, incluyendo días no lectivos. ¿Está bien?

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

Podcast Informática 02 Cajas y placas base

2. Cajas y placas base para el ensamblaje de sistemas microinformáticos. 2.1. Factores de forma 2.2. Funcionalidades y componentes de una placa base 2.3. BIOS. Buses, puertos y conectores 2.4. Arquitecturas vigentes
Aquí se describe la estructura del ordenador desde un punto de vista físico.




Descarga directa

Web sobre listas circulares en C++

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

Tutoriales de C++ con clase

Muy buena.
C++ con clase

Página web de donde saco la música para el Podcast

www.jamendo.com
Lo mejor de la música libre.

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;

Java Ejercicio 5 Realiza una clase con un método decimalToRomano que transforme números en formato decimal a números en formato romano

No lo hace bien. ¿Por qué? En próximas entradas, la solución.
//fichero cromano.java
public class cromano {
    protected int n;
    protected String romano;
    /**
     * @param args
     */

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;
   

Ejemplos de Java a tutiplen en inglés

Podcast Informática 01 Informática para todos

Este es el primer pogramita del Podcast de Informática que estoy pergeñando.
La principal intención es explicar la informática para que se entere todo el mundo. ¿Qué hace el ordenador desde que tocamos una tecla hasta que nos saca el resultado en la pantalla?
 
Descarga directa
http://www.ivoox.com/podcast-informatica-01-audios-mp3_rf_977087_1.html

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

Aprenda Java como si estuviera en primero: Ejemplo 1

Éste es el código del Ejemplo1 del magnífico manual de Java
Aprenda Java como si estuviera en primero
Yo, que ya había programado en Java, he repasado todo y la verdad es que es BASTANTE BUENO. Tiene su poquito de cada cosa y está muy bien explicado.
Lo he programado en Eclipse bajo Guadalinex. Eclipse permite crear el proyecto y las clases desde la interfaz gráfica, así como asignar las interfaces y las superclases a las clases.
Aquí dejo un enlace a los archivos:

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 Calcular cantidad de cuentas para cada shell y nombres de cuentas sin shell asignado

#!/bin/bash

#*Ejercicio 9.* Construir un script que:
#a) indique los nombres de los diferentes shells asignados a las cuentas de
#usuario en el archivo /etc/passwd y la cantidad de cuentas de cada uno de
#esos shells;
#b) muestre los nombres de cuentas sin shell asignado.


if [ $# -gt 1  ] #comprobar número de parámetros introducidos
then          #gracias a Alejandro por sus buenas formas
    echo "¡¡Horror!! Uso "$0" "
    exit
fi
echo "Usuarios con shell asignado y cantidad"
cat /etc/passwd | cut -d: -f7 | sort | uniq -c
echo "Usuarios sin shell asignado"
cat /etc/passwd | grep ".*:.*:.*:.*:.*:.*:$" | cut -f1 -d:

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

Shellscript Sumar tamaños archivo usuario

#!/bin/bash

#*Ejercicio 5.* Se desea sumar el espacio ocupado por un usuario en un
#directorio y todos sus subdirectorios. Para ello, deben sumarse los tamaños
#de todos los archivos de ese usuario en esa rama de directorios.
#El script recibirá como parámetros el nombre del usuario y el nombre del
#directorio.
#Validará que el usuario pertenezca al sistema, y que el nombre de
#directorio recibido sea efectivamente un directorio.
#Presentará el resultado total en bytes, Kbytes y Mbytes enteros.
# *Sugerencia:* usar el comando find con listado largo; el tamaño de archivo
#en el listado largo está entre las columnas 47 y 56. 



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

usuario=$1
carpeta=$2
total=0

echo $usuario
echo $carpeta

existeusuario=`id $usuario 2>/dev/null`

if [ "$existeusuario" == "" ]
then
    echo "El usuario no existe"
else
    if [[ -d $carpeta ]]
    then
        #echo "La carpeta sí existe"
        find $carpeta -user $usuario -printf "%s\n" > tamano.txt
        while read linea
        do
            total=`expr $total + $linea`
        done < tamano.txt
        echo "Número de bytes: $total"           
        kbytes=`echo "scale=0;$total/1024" | bc`
        echo "Número de kilobytes: $kbytes"
        mbytes=`echo "scale=0;$kbytes/1024" | bc`
        echo "Número de megabytes: $mbytes"

    else
        echo "La carpeta no existe"
    fi
fi

Shellscript: #Ejercicio 4.* Escribir un script para listar todos los usuarios #correspondientes a un área de interés. Se dispone de un archivo de datos de #la forma #El script recibe como parámetro el nombre de un área de interés (DiGraf, #WinNT, etc.), y lista nombre y dirección electrónica de las personas que #tienen esta área de interés en su lista. Si no hay ninguna persona, o no #existe el área, emite un mensaje informativo.

#!/bin/bash

#Ejercicio 4.* Escribir un script para listar todos los usuarios
#correspondientes a un área de interés. Se dispone de un archivo de datos de
#la forma
#El script recibe como parámetro el nombre de un área de interés (DiGraf,
#WinNT, etc.), y lista nombre y dirección electrónica de las personas que
#tienen esta área de interés en su lista. Si no hay ninguna persona, o no
#existe el área, emite un mensaje informativo.



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

area=$1

cat personas | grep $area | cut -d: -f1,4 >> resul.txt

if [[ -s "resul.txt" ]] ; then
echo "Sí que hay datos."
cat resul.txt
rm resul.txt
else
echo "No hay datos."
fi

Java: pasar de Farenheit a Celsius

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

//Escribir un programa en Java que transforme una temperatura dada en grados
//Fahrenheit a grados Celsius, siendo 1oC=33.8 oF.

public class conversiongrados {
    public static void main(String[] args) {
        BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.println("Escribe los grados Farenheit:");
            String sgradosf = br2.readLine();
            double gradosf=Double.parseDouble(sgradosf);
            double gradosc=gradosf*33.8;
            System.out.println(sgradosf + " grados Farenheit corresponden a " + String.valueOf(gradosc) + " grados centígrados");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println(e.toString());
        }
    }
}

Escribir un programa en Java que pregunte un nombre, dirección y teléfono y escriba en pantalla una ficha con dicha información .


//Escribir un programa en Java que pregunte un nombre, direcci´on y tel
//´efono y escriba
//en pantalla una ficha con dicha información


package defaultpackage;
import java.io.*;

public class cej04 {
    public static void main(String[] args) {
        BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.println("Escribe tu nombre:");
            String nombre = br2.readLine();
            System.out.println("Escribe tu dirección:");
            String direccion = br2.readLine();
            System.out.println("Escribe tu teléfono:");
            String telefono = br2.readLine();
            System.out.println("Tu nombre es " + nombre.toString());
            System.out.println("Tu dirección es " + direccion.toString());
            System.out.println("Tu teléfono es " + telefono.toString());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println(e.toString());
        }
    }
}

Ahora, vamos por Java

Java es un lengua de programación precioso en el que tenemos que desarrollar para las oposiciones. Voy a programar con Eclipse, un SDK gratuito y bastante fácil de usar.

Desarrolle un programa en C al que se le pase por línea de comandos dos parámetros. El primero puede ser \l o \u, y el segundo, el nombre de un fichero. Si el primero de ellos es \l, se debe pasar a minúsculas todas las mayúsculas del fichero. Si es \u, hay que convertir a mayúsculas todas las minúsculas.

/*Desarrolle un programa en C al que se le pase por línea de comandos dos
parámetros. El primero puede ser \l o \u, y el segundo, el nombre de un
fichero. Si el primero de ellos es \l, se debe pasar a minúsculas todas las
mayúsculas del fichero. Si es \u, hay que convertir a mayúsculas todas las
minúsculas.*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

FILE *f1,*fres;
char nf1[50]="personas.txt";
char nf2[50]="resultado.txt";
char ch;
char ch2;
char c;
char cres;


char minamay (char c)
{
    switch(c) {
        case 'a': return('A');
                  break;
        case 'b': return('B');     
                  break;
        case 'c': return('C');     
                  break;
        case 'd': return('D');     
                  break;
        case 'e': return('E');     
                  break;
        case 'f': return('F');     
                  break;
        case 'g': return('G');     
                  break;
        case 'h': return('H');     
                  break;
        case 'i': return('I');     
                  break;
        case 'j': return('J');     
                  break;
        case 'k': return('K');     
                  break;
        case 'l': return('L');     
                  break;
        case 'm': return('M');     
                  break;
        case 'n': return('N');     
                  break;
        case 'ñ': return('Ñ');     
                  break;
        case 'o': return('O');     
                  break;
        case 'p': return('P');     
                  break;
        case 'q': return('Q');     
                  break;
        case 'r': return('R');     
                  break;
        case 's': return('S');     
                  break;
        case 't': return('T');     
                  break;
        case 'u': return('U');     
                  break;
        case 'v': return('V');     
                  break;
        case 'w': return('W');     
                  break;
        case 'x': return('X');     
                  break;
        case 'y': return('Y');     
                  break;
        case 'z': return('Z');     
                  break;
        default:  return(c);
                  break;         
              }
 }

char mayamin (char c)
{
    switch(c) {
        case 'A': return('a');
                  break;
        case 'B': return('b');     
                  break;
        case 'C': return('c');     
                  break;
        case 'D': return('d');     
                  break;
        case 'E': return('e');     
                  break;
        case 'F': return('f');     
                  break;
        case 'G': return('g');     
                  break;
        case 'H': return('h');     
                  break;
        case 'I': return('i');     
                  break;
        case 'J': return('j');     
                  break;
        case 'K': return('k');     
                  break;
        case 'L': return('l');     
                  break;
        case 'M': return('m');     
                  break;
        case 'N': return('n');     
                  break;
        case 'Ñ': return('ñ');     
                  break;
        case 'O': return('o');     
                  break;
        case 'P': return('p');     
                  break;
        case 'Q': return('q');     
                  break;
        case 'R': return('r');     
                  break;
        case 'S': return('s');     
                  break;
        case 'T': return('t');     
                  break;
        case 'U': return('u');     
                  break;
        case 'V': return('v');     
                  break;
        case 'W': return('w');     
                  break;
        case 'X': return('x');     
                  break;
        case 'Y': return('y');     
                  break;
        case 'Z': return('z');     
                  break;
        default:  return(c);
                  break;         
              }
 }

int main(int argc, char *argv[]) {

     if (argc!=3) /* argc should be 2 for correct execution */
    {
        /* We print argv[0] assuming it is the program name */
        printf("Uso: %s nombre de fichero\n", argv[0] );
        printf("Número de parámetros: %d",argc);
           }
    else
    {
         printf("El primer parámetro es %s\n",argv[1]);
         printf("El segundo parámetro es %s\n",argv[2]);
         f1=fopen(argv[2],"r");
        if( f1 == NULL )
         {
               puts("No se puede abrir el fichero");
               exit(EXIT_FAILURE);
         }
         fres=fopen("resultado.txt","w+");
         if( fres == NULL )
         {
               puts("No se puede abrir el fichero");
               exit(EXIT_FAILURE);
         }
       switch( argv[1][0] )
       {
         case 'l': ;
         
              do {
                  c=getc(f1);
                  printf("%d",c);
                  if (c==EOF) {
                     break;
                     }
                  else {
                     cres=mayamin(c);
                     putc(cres,fres);    
                  }
                 } while (c != EOF);
              break;
          case 'u': ;
               do {
                  c=getc(f1);
                  printf("%d",c);
                  if (c==EOF) {
                     break;
                     }
                  else {
                     cres=minamay(c);
                     putc(cres,fres);    
                  }
                 } while (c != EOF);
               printf("El primer parámetros es u\n");
               break;
          default:
               printf("Parámetro no reconocido.");
               break;
          }        
    }
   
    system ("pause");
    /*printf("Programa finalizado. Pulse INTRO para salir");*/
    return 0;
}

Programación en C con ejemplos, en inglés

lunes, 2 de enero de 2012

Codifique un programa que abra un fichero de texto del que lea datos sobre personas (el nombre y la edad). Todas aquellas personas cuya edad es superior a 20 las pasa al fichero resultado.txt (escribe su nombre y edad).

/*Codifique un programa que abra un fichero de texto del que lea datos sobre
personas (el nombre y la edad). Todas aquellas personas cuya edad es
superior a 20 las pasa al fichero resultado.txt (escribe su nombre y edad). */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *f1,*f2;
char nf1[50]="personas.txt";
char nf2[50]="resultado.txt";

int main(void) {

    f1=fopen(nf1,"r");
     if( f1 == NULL )
         {
               puts("No se puede abrir el fichero");
               exit(EXIT_FAILURE);
         }
    f2=fopen(nf2,"w+");
    if( f2 == NULL )
         {
               puts("No se puede abrir el fichero");
               exit(EXIT_FAILURE);
         }
   
char linea[128];
char clinea[128];
int iedad;
char *nombre;
char *edad;

while (fgets(linea,sizeof linea,f1) != NULL )
{
      printf("%s",linea);
      strcpy(clinea,linea);
      nombre=strtok(linea," ");
      edad=strtok(NULL," ");
      printf("Nombre:%s\n",nombre);
      printf("Edad:%s\n",edad);
      iedad=atoi(edad);
      printf("Edad:%d\n",iedad);
      if (iedad>=20) {
         fputs(clinea,f2);
      }
}
fclose(f1);
fclose(f2);
   
    system ("pause");
    /*printf("Programa finalizado. Pulse INTRO para salir");*/
    return 0;
}

Desarrolle un programa que copie un fichero en otro.

/*Desarrolle un programa que copie un fichero en otro. */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *f1,*f2;
char nf1[50];
char nf2[50];

int main(void) {

     printf("Escribe el nombre del primer fichero:");
     gets(nf1);
     printf("Escribe el nombre del segundo fichero:");
     gets(nf2);

    f1=fopen(nf1,"r");
     if( f1 == NULL )
         {
               puts("No se puede abrir el fichero");
               exit(EXIT_FAILURE);
         }
    f2=fopen(nf2,"w+");
    if( f2 == NULL )
         {
               puts("No se puede abrir el fichero");
               exit(EXIT_FAILURE);
         }
   
char linea[128];

while (fgets(linea,sizeof linea,f1) != NULL )
{
      fputs (linea,f2);
}
fclose(f1);
fclose(f2);
   
    system ("pause");
    /*printf("Programa finalizado. Pulse INTRO para salir");*/
    return 0;
}

Elabore un programa en C que escriba los números del 1 al 9 en el fichero numeros.txt.

/*Elabore un programa en C que escriba los números del 1 al 9 en el fichero
numeros.txt. */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *f;
int n;

int main(void) {

    f = fopen("numeros.txt","w+");
    if( f == NULL )
         {
               puts("No se puede abrir el fichero");
               exit(EXIT_FAILURE);
         }
    for (int i=1;i<=9;i++) {   
        fprintf(f,"%d",i);
        fprintf(f,"%s","\n");
       
    }
    system ("pause");
    /*printf("Programa finalizado. Pulse INTRO para salir");*/
    return 0;
}

Elabore un programa que abra el fichero de texto llamado numeros.txt, lea los 10 números que hay en el fichero y los coloca en un vector, y finalmente lo cierre.

/*Elabore un programa que abra el fichero de texto llamado numeros.txt, lea
los 10 números que hay en el fichero y los coloca en un vector, y
finalmente lo cierre. */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE *f;
int n;

int main(void) {

    f = fopen("numeros.txt","r");
    if( f == NULL )
         {
               puts("No se puede abrir el fichero");
               exit(EXIT_FAILURE);
         }
    for (int i=0;i<10;i++) {   
        fscanf(f, "%d", &n);
        printf("%d\n",n);
    }
    system ("pause");
    /*printf("Programa finalizado. Pulse INTRO para salir");*/
    return 0;
}

Desarrolle un programa en C que lea una palabra y la escriba al revés.

/* Comentario */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LONGMAX 100



void invertir2(char origen[],char destino[]) {
     int tamano;
     tamano=strlen(origen);
     printf("El tamano de la cadena es %d\n",tamano);
     for(int i=tamano-1;i>=0;i--) {
               printf("%c",origen[i]);
               printf("\n");
               destino[tamano-i-1]=origen[i];
               }    
}

int main(void) {
 
  /*char cadena[LONGMAX];*/
  char cadena[LONGMAX];
  char res[LONGMAX];

  printf("Escribe una palabra y pulsa INTRO\n");
  scanf("%s",cadena);
  printf("La palabra es %s\n",cadena);
  invertir2(cadena,res);
  /*res=invertir(cadena);*/
  /*printf("La palabra invertida es %s\n",invertir(cadena));*/
  printf("La palabra invertida es %s\n",res);

  system ("pause");
  /*printf("Programa finalizado. Pulse INTRO para salir");*/
  return 0;
}

UD03S02 Representación de objetos Ámbito práctico 3º ESO IES Huerta del ...

domingo, 1 de enero de 2012

Obtener PDF desde libro en Google Books

Con un plugin instalable en Mozilla Firefox, que se llama GreaseMonkey y FlashGot, y con Google Book Downloader 2.3, un script para GreaseMonkey, se pueden bajar las páginas que aparecen en la vista previa del libro. Luego, con Nitro PDF he montado las imágenes y me ha salido un PDF precioso. Así por lo menos yo tengo el PDF y puedo grabármelo en la tablet y leerlo tranquilo.
http://www.megaupload.com/?d=RKCOBWCG

Presentación interesante sobre la nube

Web 2.0

Aplicaciones 2.0 para la empresa

Herramientas 2.0 para su uso en educación

El profesor que no trabaja

Que sí, que tenemos muchas vacaciones.
Que sí, que cobramos bien.
Que sí, que tenemos toda la tarde libre (ahora lo comentaremos).

Primero, haz la carrera: mucho más exigente (no puedo medir cuánto más, pero los miles de horas sentado estudiando, para mí se quedan).
Luego, haz el Proyecto Fin de Carrera (yo es que soy Ingeniero Técnico, entonces, tenemos que demostrar que todo lo que hemos estudiado sirve para crear algo que funcione en la vida real).
Luego, hazte el CAP o el Máster (no del Universo), que, aunque hay gente que dice que no enseñan a dar clase, creo que es una cuestión de lo que tú aproveches y yo aprendí mucho.
Luego, da clases particulares en una empresa, con niños y niñas de toda condición, de todas las asignaturas (he tenido que explicar dibujo técnico, biología, filosofía, francés). Menos mal que mis profesores de Lengua e Inglés eran buenísimos y me defiendo bien en esas asignaturas. Y ten suerte de tener jefes buenos, buenos, con los que se puede trabajar y te dejan las cosas claritas y pagan. La hora sale a menos que una limpiadora, pero ayudar a las familias, no tiene precio.
Luego, a la vez, haz cursos para coger puntos para las oposiciones.
Luego, a la vez, ve a las clases de las oposiciones.
Luego, estudia 74 temas para las oposiciones.
Luego, aprende a programar en Shellscript, que es lo que ponen en el examen práctico.
Luego, todas las cosas que tenemos que hacer los curritos: la hipoteca, el coche, limpia, intenta cuidar de tus padres mayores... y todas esas cosas que hacemos todos los días y que nadie paga.
Luego, paga a Hacienda.
Luego, preséntate al examen, aprueba y date cuenta de que no has llegado... no hay plazas.
Luego, tírate un año dando clases particulares intentando llegar al mínimo por la crisis.
Luego, sube 7.000 vídeos a Youtube.
Luego, te llaman de un Instituto y entonces...
Da clases de 8 a 14:30, por la tarde, prepara clases para 5 asignaturas distintas, corrige los ejercicios, corrige los exámenes y, cuando has terminado, date cuenta de que todavía no has tocado los apuntes de las oposiciones y son las 10:00 de la noche. Y luego, ponte a estudiar.
Y en vacaciones, a estudiar porque si no estudias tranquilo en vacaciones, ¿cuándo vas a estudiar tranquilo?
El próximo que diga que los profesores tienen muchas vacaciones y cobran mucho, que digan esto también.