que el apreciar y disfrutar el cuerpo desnudo de una mujer...
Cuando soy buena, soy buena; cuando soy mala, soy mucho mejor. Anónimo

Solución al reto del script

2009-05-13 16:18:15-05

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://mononeurona.org/entries/view/asarch/1805


Comments Comentblogs:
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 Comentblog
Captcha Image
Login




Join us!
Forgot your password?
asarch
...sobre todo en la gimnasia.
Powered by
Despabilando la MonoNeurona.org
Livechat
<-Nombre

chillypsp wrote:
hola oie como le haces para editar el blog poer que yo no pude jaajajaja si pudieras ayudarme
4 weeks, 1 day ago

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

vendaval wrote:
saludos asarch
on 5/4/10

bin wrote:
kieor sexo
on 3/4/10

akheron wrote:
Mono+Win32?,mejor .NET express jojojo =D
on 8/10/09

asarch wrote:
Chido :&#45;&#41;
on 26/12/08

Vendaval wrote:
solo saludando asarch
on 21/12/08

asarch wrote:
¿Visual Net? Usa mejor Mono
on 9/12/08

chilicuil wrote:
wtf!, que esta pasando aqui?, xD
on 2/12/08

ana_20 wrote:
y si estudio ing en informatica i sistemas
on 14/11/08


Que aarkerio pague ese servicio en el servidor virtual.
1 day, 18 hours ago
¡Ah chingá! Así me pasó con la empresa # 1 de patentes mundiales: IBM. Tardaron 45 días en enviarme el equipo (y eso porque a los 30 volví a llamar sino...)
1 day, 23 hours ago
Simon, hay que apoyar al paisa.
1 week, 2 days ago
Hay como cinco: Evince, gv, xpdf, gwenview, etc.
1 week, 2 days ago
¿Quién es el imbécil que asocia por default los PDFs con el Gimp? ¡Está bien que sean inteligentes pero no exageren!
1 week, 2 days ago
¿Facebook en qué lenguaje lo programan? Está poquísima madre su interfaz
3 weeks, 1 day ago
¿Qué tal 31 cartones?
3 weeks, 1 day ago
Desde hoy tengo 31 días para cumplir 31 años. Tengo que hacer 31 cosas que no he hecho en mi vida para conmemorarlo :-P
3 weeks, 2 days ago
Juar juar juar :-D
3 weeks, 6 days ago
"Somos Pepe y Tono y somos empresarios, subempleamos a mexicanos no pagandole sus derechos y evadiendo obligaciones laborales."
3 weeks, 6 days ago
Mis Albums
FirefoxjEdit.orgGimpOpenOffice.orgHacker
Top
Colectivo MonoNeurona.org © 2002-2010.