que el apreciar y disfrutar el cuerpo desnudo de una mujer...
El 67% de las estadísticas, son falsas. Anónimo

Solución al reto del script

2009-05-13 16:18:15-05                  Esta entrada ha sido vista 408 veces.

BSD

Bueno, ya ha pasado una semana desde la publicación del reto, ahora la solución.

Para el primer caso la cosa es senciila, usamos el comando read para obtener los valores de la entrada estandar (stdin):

#!/bin/ksh

while read args; do
    echo $args
done

En el segundo caso lo único que tenemos que hacer es checar si se pasaron argumentos al script:

#!/bin/ksh

if (( $0 )); then
    while [[ $1 != "" ]]; then
       echo $1
       shift
    done
fi

Y para el tercer caso si creen que es la unión de los dos casos anteriores están mal por un detalle:

Uniendo ambos códigos:

#!/bin/ksh
 

if (( $# )); then
    while [[ $1 != "" ]]; then
        echo $1
        shift $1
    done
else
    while read args; then
        if [[ $args == "" ]]; then
            echo "Usage: $0 args"
            exit 1
        else
            echo $args
        fi
    done
fi

y checamos las sitaciones:

$ ls | ./script.sh
script.sh main.c a.out
 

$ ./script.sh $( ls )
script.sh main.c a.out
 

$ ./script.sh

Notaran que cuando no se dan argumentos en lugar de mostrar la forma de uso del script lo que hace este es esperar  a que tecleemos algo y luego mostrarnoslo hasta que presionemos Ctrl+D:

$ ./script.sh
do it!
do it!
show the usage!
show the usage!
^D

$

esto es por la instruccion "read args".

La unica forma de poder hacer esto de forma eficiente sería a través de un programa en código C o usando este sencillo hack:

#!/bin/ksh
 

if (( $# )); then
        set -A names -- "$@"
else
        set -A names -- $([[ -t 0 ]] || cat)
fi

# Si no hubieron argumentos se muestra la forma de uso
if (( ${#names[*]} == 0 )); then
        print -u2 "Usage: $0 args"
        exit 1
fi

# En caso contrario hacemos el trabajo
for name in "${names[@]}"; do
        print -r -- "$name";
done

Fácil ¿no?

Este post va dedicado a mirabilos, el líder del proyecto MirOS BSD quien fue el que me enseño.

P.D.

Último reto: describir qué es lo que hace el código.

 

Permalink: http://www.mononeurona.org/entries/view/asarch/1805


Comments Commentblogs:
1.- vendaval wrote:

Hola asarch, que chido que conozcas a los "buenos".
suerte amigo.

1.-primer if..else..fi
Observa si hay argumentos, en caso de haberlos los asigna al array names, de lo contrario toma lo que hay en la entrada estandar y lo mete en names.
2.-Segundo if...fi
Obtiene el numero de elementos en el array names, si es cero manda un mensaje al error estandar (stderr) y termina la ejecucion.
3.-El for recorre todos los array names, y los imprime ignorando los caracteres escapados.

2009-05-14 21:04:04-05
New Commentblog
CAPTCHA Image




Join us!
Forgot your password?
This blog has been visited
60,723 times
asarch
...sobre todo en la gimnasia.
Powered by
Despabilando la MonoNeurona.org
Livechat
<-Nombre

aarkerio wrote:
testing 2.0!!
on 20/12/11

wrote:

on 28/9/11

fontaimon wrote:
http://wwW.MachinesRiquezas-Cash101.BLogSpot.Com
on 16/8/11

honbre wrote:
chiquita q bella tebes
on 2/8/11

asarch wrote:
Hola
on 25/4/11

asarch wrote:
Hola
on 25/4/11

Eriol wrote:
hola !! saludos paso pronto !!
on 21/4/11

chillypsp wrote:
hola oie como le haces para editar el blog poer que yo no pude jaajajaja si pudieras ayudarme
on 4/8/10

vendaval wrote:
http://www.youtube.com/watch?v=zGtyUfCRX5I
on 5/4/10

vendaval wrote:
saludos asarch
on 5/4/10


Finalmente he conseguido entender cómo instalar Debian Testing y no morir en el intento
4 days, 6 hours ago
Chale, mi chompu viejita no soporta el GNOME 3. Se excita mucho :'-(
1 week, 5 days ago
Y como desde hace tiempo estaba en Debian 6, lo unico que hice fue cambiar los repositorios
2 weeks, 1 day ago
Instale Fedora 16 para 64 en la lap de un amigo y me dieron ganas de tener GNOME 3
2 weeks, 1 day ago
Valio la pena :-)
2 weeks, 3 days ago
Ni el puto de Fedora es poca madre como el Debian
2 weeks, 3 days ago
!Que chula se ve!
2 weeks, 3 days ago
Jamas habia visto algo tan hermoso en mi vida como a Debian en su version testing
2 weeks, 3 days ago
Como los roles y los famosos patrones de diseño entre otros.
3 weeks, 4 days ago
Aprende mejor Python. Pascal, aunque es un buen lenguaje, no tiene los elementos de un lenguaje "moderno".
3 weeks, 4 days ago
Mis Albums
FirefoxjEdit.orgGimpOpenOffice.orgHacker
Top
Colectivo MonoNeurona.org © 2002-2011.