Mostrando entradas con la etiqueta bash. Mostrar todas las entradas
Mostrando entradas con la etiqueta bash. Mostrar todas las entradas

domingo, 25 de noviembre de 2012

Comando tr

Orden tr

Sintaxis:

tr [-dsc] cadena1 cadena2

La orden tr se emplea como traductor. Como todo filtro, tr lee datos en la entrada estándar, los procesa y muestra los resultados en la salida estándar. Supongamos que tenemos un fichero con las siguientes líneas:
$cat fichero
Este es un archivo de texto 
QUE CONTIENE MAYUSCULAS Y minusculas.
Veamos como funciona mediante ejemplos:

Sustituir caracteres

Sustituimos todos los caracteres del rango A a Z a sus equivalentes en el rango a a z.

$ tr "[A-Z]" "[a-z]" < fich 
este es un archivo de texto 
que contiene mayusculas y minusculas. 

Sustituimos todos los caracteres del rango a a z a sus equivalentes en el rango A a Z.
tr "[a-z]" "[A-Z]" < fich 
ESTE ES UN ARCHIVO DE TEXTO 
QUE CONTIENE MAYUSCULAS Y MINUSCULAS.

También podemos sustituir un rango de carácteres por un carácter cualquiera: Convertimos el rango de caracteres de la A a la Z por el carácter x.
tr "[A-Z]" x < fich 
xste es un archivo de texto 
xxx xxxxxxxx xxxxxxxxxx x minusculas.

Eliminar determinados caracteres

opción -d

$ tr -d "[A-Z]" < fich 
ste es un archivo de texto 
    minusculas.


Eliminar caracteres repetidos 

Imagina un fichero con el siguiente texto:

$cat fichero
Aqquuuiii tttteeeennngggoo cccciiiiiieeeeerrrrttttooooossss ccccaaarrraaacccctttteeerrreeeesss rrrreeeepppeeettttiiidddddooooossssss

$ tr -s "[a-z]" < fich2 
Aqui tengo ciertos caracteres repetidos 

Indicar complementario

 En este ejemplo le indicamos que sustituya los caracteres que no sean minúsculas por espacios.
$ tr -c "[a-z]" " " < fich 
 ste es un archivo de texto                            minusculas

sábado, 13 de octubre de 2012

Script bash - validar dni

Aquí tenéis un pequeño script en bash, para validar si un DNI es correcto o no.
#!/bin/bash

cadena="TRWAGMYFPDXBNJZSQVHLCKET";

longitud=${#1}
if [ "$longitud" -eq 9 ]
then
 posicion=`expr ${1:0:8} % 23`
 letra=${cadena:posicion:1}
 letradaentrada=`echo ${1:8} | tr [a-z] [A-Z]`

 if [ $letra == $letradaentrada ]
 then 
  echo "número DNI correcto"
  exit 0
 else 
  echo "letra inválida"
  exit 1
 fi
else
 echo "Longitud errónea"
 exit 1
fi

exit 0
Ejecutamos d la siguiente manera.
# bash dni.sh 41033454s
letra inválida

jueves, 6 de septiembre de 2012

Órdenes de propósito general en Linux - Iniciar y cerrar sesión

Las órdenes que vamos a ver a continuación, nos serán de utilidad para iniciar y cerrar sesiones en un sistema Linux de diferentes maneras. login: utilizaremos esta orden para establecer una nueva sesión de trabajo con el sistema. passwd: Utilizamos esta orden para cambiar nuestra contraseña logout: Finalizamos sesión. exit: utilizaremos esta orden para finalizar una sesión de trabajo. ^d: Con Ctrl+d enviaremos una señal de exit al sistema y cerraremos sesión. startx: En caso de estar trabajando sin las X Windows, con esta orden iniciariamos estas. poweroff: orden para apagar. halt: orden para apagar. shutdown: orden para apagar. reboot: Con esta orden le diremos al sistema que se reinicie. Alt+Ctrl+Supr: Con esta combinación de teclas enviamos una orden reboot al sistema.

lunes, 9 de julio de 2012

¿Cómo usar getopts?

Presentamos un pequeño script utilizando el comando getopts. Con este comando podemos procesar la entrada que se le pasa a un script. Para usarlo vemos que sólo tenemos que ponerla en un while y diferenciar entre las opciones que necesitan argumentaos y las que no. Esto se indica con dos puntos a la derecha de la opción. Como podemos ver, para cada opción recogemos su variable y la procesamos al terminar de recolectarlas.
#!/bin/bash
 
while getopts ":a:f:v:" opt; do
  case $opt in
    a)
     VARIABLE=$OPTARG
      ;;
    f)
     FICHERO=$OPTARG
      ;;
    v)
     VALUE=$OPTARG
      ;;
    \?)
      echo "Opcion invalida: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "La opcion -$OPTARG necesita un argumento." >&2
      exit 1
      ;;
  esac
done

cat $FICHERO | sed s/$VARIABLE=.*/$VARIABLE=$VALUE/ > $FICHERO
Después de recoger los parámetros ejecutamos la útlima línea. Lo único que hace es buscar la variable en el fichero indicado y sustituirla por el valor introducido.

domingo, 11 de marzo de 2012

Como usar el comando find en GNU/Linux

Usaremos el comando find para localizar ficheros por múltiples criterios: ◦ Por nombre o patrón. ◦ Por usuario y grupo. ◦ Por tipos de elementos ( fichero, directorio, socket, pipe...) ◦ Por medida. ◦ Por permisos asignados. ◦ Por fecha o cualquier otro atributo de tiempo. Con la siguiente orden buscamos un fichero, un conjunto o un patrón en el sistema de ficheros a partir de un punto de origen, en este caso en el directorio /boot:
$ find /boot -name "*.img" -print
Con la siguiente orden buscamos todos los ficheros que son hard links de un determinado fichero:
$ find . -samefile dades.txt
Con la siguiente orden buscamos todos los ficheros que son los enlaces simbólicos de un fichero dado.
$ find . -lname dades.txt
Con la siguiente orden buscamos ficheros de una medida concretos. (o entre uns valors)
# find /boot -size +3M -print

# find /boot/ -size +3M -size -5M -print
Con la siguiente orden buscamos ficheros por usuario y grupo
# find /dev -user vcsa -print
Con la siguiente orden buscamos ficheros según los permisos que tiene asignados.
# find /usr/bin -perm -u=s -print   # setuid activado

# find /usr/bin -perm -gu=s -print  # setuid i setgid simultáneamente

# find /usr/bin -perm /ug=s -print  # setuid o setgid o los dos

# find /usr/bin -perm 4755 -print   # los permisos son exactamente 4755
Con la siguiente orden buscamos todos los ficheros posteriores en una fecha determinada
# find /boot -newermt "01/02/2010" -print # modificados posteriormente del 01-01-2010

# find /boot -newermt "$(date -d "-1Year" +%m/%d/%Y)" -print # más recientes que hace un año
Con la siguiente orden buscamos en un conjunto de directorios( listado de ordenes de 2 letras que comienzan por la letra 'a'.
# find /sbin /usr/bin /usr/sbin -name a? -print
Con la siguiente orden buscamos ficheros según el tipo de fichero que sea.
# find /dev -type s -print # listado de los ficheros de tipo socket

# find /tmp -empty -print # listado de los ficheros vacíos
Espero les sea útil.