10 Buenos hábitos a la hora de programar en shell scripting

febrero 23, 2007 at 8:35 am 5 comentarios

Traducción propia del artículo de IBM http://www-128.ibm.com/developerworks/aix/library/au-badunixhabits.html

1 – Definir una estructura de árbol de una sóla vez

mkdir -p tmp/a/b/c  

en vez de 

~ $ mkdir tmp 
~ $ cd tmp 
~/tmp $ mkdir a 
~/tmp $ cd a 
~/tmp/a $ mkdir b 
~/tmp/a $ cd b 
~/tmp/a/b/ $ mkdir c 
~/tmp/a/b/ $ cd c 
~/tmp/a/b/c $ 

Y mejor todavía, pues crea el directorio project y dentro los distintos directorios 

mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

2 – Cambiar el path, no mover el fichero. Por ejemplo, no desempaquetar ficheros directamente en el directorio que deseemos. Para ello podemo usar la opción -C

tar xvf -C tmp/a/b/c newarc.tar.gz

3 – Combinar comandos con operadores de control

Por ejemplo:  Ejecutar un comando sólo si otro comando ha devuelto 0 exit status. 

cd tmp/a/b/c && tar xvf ~/archive.tar 

Otro ejemplo: Ejecutar un comando sólo si otro comando no ha devuelto un 0 exit status. 
cd tmp/a/b/c || tar xvf ~/archive.tar

4 – Entrecomillar variables con cuidado

Ejemplos: 
ls tmp/ 
a b 

~ $ VAR="tmp/*" 

~ $ echo $VAR 
tmp/a tmp/b 

~ $ echo "$VAR" 
tmp/* 

~ $ echo $VARa 

~ $ echo "$VARa" 

~ $ echo "${VAR}a" 
tmp/*a 

~ $ echo ${VAR}a 
tmp/a

5 – Usar secuencias de escape para controlar la entrada en el log

cd tmp/a/b/c ||  
> mkdir -p tmp/a/b/c &&  
> tar xvf -C tmp/a/b/c ~/archive.tar 

cd tmp/a/b/c  
>                 ||  
> mkdir -p tmp/a/b/c  
>                    &&  
> tar xvf -C tmp/a/b/c ~/archive.tar 

6 – Agrupar los comandos en una lista para poder ir redirigiendo los resultados

Ej. Ejecutar una lista de comandos en un subshell 

~( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c &&  
> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar )  
> | mailx admin -S "Archive contents" 

Ej. Ejecutar una lista de comandos en el propio shell 

~ $ { cp ${VAR}a . && chown -R guest.guest a &&  
> tar cvf newarchive.tar a; } | mailx admin -S "New archive" 

7 – Usar xargs fuera de find. Usar con -e. Por defecto se considera el símbolo _ como fin de línea. Si por alguna razón aparece ese símbolo en una línea como único carácter con xargs, todo lo que venga detrás no será filtrado. 

~ $ find some-file-criteria some-file-path |  
> xargs some-great-command-that-needs-filename-arguments 

Otros ejemplos de xargs 
$ xargs 
a 
b 
c 
Control-D 
a b c 
~ $ 

Otros ejemplos: 

~/tmp $ ls -1 | xargs 
December_Report.pdf README a archive.tar mkdirhier.sh 

~/tmp $ ls -1 | xargs file 
December_Report.pdf: PDF document, version 1.3 
README: ASCII text 
a: directory 
archive.tar: POSIX tar archive 
mkdirhier.sh: Bourne shell script text executable 
~/tmp $

8 – Evitar usar grep y wc -l. Usar mejor -c que cuenta las líneas y es más rápido

time grep -c and tmp/a/longfile.txt

9 – Es preferible usar awk en vez de grep

Usar 
ls -l | awk '$6 == "Dec"' 

en vez de 
ls -l /tmp/a/b/c | grep Dec 

 10 – No usar tuberías con grep y cat puesto que grep toma el nombre del fichero como argumento
 

BIEN 
time grep and tmp/a/longfile.txt 

MAL 
time cat tmp/a/longfile.txt | grep and
Anuncios

Entry filed under: Linux, Shell scripting, Uncategorized.

Bucle para obtener los directorios dentro de un directorio. Se usa tr como transformador Listado de comandos útiles en Bash

5 comentarios Add your own

  • 1. Esteban  |  abril 4, 2007 en 9:24 pm

    Algunos consejos son muy buenos, pero, alguein sabe el porque de estos 10 puntos ? Algunos son muy obvios, pero por ejemplo el punto 10, no veo ventaja alguna realmente en usar awk.

    Saludos.

    Responder
  • 2. miguel  |  noviembre 14, 2007 en 6:46 pm

    ghhthtthtt

    Responder
  • 3. miguel  |  noviembre 14, 2007 en 6:46 pm

    muy feo

    Responder
  • 4. Waldo  |  noviembre 14, 2007 en 7:52 pm

    Si me ueden ayudar, debo pasar un codigo de error desde una shell (aix) hacia un Control M, lo hago mediante exit $NombreVariable pero Control M no me esta recuperando el valor que entrego.
    gracias.

    Responder
  • 5. uy  |  octubre 23, 2015 en 12:19 am

    yyuiuyi

    Responder

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

Trackback this post  |  Subscribe to the comments via RSS Feed


Calendario

febrero 2007
L M X J V S D
« Ene   Mar »
 1234
567891011
12131415161718
19202122232425
262728  

Most Recent Posts


A %d blogueros les gusta esto: