20071016

una de ksh

Aunque el post anterior puede resultar de utilidad para algunos, no es muy técnico que digamos.

Pues bien, acá tiro algo de ksh (shell por defecto en muchos unix privativos, y se puede instalar en cualquier unix like libre)


#!/bin/ksh

echo "Hola Mundo"


Esto no es muy impresionante, pero hay mucha gente que no sabe que el ksh tiene un modificador para poder evaluar la sintaxis sin ejecutar nada realmente:

ksh -n my_file.sh

Esto lo que hace es evaluar la sintaxis. El problema que puede tener para algunos es que no dice mucho (es parco como todo comando clásico de unix). Lo que se puede hacer para verificar la salida es

ksh -n my_file.sh; echo $?

Si el resultado es 0, quere decir que está todo OK.


[root@myhost ~]# ksh -n k.sh;echo $?
0


Algo que me encontré que me gustó fue:


matias@t0001850023:/usr/local/storage/model/oracle$ ksh -n bk_pos_idm_bd_cold.sh
bk_pos_idm_bd_cold.sh: warning: line 29: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 29: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 30: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 30: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 36: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 36: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 37: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 37: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 41: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 44: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 47: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 47: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 49: `...` obsolete, use $(...)
bk_pos_idm_bd_cold.sh: warning: line 49: `...` obsolete, use $(...)


Se debe a que no le agrada mucho líneas como:


echo "#-> El PostScheduleCMD termino con un status de ERROR `date +'%Y%m%d %H:%M'`"


Simplemente se reemplaza por la forma más usual, que es el $(......) (aunque yo estoy más acostumbrada a la otra).

Otros dos modificadores interesantes son:


set -e
set -x


Todo lo que se pone con el set -e, se puede poner dentro de un script, o en la misma llamada al ksh (ksh -e).

El -e lo que hace es, ante un error, ejecutar el trap ERR y luego salir (ejecuta el trap si está definido, si no, sale simplemente con un código de error). Ejemplo:


matias@t0001850023:/tmp$ cat k.sh
#!/usr/bin/ksh

ls /noexiste

echo "Hola Mundo"


matias@t0001850023:/tmp$ ./k.sh
ls: /noexiste: No existe el fichero o el directorio
Hola Mundo
matias@t0001850023:/tmp$ cat ./k.sh
#!/usr/bin/ksh -e

ls /noexiste

echo "Hola Mundo"


matias@t0001850023:/tmp$ ./k.sh
ls: /noexiste: No existe el fichero o el directorio


La segunda ejecución, da error al ejecutar el ls, y luego aborta. Mientras que la primera ejecuta todo sin importar los errores.

El -x es simplemente un modificador para obtener más debug por pantalla:


matias@t0001850023:/tmp$ cat ./k.sh
#!/usr/bin/ksh -x

ls /noexiste

echo "Hola Mundo"


matias@t0001850023:/tmp$ ./k.sh
+ ls /noexiste
ls: /noexiste: No existe el fichero o el directorio
+ echo 'Hola Mundo'
Hola Mundo
matias@t0001850023:/tmp$


Esto es un punto bastante útil cuando se está desarrollando un script complejo, que tiene muchas líneas y muchos if/while/etc. Todo lo que el ksh evalua, lo muestra por pantalla con un + al principio de la línea. Permitiendo el ver que valores tenía una variable al ser evaluada por un if.

Mientras que el -e es aconsejable que esté siempre (a menos que haya programas que pueden fallar y se trapenan bien los errores), el -x suele ser molesto para una operatoria usual.
Publicar un comentario