4Tema4SHELLYFILTROS

8
1 PROGRAMACIÓN SHELL Y FILTROS VARIABLES Y PARAMETROS POSICIONALES Una variable se crea al asignarle un valor : nombre=valor (si valor es alfanumérico y tiene espacios en blanco debe ir entre comillas. El tipo de la variable viene determinado por su contenido. Para usar una variable tiene que ir acompañada del símbolo $ y se visualizan con la orden echo. Por acuerdo los nombre de las variables se escriben en mayúsculas. Existe la posibilidad de enviar parámetros a los shell script de usuario y controlarlos. De tal manera que: $* Muestra todos los parámetros $# Muestra número de argumentos. $? Valor de retorno del último mandato: cero si se ha ejecutado bien y se interpreta como verdadero. Distinto de cero si se ha ejecutado mal y se interpreta como falso. Al contrario que el Lenguaje C. El orden en los que se envían determinan su uso en el script, a razón de : Primero es $0, segundo es $1,….., décimo es $9. VARIABLES ENTORNO env Indice de todas las variables definidas en el entorno. export <VARIABLE> Exporta una variable al entorno. Podemos referirnos a ella mediante $VARIABLE. set Lee y escribe variables de entorno. SENTENCIAS DE CONTROL Sentencia IF Sintaxis: if expresión then ….. [else ….] fi Expresión puede ser el valor de una variable o una orden. Si es esto último se evalúa el valor de retorno, si ha devuelto un cero se interpreta Verdadero, si ha devuelto distinto de cero se interpreta como false. Sentencia case : Sintaxis: case expresión in valor1) ;; valor2|valor3) ;; valorN) ;; *) ;; esac

description

Shell y filtros en Ubuntu

Transcript of 4Tema4SHELLYFILTROS

Page 1: 4Tema4SHELLYFILTROS

1

PROGRAMACIÓN SHELL Y FILTROS VARIABLES Y PARAMETROS POSICIONALES Una variable se crea al asignarle un valor : nombre=valor (si valor es alfanumérico y tiene espacios en blanco debe ir entre comillas. El tipo de la variable viene determinado por su contenido. Para usar una variable tiene que ir acompañada del símbolo $ y se visualizan con la orden echo. Por acuerdo los nombre de las variables se escriben en mayúsculas.

Existe la posibilidad de enviar parámetros a los shell script de usuario y controlarlos. De tal manera que: $* Muestra todos los parámetros $# Muestra número de argumentos. $? Valor de retorno del último mandato: cero si se ha ejecutado bien y se interpreta como verdadero. Distinto de cero si se ha ejecutado mal y se interpreta como falso. Al contrario que el Lenguaje C. El orden en los que se envían determinan su uso en el script, a razón de :

Primero es $0, segundo es $1,….., décimo es $9.

VARIABLES ENTORNO env Indice de todas las variables definidas en el entorno. export <VARIABLE> Exporta una variable al entorno. Podemos referirnos a ella mediante $VARIABLE. set Lee y escribe variables de entorno.

SENTENCIAS DE CONTROL Sentencia IF Sintaxis: if expresión

then …..

[else ….] fi Expresión puede ser el valor de una variable o una orden. Si es esto último se evalúa el valor de retorno, si ha devuelto un cero se interpreta Verdadero, si ha devuelto distinto de cero se interpreta como false.

Sentencia case: Sintaxis: case expresión in valor1) … … ;;

valor2|valor3) … ;; valorN) … ;; *) … ;;

esac

Page 2: 4Tema4SHELLYFILTROS

2

Se ejecutan las órdenes entre el carácter ) y la cadena ;; si el valor indicado coincide con la expresión. Es posible indicar varios valores antes de cada paréntesis, separándolas con el carácter | . También se puede utilizar como patrón los caracteres [ ] indicador de un rango y ? que equivale a cualquier carácter. Sentencia while: Sintaxis: while expresión

do …. done Se ejecutan las órdenes situadas entre do y done, mientras la expresión sea verdadera (cero). Si la expresión no es verdadera en un principio, no se llegan a ejecutar ninguna vez. Si se especifica como expresión el signo : , se genera un bucle infinito e incondicional. Sentencia until: Sintaxis : until expresión do …… done Se ejecutan las órdenes situadas entre do y done, mientras la expresión no sea verdadera (distinto de cero). Si la expresión es verdadera en un principio, no se llegan a ejecutar ninguna vez las órdenes contenidas en la Estructura. Sentencia for: Sintaxis: for expresión in valor1 valor2 …. valorN do …. done Se ejecutan las órdenes situadas entre do y done tantas veces como valores se indiquen o desplieguen detrás de in. Existe un comando llamado seq que visualiza una secuencia de números. Por ejemplo si tecleamos en línea de comandos seq 1 10 . Aparecerá en pantalla todos los números comprendidos entre los indicados, uno por línea. Si se indican tres números el primero y tercero indican el intervalo y el segundo la frecuencia de salto. Por ello este comando en combinación con el for, permite hacer estructuras repetitivas numéricas. Ejemplos: For i in `seq 1 10` Do

For i in `seq 1 2 10` Do

Page 3: 4Tema4SHELLYFILTROS

3

Echo $i done Cuenta de uno a diez.

Echo $i done Cuenta de uno a diez. De 2 en 2.

CALCULOS Y EXPRESIONES CONDICIONALES

Sentencia expr: Permite la realización de cálculos numéricos. Sintaxis: expr expresión Expresión se refiere a cálculo aritmético normal. Es Necesario que cada elemento esté rodeado por blancos. La expresión usa valores enteros sin tipo y operadores aritméticos normales, estos son: + suma - resta / división \* multiplicación, el símbolo \ es necesario ya que * es el metacarácter comodín.

Sentencia test. Evalúa expresiones condicionales. Sintaxis: test condición ó su abreviatura [ condición ]

En la abreviatura los espacios en blanco antes y después de los corchetes son necesarios. La condición se construye teniendo en cuenta que:

CONDICIÓN EVALUACIÓN FICHEROS -s archivo Verdadero si existe el archivo y no está vacío. -f archivo Verdadero si existe archivo y es ordinario -d archivo Verdadero si existe archivo y es directorio -r archivo Verdadero si existe archivo y es de lectura -w archivo Verdadero si existe archivo y es de escritura -x archivo Verdadero si existe archivo y es de ejecución. ! -condición Negación de todo lo anterior. CADENAS (con valor entre comillas dobles) $VARIABLE = cadena Verdadero si son iguales $A != cadena Verdadero si no son iguales -n cadena Verdadero si no está vacía -z cadena Verdadero si está vacía ! -n ó -z cadena Negación de lo anterior. NUMEROS variable -eq valor Verdadero si son iguales variable -ne valor Verdadero si no son iguales variable -gt valor Verdadero si variable > valor variable -ge valor Verdadero si variable >= valor variable -lt valor Verdadero si variable < valor variable -le valor Verdadero si variable <= valor

Page 4: 4Tema4SHELLYFILTROS

4

Las condiciones se agrupan entre paréntesis y se combinan con los operadores lógicos -a (AND), -o (OR) y !(NOT).

OTRAS ÓRDENES ÚTILES. read : Permite introducir datos desde la entrada estándar. Sintaxis: read variable Hasta encontrar un <intro> o un final de fichero, y los almacena en la variable. exit: Sale del script. Sintaxis:

exit [número] El valor numérico será el valor de retorno del programa y el que se evaluará. break : interrumpe el bucle. continue: Termina la iteración actual y pasa a la siguiente. shift : Desplazamiento de argumentos de shell. Desplaza los argumentos que recibe un programa shell una posición a la izquierda. El argumento 1 desaparece y el i => i - 1. export : Exporta variables a los subshell’s. Sintaxis: export VARIABLE1 VARIABLE2 ….. VARIABLEn FILTROS

Orden tr Transcribe caracteres de una forma a otra. Sintaxis: tr [-opciones] cadena_inicial cadena_final Las cadenas pueden estar especificadas mediante un rango de la forma : [cadena_inicial-cadena_final]. Las dos cadenas tienen que tener el mismo número de caracteres. Opciones: -d Suprime los caracteres de la cadena inicial. -s Suprime las repeticiones consecutivas. Ordenes: tail y head. El comando tail permite visualizar el final de un archivo de texto o hacer el seguimiento del crecimiento de este. Sintaxis: tail [desplazamiento] [-f ] archivo Desplazamiento: Es un número que representa a las líneas del archivo que se empieza a visualizar. Si a este número le precede el signo -, el desplazamiento está relacionado con el final del archivo. Si se utiliza el +, el desplazamiento está relacionado con el comienzo del archivo. Si no se especifica nada, muestra las 10 últimas líneas.

Page 5: 4Tema4SHELLYFILTROS

5

-f Controla el crecimiento del archivo. Esto es un bucle de salida sin fin y tiene que ser terminado con la tecla de interrupción. El comando head muestra la porción inicial de un fichero. Sintaxis: head [-líneas] lista_de_archivos -líneas Es el número de líneas a visualizar desde el principio del archivo. Orden sort. Permite ordenar y fusionar archivos de texto. Las clasificaciones pueden basarse en campos de caracteres o numéricos, y pueden especificarse varias claves de ordenación. Sintaxis: sort [-opciones] lista_de_archivos La acción que realiza por defecto es la de ordenar alfabéticamente por el inicio de línea (importante, el primer campo es el número 0) con base ASCII y utiliza el carácter blanco como separador de campo. El resultado lo dirige hacia la salida estándar. Si no se especifica ningún fichero asume la entrada estándar. Opciones: -c Comprueba si los archivos están ordenados, y si es así, no se genera ninguna salida. -m Fusiona los archivos especificados. Asume que ya están ordenados. -u Elimina las líneas repetidas. -o archivo Especifica el nombre del archivo de salida. Si no se especifica es la salida estándar. -d Solo considera letras, cifras y espacios en blanco. No caracteres especiales. -f Trata mayúsculas y minúsculas como iguales. -i Ignora los caracteres no imprimibles de las claves de ordenación. -M Trata la clave de ordenación como si fuera un mes. MAY es menor que

JUN, que a su vez es menor que JUL, y así sucesivamente. -n Especifica que una clave es numérica, es decir, realiza la ordenación

numérica. -r Invierte el orden de ordenación. -tcar Utiliza car como separador de campo en vez de tabuladores o blancos. -b Ignora blancos en la clave de ordenación. +num Comienza la ordenación por el campo de posición num. Recordar que el

primer campo es el cero. -num Detiene la comparación antes del campo de posición num.

Orden uniq. Quita las líneas que son idénticas, produciendo una sola línea de salida. El comando uniq asume que el archivo ya está ordenado puesto que las líneas que son iguales deben ser adyacentes. Sintaxis: uniq [-opciones] entrada salida La entrada se refiere al nombre del archivo que se va a leer, si no se especifica asume la estándar.

Page 6: 4Tema4SHELLYFILTROS

6

La salida es el nombre del archivo que se va a crear con el resultado. Si no se especifica es la estándar. La salida si se especifica no puede ser la misma que la entrada. Opciones: -u Sólo muestra las líneas que no están repetidas. -d Muestra sólo las líneas que están repetidas. -c Muestra un informe en el que la columna de la izquierda ofrece el

número de repeticiones y luego la línea en sí misma. +num Ignora los num primeros caracteres. -num Ignora los num primeros campos. Orden wc. Cuenta el número de líneas, palabras y caracteres de un fichero. En la acción por defecto muestra lo anterior y además en ese orden. Sintaxis: wc [-opciones] [lista_ficheros] Opciones : -c Cuenta solo el número de caracteres. -w Cuenta sólo el número de palabras. Una palabra es cualquier cadena de

caracteres separados por un espacio, un tabulador o una nueva línea. -l Cuenta sólo el número de líneas o, para ser más exactos, cuenta el

número de caracteres de fin de línea encontrados. Orden cut. Este comando extrae campos de una lista de archivos. Los campos pueden estar definidos como posiciones de caracteres o relativamente con un separador de campo. El separador por defecto es el tabulador. Sintaxis: cut [-clista_caracteres] lista_archivos cut [-flista_campos] [-dseparador] [-s] lista_archivos Opciones: -clista_caracteres Muestra los caracteres especificados por los números

(posiciones) de la lista. Puede ser una lista separada por comas, un rango separado por guiones o un a combinación de ambos.

-flista_campos Muestra los campos especificados mediante los números de la lista. Los campos se distinguen por un carácter separador. Si se repite el separador varias veces seguidas , no se tratan como un separador. Para indicar la lista se hace con la misma sintaxis de los caracteres.

-dseparador Especifica el separador de campo. Un carácter de tabulación es el valor predeterminado. El separador puede ser cualquier carácter.

-s Suprime las líneas que no tienen separador de campo. Las opciones -c y -f son mutuamente excluyentes. Existen más opciones que pueden consultarse en las páginas de man. En la lista, tanto de caracteres como de campos el primero está numerado con el número 1, a diferencia de sort que era el 0.

Page 7: 4Tema4SHELLYFILTROS

7

Orden paste. Produce una salida en forma de columnas desde uno o más archivos, dónde cada archivo proporciona una columna de la salida, paste se utiliza frecuentemente con cut para reordenar columnas de un archivo. Si no se especifica nada en contra la salida es la estándar. Sintaxis: paste [opciones] lista_archivos Opciones: -dcaracter Especifica el carácter que se utiliza para delimitar cada columna.

El valor predeterminado es el tabulador. -s Hace que paste pase por cada archivo de forma separada. Esta

opción utiliza líneas del archivo para cada columna. La primera línea es la primera columna, la segunda es la segunda columna y así sucesivamente.

Orden grep. Busca patrones que están en los archivos e informa de ello cuando lo encuentra. El nombre del comando proviene del uso de expresiones regulares. El informe que presenta consiste en ir visualizando cada línea del fichero que contiene un caso del patrón especificado. Sintaxis: grep [-opciones] [cadena_patrón] [fichero] Opciones: -i Trata mayúsculas y minúsculas por igual. -n Numera las líneas de salida. -c Cuenta el número de líneas de salida. -v Visualiza líneas que no cumplen el patrón especificado. -f archivo El archivo especificado contiene las cadenas a buscar. No funciona con expresiones regulares. A continuación vamos a estudiar las expresiones regulares. Expresión Significado

C Representa a cualquier carácter. ^ La expresión regular se busca al principio de la línea. $ La expresión regular se busca al final de la línea. . Representa a cualquier carácter excepto al fin de línea. c* Cero o más ocurrencias consecutivas del carácter c. Para

referenciar todas las líneas del fichero, poner: .* [cadena] Cualquiera de los caracteres especificados en la cadena. Se

puede especificar un rango, de la forma: [a-z] [^cadena] Cualquiera de los caracteres no especificados en la cadena. R1R2 Expresión R1 seguida de expresión R2.

Sin expresión, corresponde con nueva línea. \ Se utiliza para anular el significado de los metacaracteres que

le siguen.

Orden egrep Es una evolución de grep, se caracteriza porque busca más de un objetivo poniendo los archivos en líneas separadas. O una forma nueva consistente en

Page 8: 4Tema4SHELLYFILTROS

8

utilizar el simbolo | separando los diferentes objetivos (no poner espacios en blanco ni antes ni después del simbolo). Los simbolos que usa en las expresiones son los mismos de grep y además: Expresión Significado

+ Significa una o más repeticiones del carácter anterior. ? 0 o una repetición del carácter anterior. | Identifica A o B ( ) Trata texto entre paréntesis como grupo.

Por último vamos a exponer las opciones que utiliza este comando y que son una mezcla de las dos variantes anteriores: Opciones: -i Trata mayúsculas y minúsculas por igual. -n Numera las líneas de salida. -c Cuenta el número de líneas de salida. -v Visualiza líneas que no cumplen el patrón especificado. -f archivo El archivo especificado contiene las cadenas o expresiones de búsqueda.