LesOlivex

Serveis informàtics



zenity

Category : bash gen 22nd, 2015
zenity

Zenity nos puede servir para aquellos scripts que lanzamos en segundo plano y no vemos la salida que produce el…

Leer archivo linea por linea en bash

Category : bash gen 22nd, 2015
while read linea ; do 
echo linea: $linea
read -p '[ENTER] para continuar' tecla </dev/tty
done < .bash_profile

Filtrar por columnas con colrm

Category : bash gen 22nd, 2015
ls -l | colrm 1 20

Elimina las columnas de la 1 a la 20

Cortar lineas con cut

Category : bash gen 22nd, 2015

Con cut podemos cortar las lineas de un fichero de diferentes maneras:

echo "Eduardo Magrané" | cut -c3 # Devuelve el carácter numero 3 (la u)

echo "Eduardo Magrané" | cut -d' ' -f2 # Devuelve el apellido

Opciones:
-c puede recibir un patrón -c3-5 sera del 3 al 5
-d Indicas el limitador entre campos
-f Numero de campos también puede ser un patrón.

Saber si estamos en una consola desde bash

Category : bash gen 22nd, 2015
if [ `tty` ] ; then
   echo 'Estamos en consola'
else
   xterm -e "echo No estamos en consola; read"
   echo 'No estamos en consola'
fi

Colocando esta linea en la cabecera de un script conseguimos detectar si estamos en consola, y en caso de no estarlo nos lanza una terminal

[[ `tty` ]] || ( ( exec ${TERM:-xterm} -e "$0 $* ; read" & ) ;  exit )

Con ${TERM:-xterm} en caso de tener una terminal definida se lanzara con ella sino con xterm

bash archivos con espacios

Category : bash gen 11th, 2015

Trabajar con archivos que contienen espacios puede ser un dolor de cabeza con bash.

Aquí dejo un ejemplo de como hacerlo.

En este ejemplo vamos a buscar los archivos que subversion nos indica que han sido modificados:

# Se definie el fin de linea como el separador entre parámetros
DIFS="$IFS" ; IFS=$'\n'
echo
for x in $(svn status | grep ^M | awk -v FS='M      ' '{printf "\n%s",$2}') ; do
   echo - "$x"
   parametros="$parametros '$x'"
done
IFS="$DIFS"
echo
read -n 1 -s -p 'Añadir (s/n): ' OPCION
if [ "$OPCION" = 's' ] ; then
   cmd="$cmd $parametros" ; eval $cmd
fi

Añadimos en un array los archivos recibidos:

declare -a e_archivos_seleccionados=()
c=0
while [ -n "$1" ]; do
   echo - "$c) $1"
   e_archivos_seleccionados[$c]="$1"
   shift 1
   let c=c+1
done

Añadimos lista de archivos a base de datos:

for c in `seq 0 ${#e_archivos_seleccionados[*]}` ; do

   x="${e_archivos_seleccionados[$c]}"
   echo "- $x"
   # Comprobar que no este ya en la base de datos
   SQL="SELECT nombre from rMovimientoArchivos WHERE nombre='$x' AND idMovimiento=$movimientoId"
   SALIDA=`ejecutarSQL "$SQL" "-N"`

   if [ "$SALIDA" != "$x" ] ; then

     SQL="INSERT INTO rMovimientoArchivos VALUES ($movimientoId,'$x')"
     ejecutarSQL "$SQL"
     if [ "$?" != "0" ] ; then
        mensajes "Archivo: $x no fue añadido a movimiento: $movimientoId"
     else
        mensajes "Archivo: $x añadido a movimiento: $movimientoId"
     fi

   fi

done

Pasar un array de archivos a un comando colocando comillas para que no de problemas.:

parametros="$(for n in `seq 0 $((${#aSALIDA[*]}-1))` ; do echo -n "'${aSALIDA[$n]}' " ; done)"
cmd="$mt_editor_dev $parametros"
eval "$cmd"

Uso de variables en bash

Category : bash gen 11th, 2015

Variables variables:

a=${!variable}

Si no existe una cogemos la otra:

${!variable:-NULL}

Ubicación real de script en bash

Category : bash gen 11th, 2015

Nos aseguramos que el directorio de la aplicación es realmente el suyo y no el de un enlace simbólico.

# Si es un enlace hay que buscar el directorio de programas sobre al que apunta
if [ -L "$0" ] ; then
   DIR_PROGRAMAS=$(dirname "`readlink $0`")
else
   DIR_PROGRAMAS=$(dirname "$0")
fi

Saber si una función esta definida en bash

Category : bash gen 11th, 2015
$[[ $(type evento >/dev/null 2>&1) ]] && evento "rama_version"

Primera letra en mayúsculas con bash

Category : bash gen 11th, 2015
MODULO="modulo"
mayuscula=$(echo $MODULO | awk ' { out = out" "toupper(substr($0,1,1))substr($0,2) } END{ print substr(out,2) } ')
echo $mayuscula