BULMA

Bulma se une a la protesta contra SOPA y PIPA

Bergantells Usuaris de GNU/Linux de Mallorca i Afegitons   |   Bisoños Usuarios de GNU/Linux de Mallorca y Alrededores
CONTENIDOS
. Jornadas de software libre
. Version para PDA
. Enlaces breves
. La asociacion
. Los mas leidos
. Autores [Actividad]
. Ultimos Comentarios
. Todos los titulares!
. Estadisticas
. Guia de estilo
. ¿Sugerencias?
. Wiki
. XML [Ayuda]
Listas de correo
. Archivos bulmailing
. Archivos BulmaGes
Radio libre :-)
. Des de la Xarxa (Archivos)
. Mallorca en Xarxa
Busquedas

+ Enlaces Linux
Ultimos kernels
(22/05/2013 06:15:03)
    
Google


En bulma.net
En internet
Dale potencia a tus bourne-shell scripts (26566 lectures)
Por Domingo Fiesta Segura
C2H5OH (http://www.krenel.net)
Creado el 18/08/2004 04:35 modificado el 18/08/2004 04:35

Aquí os propongo algunos trucos para programar scripts. Supongo que los que estéis interesados ya sabéis algo sobre shellscripts.

Pagina1/3

Índice

    1. Manipulando las expansiones de variables
    2. Magia con el $IFS
    3. Manejo de descriptores de fichero
      3.1. Introducción a redirecciones
      3.2. Operaciones de redirección
      3.3. Modo de uso
      3.4. Otras redirecciones
    4. Manejo de señales
    5. Colofón

Para hacer el artículo más breve y llevadero me limitaré a exponer ejemplos con alguna explicación ocasional. El objetivo es despertar vuestra curiosidad y que experimentéis por inciativa propia.

Todo lo que aquí se comenta está explicado en la página man del sh(1)

1. Manipulando las expansiones de variables

Ya que siempre estamos manejando texto que entra, texto que sale, tuberías y demás historias, existen algunos mecanismos prácticos antes de recurrir al Perl, Awk o Sed. Y de paso nos ahorramos algunos ciclos.

Disponemos de unos pocos operadores para controlar la expansión de las variables del shell, aquí os describo los más sencillos.

  • Valor alternativo: ${variable:-valor} Si variable NO está definida entonces la expansión produce valor, si variable sí está definida se expande su contenido.
  • Valor fijo: ${variable:+valor} Al contrario que el anterior si variable está definida entonces la expansión es valor, si variable NO está definida entonces se produce una cadena vacía "".
  • Eliminar prefijo: ${variable#prefijo} Donde prefijo es un patrón (expresión regular en formato sh). Dicho patrón se aplica al contenido de variable por el principio y si hay coincidencia, ésta se omite en la expansión. En caso de que no coincida se expande variable de forma normal
  • Eliminar sufijo: ${variable%sufijo} Igual que el anterior salvo que se busca el patrón desde el final del contenido de variable.

Los operadores para eliminar prefijo y sufijo buscan la coincidencia más corta, existen versiones para buscar la coincidencia más larga: ${variable##prefijo} y ${variable%%sufijo} respectivamente. Además, donde indicamos el prefijo o sufijo podemos poner cualquier expresión que pueda ser evaluada por el shell. Como por ejemplo:

etanol@botijo:~$ texto=piri-jandemor
etanol@botijo:~$ prefijo=piri-
etanol@botijo:~$ echo ${texto#piri-}
jandemor
etanol@botijo:~$ echo ${texto#$prefijo}
jandemor
etanol@botijo:~$ echo ${texto#$(echo piri-)}
jandemor

Hay unos cuantos más, pero estos me han parecido los más útiles. Vamos con unos ejemplos:

#! /bin/sh
# join.sh: Script para concatenar todos los ficheros 00-nombre
# 01-nombre 02-nombre etc... en nombre. Esto se hace para todos los ficheros
# que empiecen por dos dígitos y un guión en el directorio actual.

for parte in [0-9][0-9]-*; do # El comando ls(1) ya hace "sort"
    cat $parte >>${parte#[0-9][0-9]-}
done

Otro ejemplo:

#! /bin/sh
# decent-extension.sh extensión_vieja extensión_nueva: Script para renombrar
# todos los ficheros con "extensión_vieja"  por "extensión_nueva". Por ejemplo:
# ./decent-extension.sh TXT txt

for fichero in *.$1; do
    mv -v $fichero ${fichero%.$1}.$2
done

2. Magia con el $IFS

IFS son las siglas de Inter Field Separator, que significa separador de campos. Se trata de una variable muy especial para el shell, en ella se encuentran todos los caracteres que pueden ser delimitadores de campo o de palabra. Viene a ser como el FS del awk

Esta característica del shell no tiene mucho más misterio. Para verificarlo usaremos un ejemplo:

#! /bin/sh
# which.sh nombre_binario: Implementación alternativa del conocido programa.
#
# Esto sirve de emergencia en caso de no disponer o no encontrar el verdadero
# comando "which".


IFS=":"
for dir in $PATH; do
    if test -x "${dir%/}/$1"; then
        # Eliminamos la "/" del final si la hay, por si acaso
        echo "${dir%/}/$1"
        exit 0
    fi
done
exit 1

Paginas:  1  2  3  Abreviatura Siguiente>>

Imprimir
Version para
imprimir

Imprimir
Version
PDF
GRACIAS
Distribuciones Universal
Por el servidor
Dpto. de Matematicas e Informatica
Calificacion
***0
Vots: 31
Danos tu opinion:
**** Excelente
***0 Muy Bueno
**00 Bueno
*000 Regular
0000 Malo
SECCIONES
Noticia
Breve
Truco
Enlace
Participa
Proyecto
Articulo
Webbulma
Manoletada :-)
Seguridad
Modificado: 23/1/2008 19:57:44 | Tiempo Total: 0.017 segs | Kernel: Linux - i686 - 2.6.26-2-686 | Last boot: too much time ago!!
Powered by Apache    MySQL    PHP    Gimp