que el apreciar y disfrutar el cuerpo desnudo de una mujer...
Mi impresora es gay, dice que es "bidireccional". Asarch

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

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

ana_20 wrote:
kiero un curso basico d viasual net!!! i soi d peru
on 14/11/08

ana_20 wrote:
kiero un curso basico d viasual net!!! i soi d peru
on 14/11/08

hola wrote:
alguiene q estudie sistemas
on 23/10/08

hola wrote:
hola aluien de peru
on 23/10/08


Otro 'asarch' que pierdo (el primero fue en GMail).
3 hours, 57 minutes ago
Chale, un puto gringo puto me gano el 'asarch' en Facebook. @!#!@#$$@@!!! >:-(
3 hours, 58 minutes ago
Solamente si vas pal' Istmo: Salina Cruz. Si es asi, ¡Bienvenido! :-)
5 days, 22 hours ago
Deberías de intentar en HSBC, Inverlat, Banorte o en Banamex. Esas si son mamadas. Bancomer es el servicio mas rapido en mi localidad.
1 week, 1 day ago
Muriéndose de dolor, amor y de decepción...
1 week, 1 day ago
lol :-D
1 week, 2 days ago
¡Arrepientase de sus pecados culebras!
1 week, 3 days ago
Por cierto, felicidades :-)
2 weeks, 1 day ago
¿Qué marca y modelo es?
2 weeks, 1 day ago
Emerging Gentoo on my laptop :-)
2 weeks, 1 day ago
Galerias
FirefoxjEdit.orgGimpOpenOffice.orgHacker
Top
Colectivo MonoNeurona.org © 2002-2009.