• Bienvenido

    Este blog nació la madrugada entre el 10 y el 11 de Septiembre de 2007 mientras instalaba Windows y Debian en una máquina que acababa de formatear para comenzar de nuevo.
    Predendo dejar plasmada mi experiencia con todos los 'experimentos' informáticos que llevo a cabo para que cualquiera haga uso de estos conocimientos que a mi me resultan realmente enriquecedores. Colgaré noticias interesantes e iré redactando artículos sobre materias fundamentales en el mundo de la informática como UNIX o Critografía. Mucho Google y mucha Wikipedia
    Comenta lo que quieras en el articulo que mas te haya interesado, cualquier comentario es totalmente bienvenido.
    Un saludo.
    JxXx
  • RSS Mountain Weekends

    • Vietnam: diario de viaje (XIV) agosto 23, 2015
      29/05/2015 19:27 Aeropuerto de HueEstamos en el aeropuerto de Hue esperando para coger el avión que nos va a llevar a Hanoi. Estos 2 últimos días han sido... especiales, diferentes al resto del viaje. El mejor resumen es que nos han intentado timar todo el rato, casi todo el mundo y en varias ocasiones lo han conseguido. Tomándonos una cervecita (Huda) tampo […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (XIII) agosto 23, 2015
      Voy a resumir muchísimo el día de hoy porque tengo muchísimas fotos y porque ya estoy muy cansado. Hemos desayunado fuerte en el hotel y hemos hecho un día de paseo exhaustivo por la zona centro de Hoi An. Lo hemos visto todo y, siento ser así de sincero, hemos acabado hasta los cojones porque todo el mundo nos ha querido vender algo. Si vienes a Hoi An prep […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (XII) agosto 10, 2015
      27/05/2015 21:52Hoy os escribo desde el Vinh Hung 3 Hotel, un hotel bastante próximo a la ciudad antigua de Hoi An en el que hemos decidido dormir dos noches de capricho, tampoco es que sea excesivamente caro pues nos está costando 40$ la noche, pero dentro de lo que hemos visto estos días es bastante lujoso, dentro del edificio, en el patio central ocupándo […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (XI) agosto 10, 2015
      26/05/2015 10:55Estamos en el aeropuerto de Phu Quoc, ya tenemos más o menos organizados los días que nos quedan de vieje, bueno a grandes rasgos, pero eso os lo cuento después, voy a seguir con la historia.Cuando dejé de escribir recogimos y nos montamos en la moto, siguiendo por el camino de la costa oeste hacia el norte y ya en el norte, tras pasar varios […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (X) agosto 10, 2015
      25/05/2015 Entre las 12 y las 13Tras mucho tiempo en moto por media isla hemos dado con un chiringuito y escribo a pocos metros del mar tomándome una Bia Saigon muy fría. Voy a contaros lo de las inmersiones. Con Cristina y el resto de la tripulación de Flipper, una pareja de rusos y una pareja de americanos, Dave y Rachel, que viven y trabajan de profesores […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (IX) agosto 9, 2015
      25/05/15 20:50Debería hacerle una foto al cuaderno para que lo vierais porque la calidad de la carretera era medio buena pero ha habido un momento en el que nos hemos salido a un camino de tierra y he tenido que dejar de escribir porque era imposible. Me he propuesto dedicarle el tiempo que haga falta hasta poner el diario al día, pero antes de continuar qui […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (VIII) agosto 9, 2015
      24/05/15 08:23Como de costumbre, primero os cuento dónde ando y luego sigo contando cosas. Estamos en un autobús rumbo al sur de Phu Quoc, vamos a hacer submarinismo tres parejas y el staff de Flipper. Ayer dejé de escribir para despegar y luego no me apeteció seguir escribiendo y se me va acumulando el trabajo.Tras ver el templo de la literatura decidimos p […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (VII) junio 24, 2015
      23/5/2015 11:37Ayer dejé de escribir porque ya nos íbamos y no me dio tiempo a contar nuestro día por Hanoi, me quedé en que habíamos quedado para cenar. Salimos y estaba lloviendo, pero nos estaba esperando un taxi al que no le hizo mucha gracia nuestro trayecto de poco más de un kilómetro. Nos dejó en la puerta de un bar en el que estaban Alfonso (que tamb […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (VI) junio 16, 2015
      21/5/2015 8:35Estoy hecho polvo, la noche ha sido movida, ha hecho mucho calor pero el aire acondicionado no ha dejado de sonar en ningún momento. A las cinco menos algo hemos llegado a Hanoi, hemos recogido nuestras cosas, nos hemos despedido de Eric (!mierda, no tengo ni su email ni nos hemos hecho una foto con él!) y hemos salido a la estación. Yo estaba […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (V) junio 13, 2015
      Me acabo de subir a una litera y no sé qué tal voy a poder escribir, ¿por dónde iba? A ver, souvenirs, mujeres albinas con gorros rojos, comida picante con arroz y palillos y niños bañándose... ah! un perro pidiendo comida con ojos tristes.  Después de comer seguimos andando y Tsum nos metió en una casa y nos contó un poco la historia de la familia y otras c […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (IV) junio 10, 2015
      19/05/2015 por la mañana tempranoHoy es el cumpleaños de Ho Chi Minh, nacido en 1890, el que fue gobernante y lider de la resistencia contra los poderosos de Vietnam y Estados Unidos. El guía que está en nuestro camarote en el tren nos está contando un montón de datos histñoricos de Vietnam y de Ho Chi Minh, estudió en Rusia y luego volvió a Vietnam y unió a […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (III) junio 6, 2015
      18/05/2015 12:38Imposible escribir… sigo luego en el tren… 18/05/2015 20:57 Estoy tumbado en la litera de arriba de un camarote de un tren de camino a Sapa. El otro día escribí en un autobús camino a la Bahía de Ha-Long y esta mañana he intentado escribir en el autobús de vuelta pero me ha sido imposible. La excursión a la bahía de Ha-Long ha sido espectacul […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (II) junio 3, 2015
      17-05-2015 - 07:46No voy a adelantar desde donde escribo hoy, de momento solo voy a decir que no es un lugar muy cómodo para escribir porque se mueve todo.Bueno, ayer nos bajamos del avión y llovía como si lo fueran a prohibir. Justo antes de salir por la aduana del aeropuerto de Hanoi entregamos los pasaportes, los papeles con nuestros datos, las fotos y la […]
      Juan Sin Miedo
    • Vietnam: diario de viaje (I) junio 2, 2015
      Hoy comienzo a transcribir mi diario de viaje, bueno, nuestro diario de viaje porque aunque ésta vez casi todo lo he escrito yo todo lo que estos días iré publicando, lo que se cuenta en este diario, nos pertenece a los dos. Así empieza éste relato con nuestras aventuras y desventuras, esperamos que os guste y que toméis nota si alguna vez pensáis en viajar […]
      Juan Sin Miedo
    • Expedición al Matterhorn 2014 julio 16, 2014
      Durante la última semana he trascrito el relato de nuestro viaje, relato que he escrito durante las muchísimas horas de coche que supuso el retorno a casa. El relato ha gustado mucho y he recibido mensajes tando de amigos y familiares como de contactos, amigos de amigos, de Facebook, dándome, dándonos, la enhorabuena por la expedición y diciendo que les esta […]
      Juan Sin Miedo
    • Expedición al Matterhorn 2014. EPÍLOGO julio 16, 2014
      Como atestigua el medio cuaderno escrito durante lo que llevamos de vuelta a casa nos han pasado muchas cosas durante este viaje. Los tres volvemos un poco mas viejos, un poco mas sabios y un poco mas amigos. El alpinismo no es sólo llegar a la cumbre, una de las primeras lecciones que se aprenden, alpinismo es disfrutar de un viaje largo y difícil,  de la s […]
      Juan Sin Miedo
    • Expedición al Matterhorn 2014. ESCALAR SOBRE EL MEDITERRANEO julio 16, 2014
      07/07/2014"El séquito se quitó el saquito sequito."Oigo gente paseando, bicicletas también. Es muy temprano y me duele la cabeza, tengo una resaca cojonuda, creo que me pasé con los gin tonics.El lugar que habíamos elegido para dormir la noche anterior no era el mejor, desde luego, estábamos muy cerca de las casas y llamábamos bastante la atención […]
      Juan Sin Miedo
    • Expedición al Matterhorn 2014. DESTINO INCIERTO julio 16, 2014
      06/07/201406:30 - Sigue lloviendo, ¡vaya tela! Me doy la vuelta en el saco y veo que los tres acabamos de abrir los ojos, nos hemos despertado a la vez. Miramos fuera... ¡Joder, sigue lloviendo! "Casi mejor seguir durmiendo" - Pensé. Ninguno dijimos nada pero los tres pensamos lo mismo... Y a las 10 de la mañana dejó de llover y empezó a salir el s […]
      Juan Sin Miedo
    • Expedición al Matterhorn 2014. LAS FIEBRES DEL MONT BLANC julio 15, 2014
      05/07/2014Amaneció lloviendo (¡jooooooooder!) pero a las 10 despejó un poco y empezamos a preparar los macutos muy tranquilamente y las 12:30 o una salimos hacia el pueblo y allí nos comimos un kebab buenísimo antes de coger el teleférico. La estación intermedia estaba nublada, había nubes justo por encima nuestro y no vimos el sol hasta quedarnos a ras de l […]
      Juan Sin Miedo
    • Expedición al Matterhorn 2014. RUMBO A CHAMONIX julio 13, 2014
      04/07/2014Desayunamos muy tranquilamente y sacamos y ordenamos todo, desmontamos la tienda y volvimos a cargar el coche (tetris mode on), pagamos el camping y cogimos carretera hacia Chamonix.En la frontera con Francia nos volvieron a parar. ¿He dicho ya que el coche de Borja es muy cantoso? Nos sacaron del coche y revolvieron todo de muy malas maneras. Nos […]
      Juan Sin Miedo
  • septiembre 2007
    L M X J V S D
        Oct »
     12
    3456789
    10111213141516
    17181920212223
    24252627282930
  • RSS Google: ciencia y tecnología

  • RSS 20 minutos de tecnología

    • Ha ocurrido un error; probablemente el feed está caído. Inténtalo de nuevo más tarde.
  • RSS HISPASEC

    • Ha ocurrido un error; probablemente el feed está caído. Inténtalo de nuevo más tarde.
  • RSS VNUNET

    • Ha ocurrido un error; probablemente el feed está caído. Inténtalo de nuevo más tarde.
  • RSS BarraPunto

Curso de Unix (IV)

4. PROGRAMACIÓN DEL SHELL

4.1 · Guiones del Shell. Ejecución de un guión.

Para la programación en shell utilizamos los guiones del shell. Un guión es un archivo de texto que contiene sentencias o comandos de Unix. Si se va a ejecutar necesita permiso de ejecución ($ chmod +x miguion). Para ejecutarlo se puede hacer de dos formas:

  • En una nueva shell, en la línea de órdenes pongo el nombre del archivo. También puedo especificar el tipo de shell en el que quiero ejecutar ($ sh miguion).
  • Ejecutar en la shell actual. Esta forma sólo es válida en el ksh. La sintaxis es: $.miguion

 

Se diferencian en que en la primera forma los cambios en las variables de entorno que se realicen tiene carácter transitorio y en la segunda forma son permanentes.

Podemos ejecutar un conjunto de órdenes de una forma explícita:

{orden1;orden2;orden3;….}
Las llaves indican que la secuencia de órdenes se ejecutan en la shell actual

(orden1;orden2;orden3;…)
Los paréntesis indican que la secuencia de órdenes se ejecute en una subshell.

Ejemplos:

$ pwd
/home/usu25
/home/usu25

$(cd /bin;pwd)
/bin

$ {cd/bin;pwd}
/bin

4.2 Argumentos o parámetros posicionales

Se pueden referenciar mediante $posición ($1,$2).

Ejemplo:

$ miguion hola que tal 27

Son respectivamente $0, $1, $2, $3, $4…

$0 identifica el guión
$* representría todos los argumentos (de $1 a $4)
$# para saber la cantidad de argumentos
$? Permite ver el código que el sistema operativo ha devuelto en la orden anteriormente ejecutada
$$ representa el identificador de proceso (PID) actual..
Si tengo muchos argumentos y quiero procesarlos uno a uno hago un Desplazamiento de Argumentos mediante la orden shift que hace que los argumentos se desplacen hacia la izquierda, es decir, $0 vale lo que valía $1 y así sucesivamente.

Ejemplo1:

grep $LOGNAME /etc/passwd>mio.txt 2!>/dev/null

if [$? –eq 0];
then echo estoy aqui;
fi

Busco mi login en /etc/passwd, lo redirecciono al archivo mio.txt y si hay error lo redirecciona a /dev/null. En el if, si en la ejecución de la orden anterior me da un 0 como resultado (correcto) aparece en pantalla “estoy aquí”.

Ejemplo2:

grep $1 /etc/passwd>mio.txt 2!>/dev/null

if [$? –eq 0]; then echo estoy aqui;fi

Le paso como argumento el parámetro posicional $1 que es el argumento que he pasado al ejecutar el guión en la línea de órdenes. Ej: $ miguion pepe (buscaría el usuario pepe en el archivo /etc/passwd).

Ejemplo3:
find /-size $1>/lista.txt 2!> /dev/null

Este guión buscaría archivos con un tamaño en bloques especificado como parámetro posicional $1 al llamar al guión en la línea de órdenes, empezando en el directorio raíz (/). Ej: miguion 256

Si dos usuarios distintos ejecutan este guión a la vez las salidas de los dos sería en el mismo archivo, para evitarlo puedo redireccionar al archivo /lista.$LOGNAME.

Si un mismo usuario hace dos búsquedas podríamos poner >/lista.$$ para que tenga dos archivos diferentes cada uno de ellos identificado mediante su PID.

 

4.3 Órdenes aritmético-logicas

test expresión

La orden test evalúa una expresión que pasamos como argumento y devuelve un valor que es 0 si la expresión es verdadera. Permite evaluar tres tipos de expresiones:

1.- Valores numéricos: tienen que se números enteros relacionados mediante los operadores:

  • -eq igualdad test n –eq m
  • –ne esigualdad test n –ne m
  • –lt menor que test n –lt m
  • –gt mayor que test n –gt m
  • –le menor o igual test n –le m
  • –ge mayor o igual test n –ge m

Estos operadores son válidos en todos los shell, aunque el ksh admite los símbolos < o >.Lo normal es que al menos uno de los dos términos sea una variable, aunque también puede ocurrir que los dos sean variables.

2.- Cadenas: las cadenas se evalúan mediante los operadores:

  • -z devuelve verdadero si la cadena es 0
  • –n devuelve verdadero si existe la cadena
  • = devuelve cierto si las cadenas son iguales
  • != devuelve cierto si las cadenas son diferentes

Las cadenas se suelen determinar con comillas dobles (“) para que el sistema sepa donde empieza y donde acaba la cadena.

3.- Ficheros: los ficheros se evalúan con los siguientes operadores:

  • -a devuelve cierto si existe el fichero
  • –r devuelve cierto si el fichero tiene permiso de lectura
  • –x devuelve cierto si el fichero tiene permiso de ejecución
  • -w devuelve cierto si el fichero tiene permiso de escritura
  • –f devuelve cierto si el fichero es regular
  • –d devuelve cierto si es un directorio
  • –h devuelve cierto si es un enlace simbólico
  • –s devuelve cierto si el fichero tiene contenido

Ejemplo:test $M –eq 3
if [$? –eq 0]
then
echo son iguales
If

Todos los shells me permiten simplificar la orden test de la siguiente forma:
test expre [expre]

En ksh además se admite otra sintaxis que consiste en poner la expresión entre dobles corchetes:
test expre [[expre]]

Esta orden además admite operadores lógicos.

expr argumentos

Permite hacer cálculos en la línea de órdenes. Toma los argumentos como expresiones, las evalúa y devuelve el resultado por la salida estándar. Están permitidas las siguientes operaciones aritméticas:

  • suma +
  • resta –
  • división /
  • multiplicación \*

Cada uno de los términos deben aparecer separados por espacios blancos.
Se pueden utilizar variables como términos de la expresión. Ej. $ expr $M \* 2 + 7
Se puede asignar el resultado de una expresión a una variable. Ej. N= ‘expr $N + 7‘

let expresión

Esta orden sólo se puede utilizar en ksh. Hace lo mismo que la orden expr pero de una forma más sencilla.

Ejmplo: let N + 7

Esto se puede simplificar poniendo sólo la expresión: N = N +7
Pueden utilizarse dobles paréntesis para hacer lo mismo: ((N = N + 7))

xargs [indicadores] [orden[argumentos iniciales]]

Permite emplear la salida de una orden para poder definir los argumentos de otra. Combina su entrada estándar con los argumentos iniciales y ejecuta la orden resultante. Tiene dos modificadores:

  • -i cada línea de la entrada estándar se toma como argumento único que se sustituye por {} en la orden resultante dentro de los argumentos iniciales.
  • -p pide una confirmación en la ejecución.

Ejemplo Mover:
#!/usr/bin/sh
if [-d”$1” –a –d”$2”]
then
ls –1 $1|xargs –p –i mv $1/{} $2/{}
fi

Si $1 (d1) y $2 (d2) son directorios entonces se muestra el contenido de d1 con una línea por cada archivo (-1). {} se sustituye por las líneas que sale de la orden anterior. Al llamar al guión desde el shell, le tendríamos que pasar como argumentos los nombres de los directorios (d1, d2) que quisiéramos comprobar. Luego mediante la orden mv movería los archivos de d1 a d2 (sólo los archivos):

$ mover d1 d2

Si el directorio d1 tuviera los archivos cosa1 y cosa2, ejecutaría:

mv d1/cosa1 d2/cosa1
mv d1/cosa2 d2/cosa2

Esta orden se utiliza cuando se tiene que ejecutar una orden que toma como argumentos el resultado de ejecutar otra orden.

 

4.4 ÓRDENES DE ENTRADA/SALIDA

echo argumentos

Es una orden de salida. Muestra por las salida estándar todos los argumentos añadiendo un salto de línea. Los argumentos pueden ser variables. Dentro de los argumentos de esta orden también utilizar variables y sustitución de órdenes.

$ echo El valor de N es $N

Con el modificador \c podemos anular el salto de línea.

print [opciones] argumentos

Esta orden es sólo del shell ksh. Es la forma cómoda de utilizar echo en ksh.

[opciones]:

  • -n anula el salto de línea.
  • -R se anulan las secuencias de escape.

read

Es una orden de entrada. Lee una línea de la entrada estándar y asigna las palabras de esa línea a una o más variables Cuando no especifico donde hay que guardar la información de entrada se utiliza por defecto la variable REPLY.

En ksh hay otra forma de utilizar la orden read:

read NAME_VAR?”cadena”

NAME_VAR es donde se guarda el datoy “cadena” donde pedimos los datos al usuario.

 

IFS (Internal Field Separator): separador interno de campos. El contenido de esta variable es lo que identifica como separador de campos. Por ejemplo, en el archivo de contraseñas, el separador es el ‘:‘.

4.5 DEFINICIÓN DE FUNCIONES

Las funciones son un conjunto de órdenes o agrupaciones de órdenes.

  • SINTAXIS IMPLÍCITA: NombreFuncion ( ) {órdenes}
  • SINTAXIS EXPLÍCITA: function NombreFuncion( ) {órdenes}

Las funciones s ejecutan siempre en la shell actual y además permanecen en memoria lo que hace que no haya que acceder a disco cada vez que se llama.

Las funciones se pueden definir:

  1. Al principio del donde se va a utilizar y luego se invocan.
  2. En un archivo separado donde están todas las funciones.

Para invocar una función que está definida en el mismo script es suficiente con poner su nombre.

 

Declaro la función mensaje. Dentro de ella, se llama a la función predeterminada date mediante una sustitución de orden. Más tarde llamo a la función desde el script.

#! /usr/bin/ksh
mensaje()
{echo “Dentro. Son las ‘date’”}
echo antes
mensaje
echo despues

La ejecución sería:

$ chmod 755 miscript && miscript

antes
Dentro. Son las thu 11 12:43 Sept 29 GMT +1
Despues

Las variables modificadas dentro de la función se modifican en todo el script puesto que no hay variables locales. Una función puede terminar si hay una sentencia return que devuelve 0 (cierto) o 1 (falso).

Una función puede tomar parámetros igual que los parámetros generales del script, pero los parámetros no se ponen en la cabecera de la función. Al terminar la ejecución de la función los argumentos del script principal son sobrescritos por los de la función. Lo lógico sería que antes de hacer la llamada a la función guardáramos los argumentos del script principal de la siguiente forma:

_M1=$1 (se utiliza el guión bajo)
_M2=$2
Sólo se pueden utilizar 9 argumentos (de $1 a $9).

Ejemplo: Tenemos una función que procesa un archivo.

procesar $MIARCHIVO

if [$? –eq 0] then s
echo OK else
# Este código devuelve OK si la función e ha ejecutado correctamente y
echo MAL
# MAL si ha habido algún fallo.
fi

Es posible asignar el valor que devuelve una función a una variable mediante sustitución de órdenes:$M=’mifuncion’. Si utilizamos un archivo diferente para cargar todas las funciones a nivel de shell, todos los scripts podrán utilizarlas. Este archivo normalmente se llama funciones.main

NOTACION PUNTO: para cargar el archivo en memoria a nivel de shell, se pone en la línea de órdenes un punto, un espacio en blanco y el nombre del archivo.

$. funciones.main

Para mostrar todas las funciones que estén definidas y su implementación en el shell, se utiliza el comando $set. También en algunos sistemas Unix, para comprobar la existencia de funciones se utiliza $typeset –f o $typedef

Para eliminar alguna de estas funciones que están cargadas en memoria utilizo

$unset nombre_fucnion

Si elimino las funciones del archivo de funciones y lo vuelvo a cargar en memoria, las funciones eliminadas ya no aparecen. Si quiero que el archivo donde tengo todas las funciones se cargue al principio de la sesión, puesto que se descargan de memoria cuando cierro la sesión, lo pongo en .profile o .login.

4.6 SENTENCIAS DE CONTROL

Condicionales (if y case)

if orden
then ordenes
[elif ordenes]
[else ordenes]
fi

case variable in
listapatron1)
ordenes1
;;
listapatron2)
ordenes2
;;
esac

Repetitivas o de Tipo Iterativon (for, while y until)

for variable
[in listavalores]
do
ordenes
done

Cuando utilizamos este bucle sabemos cuantas iteraciones hay.

while ordenes1
do
ordenes2
done

While: pimero comprueba y luego ejecuta. Se ejecuta de 0 a n veces.

until ordenes1
do
ordenes2
done

Until: se ejecuta primero y luego comprueba la condición. Se ejecuta al menos una vez.

Matrices /Vectores:

Se denominan normalmente vectores porque lo normal es utilizar matrices de 1*n. Para definirlos, se utiliza:

$set –A nombrevector listavalores

El contenido de los vectores no tiene porque se homogéneos. Para acceder a los elementos se utilizan los índices:

${MIO[3]} (accedo al elemento 3)
Los índices comienzan a contar por 0.

Una respuesta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: