Você está na página 1de 17

Programacin en Shell

1. Introduccin a Shell
El intrprete de comandos (Shell) es el interface bsico que ofrece UNIX de cara al usuario, posee un lenguaje propio as
como numerosas caractersticas adicionales.
Existen muchos tipos de shells, entre ellos el C Shell (csh), el Bourne Shell (sh) o el Korn Shell (ksh). En la mayora de las
distribuciones Linux actuales el shell predeterminado es el Bourneagain Shell (bash). Para ver qu shell tienes, ejecuta el
comando siguiente:echo $SHELL.

2. Comandos Bsicos para manejar Unix

El comando bsico para crear un directorio es mkdir. Por su parte, si queremos crear un archivo se puede utilizar
cualquier editor de texto, como se ver ms adelante.
Si queremos ver lo que hay en el directorio donde estemos situados podemos listar los contenidos utilizando el
comando ls.
Para cambiar de directorio podemos utilizar el comando cd.
Para saber en qu directorio estamos podemos utilizar el comando pwd.
El comando rmes el que se encarga de eliminar los archivos que le indiquemos.
Para eliminar un directorio, podemos utilizar el comando rmdir, aunque slo lo borrar cuando ste est vaco.
Para copiar archivos de un lugar a otro tenemos el comando cp, con el cual siempre debemos indicarle el fichero o
directorio origen y el lugar o nombre de destino, aunque sea en el directorio actual.
Si en lugar de copiar los archivos queremos moverlos de sitio podemos utilizar el comando mv. Este comando
tambin se utiliza para renombrar archivos.
man, nos ensea el manual del programa que le indiquemos como parmetro, presionaremos q para salir.
Con man -k seguido de una palabra que haga referencia a la accin que queramos realizar se buscar por entre
todos los manuales del sistema y se mostrarn los que en su descripcin o nombre aparezca la palabra indicada.
Si el manual no nos proporciona toda la informacin que necesitemos tambin podemos usar el comando inf.
Si lo nico que queremos es tener una breve referencia de lo que hace un determinado programa podemos utilizar el
comando whatis.

2.1 Patrones o Metacaracteres

Los patrones nos permitirn aplicar las operaciones que queramos especificando, en una sola instruccin, varios
ficheros que cumplan con una serie de caractersticas especificadas.
Metacaracter
?

Descripcin de la funcin
Comodn a cualquier carcter simple

Iguala cualquier secuencia de cero o ms caracteres

[]

Designa un carcter o rango de caracteres que, como una clase,


son igualados por un simple carcter. Para indicar un rango,
mostramos el primer y el ltimo carcter separados por un guin
().
Con el smbolo! indicamos negacin.

{}

Abreviar conjuntos de palabras que comparten partes comunes

Se usa para abreviar el camino absoluto (path) del directorio


home

2.2 Bsqueda

Tenemos varios comandos que nos permiten realizar bsquedas de diferentes tipos sobre todos los ficheros del
sistema. findes el comando ms verstil para realizar esta accin.
locates otro comando pero, a diferencia del anterior, utiliza una base de datos interna que se actualiza
peridicamente y nos permite hacer bsquedas bastante ms rpidas.

2.3 Tipos y contenidos de ficheros

El comando file nos indica la extensin del archivo.


Si necesitamos ver el contenido de un fichero, uno de los comandos ms bsicos es elcat.
cat archiv
Otro tipo de comando muy til son los que nos buscan un cierto patrn en el contenido de los ficheros. Con el
comando greple podemos pasar como segundo parmetro el nombre del archivo y como primero el patrn que
queramos buscar.
grep p *.txt
Finalmente, para acabar con esta seccin de manipulacin de ficheros lo nico que nos falta por ver es cmo
comparar diferentes archivos. Igual que con las otras operaciones, tenemos varios comandos que nos permiten
hacerlo. diff, cmpy comm realizan comparaciones de diferentes formas y mtodos en los ficheros que les indiquemos.

2.4 Permisos
La idea es definir, para cada fichero o directorio, a qu usuario y grupo pertenece y qu permisos tiene para cada uno de
ellos y para el resto de usuarios del sistema.
Ejecutando ls l veremos como por cada archivo del directorio donde estemos aparece una lnea parecida a la que se
muestra en pantalla:
-rwxr-xr-x 1 user1 grupo1 128931 Feb 19 2000 gpl.txt

Los primeros diez caracteres (empezando por la izquierda) nos indican los permisos del fichero de la siguiente forma:
Carcter 1: esta entrada nos indica si es un fichero o un directorio. En caso de ser un fichero aparece el carcter,
mientras que por los directorios aparece una d'.
Caracteres 2, 3,4: nos indican, respectivamente, los permisos de lectura, escritura y ejecucin para el propietario del
fichero. En caso de no tener el permiso correspondiente activado encontramos el carcter ``-y sino ``r'', ``w'' o ``x''
segn si lo podemos leer (Read), escribir (Write) o ejecutar (eXecute).
Caracteres 5, 6,7: estos caracteres tienen exactamente el mismo significado que anteriormente pero haciendo
referencia a los permisos dados para los usuarios del grupo al que pertenece el fichero.
Caracteres 8, 9,10: igual que en el caso anterior pero para todos los otros usuarios del sistema.
Para cambiar los permisos de un determinado archivo podemos utilizar el comando chmod. Los permisos se indican con
un nmero de tres cifras comprendido entre el 000 y el 777, donde cada una de las cifras codifica los permisos (lectura,
escritura y ejecucin) asociados al propietario del archivo, al grupo al que pertenece el archivo y al resto de usuarios,
respectivamente.

2.5 Algunas herramientas para vigilar procesos

La forma habitual de ver el estado de nuestro sistema es mediante el uso de herramientas que permiten vigilar la
ejecucin de los procesos.Entre stas encontramos: top, free, uptime, etc. Estas herramientas utilizan el
pseudosistema de archivos /proc para obtener la informacin.
La orden ps nos da una instantnea de los procesos del sistema actuales (cuando se ejecuta la orden).
Si queremos tomar diferentes instantneas, debemos de utilizar top, que nos informa de forma interactiva de los
procesos del sistema, del estado de utilizacin de la CPU, la memoria utilizada y libre, la RAM que utiliza cada
proceso, etc.

2.6 Compresin de archivos

La compresin de archivos nos permite ahorrar espacio de disco y tiempo en la transmisin de los mismos.gzip y
bzip2 comprimen uno o varios archivos. Cada archivo es sustituido por uno cuya extensin es .gz o .bz,
respectivamente.
Los archivos son restaurados con las ordenes gunzip ,b unzip2.

3. Metacaracteres sintcticos
Sirven para combinar varias rdenes de LINUX y construir una nica orden lgica. Suministran una forma de ejecucin
condicional basada en el resultado de la orden anterior.
Uniendo rdenes con;
El uso del punto y coma (;) permite escribir dos o ms rdenes en la misma lnea.
cd /home/gsioper ; ls #Cambiamos de directorio y hacemos ls.
Creando cauces con |
Un cauce conecta la salida estndar de la orden que aparece a la izquierda del smbolo | con la entrada estndar de
la orden que aparece a la derecha.
who | sort # La salida de who se utiliza como entrada de sort
Combinado ordenes con ( )
En ocasiones, necesitaremos aislar un cauce, o una secuencia de punto y coma, del resto de una lnea de rdenes.
Por ejemplo, las siguientes rdenes tienen resultados diferentes:
date; who | wc #ejecuta date; ejecutawho cuya salida pasa a wc

(date; who)|wc #ejecuta date y who, sus salidas se pasan a wc


Ejecutando ordenes en segundo plano con &
Para ejecutar una orden en segundo plano slo debemos finalizar la lnea de ordenes con &.
man -k compare &#lazamos de fondo
who | wc #lanzamos de fondo una secuencia de ordenes
Ejecucin condicional de ordenes con || y &&
Separar dos rdenes con || o &&, provoca que el shell compruebe el estado de finalizacin de la primera y ejecute la
segunda slo si la primera falla o tiene xito, respectivamente.
find *.r || echo No se encuentra el archivo
find name *.txt && echo Archivos encontrados

4. Metacaracteres de entrada/salida
>
>>
<

Para enviar la salida de un comando a un archivo, si ste no existe se crear.


La salida del comando se aadir a un archivo, si no existe se crear.
Toma la entrada estndar de un archivo en vez del teclado.
catdato1 >dato2 #Esta instruccin enviar el contenido del archivo dato1 al archivo dato2, si no existe, esta
instruccin lo crear.

catdato1>>dato2 #Esta instruccin aadir el contenido del archivo dato1 al final del archivo dato2, si no existe,
esta instruccin lo crear.

5. Shell Script
Variables

El nombre de una variable de shell puede estar formado por dgitos, letras y el guin inferor (_), siempre y cu
ando el primer carcter sea una letra o un guin inferior.
Las maysculas y minsculas se consideran distintas y la longitud del nombre no est limitada.
Se puede leer el valor de la variable, y tambin se le puede asignar un nuevo valor.
Para la shell de Bash, las variables son siempre cadenas de caracteres, aunque se almacene
en nmeros en ellas.
El Shell identifica las variables
por un prefijo especial, el signo dlar ($), que indica que la palabra que sigue es el nombre de una variable.
Para visualizar los valores de todas las variables del sistema se utiliza el comando set sin argumentos.
Si queremos darle valor a una variable:
var=Valor
var=
Para obtener el valor de una variable debemos de precederla por $ y utilizar la orden echo.
La orden echo sirve, adems, para mostrar una lnea de texto por pantalla.
echo $variable

Scripts
En Bash, la forma ms comn de ejecutar programas es crear ficheros (en este caso con
extensin .sh) que se
llaman archivos interpretados o scripts y que contienen una coleccin de rdenes Bash que sern ejecutadas por la Shell.
Para crear un script usamos cualquier editor de texto y lo guardamos en un fichero. Una
vez creado el script
podemos ejecutarlo de la siguiente manera:

1. Damos al fichero permiso de ejecucin (con el comando chmod).


2. Una vez dado este permiso, podremos ejecutarlo simplemente poniendo sh script, as:
sh nombre_script.sh
En un script todo lo que vaya despus del smbolo # y hasta el siguiente carcter de nueva
lnea se toma como
comentario y no se ejecuta.
Un script con comentarios quedara as:
#!/bin/bash
#misdatos.sh#
# muestra datos propios del usuario que lo invoca
#
echo MIS DATOS.
echo Nombre: $LOGNAME
echo Directorio: $HOME
echo n Fecha:
date # muestra fecha y hora
echo # lnea en blanco para presentacin
# fin misdatos.sh

Variable en los scripts

Dentro de los scripts se pueden utilizar variables para clarificar o facilitar la compresin del
programa.
Si no se especifica otra cosa, las variables Bash son de tipo cadena, por lo que pueden contener un nmero
(representado como una cadena), un carcter o una cadena de
caracteres.
No es necesario declararla, se crear slo con asignarle un valor a su referencia.
#!/bin/bash
#Ejemplo1 de variables
cad=Hola Mundo
echo $cad

Paso de argumentos a los scripts

En ocasiones, puede ser til que nuestros scripts reciban algn tipo de argumento (un directorio sobre el que
actuar o un tipo de archivo que buscar) al ser ejecutados.
Para hacer referencia a estos argumentos, dentro de los scripts se emplean una serie de
variables que
siempre estarn disponibles, los parmetros posicionales $1, $2, $3,...,,
siendo $0 el nombre del
propio programa.
Reciben este nombre porque se les reconoce por su ubicacin, es decir el primer
argumento es $1, el
segundo $2 y as sucesivamente.
#!/bin/bash
# Ejemplo 4: script que recibe parmetros y los imprime
echo "El script $0"
echo "Recibe los argumentos $1 $2 "
Al ejecutar: sh ejemplo4.sh hola adis

Las variables $*, $@ y $#

La variable de entorno $# almacena el nmero total de argumentos o parmetros


recibidos por el script
sin contar al $0. El valor es de tipo cadena de caracteres.
La variables $* y $@ contienen, ambas, los valores de todos los argumentos recibidos por
el script.

#!/bin/bash
# Ejemplo6: script que recibe parmetros y los imprime
echo "El script $0 recibe $# argumentos:" $*
echo "El script $0 recibe $# argumentos:" $@
Lo ejecutamos as: sh ejemplo5.sh hola adis
Salida:
El script ejemplo5.sh recibe 2 argumentos: hola adis
El script ejemplo5.sh recibe 2 argumentos: hola adis

Variables con tipo


Si lo que queremos es una variable tipo entera con la cual podamos realizar operaciones
debemos usar el comando interno declare, as:
declare i nombre_var=5

matemticas entonces

Expresiones aritmticas
En la Shell de Bash existen varias maneras de realizar operaciones aritmticas con datos
Utilizando la expansin del Shell $((expresin))
Utilizando la orden let.

numricos:

6. Las Sentencias Condicionales


Las sentencias if, elif y else
La sentencia if comprueba el cdigo de terminacin de un comando en la condicin, si ste
evala como cierta. La sentencia condicional tiene el siguiente formato:
if condicin
then
sentencias-then-if
elif condicin
then
sentencias-then-elif
else
sentencias-else
fi
o:
if condicin ; then
sentencias-then-if
elif condicin ; then
sentencias-then-elif
else
sentencias-else
fi

es 0 la condicin se

La sentencia exit
La sentencia exit puede ser ejecutada en cualquier sitio, y lo que hace es abandonar el script .

Operadores lgicos y cdigos de terminacin

Podemos combinar varios cdigos de terminacin de comandos mediante los operadores


(representada con &&) or (representada con ||) y not (representada con !).
El cdigo de terminacin 0 es el que indica verdadero, y cualquier otro cdigo indica falso.

lgicos and

Test condicionales

El comando interno test nos permite comprobar otras muchas condiciones, que le pasamos como argumento,
para acabar devolvindonos un cdigo de terminacin:
test [condicin].
Una forma alternativa al comando test es el operador [[ ]] dentro del cual metemos la condicin a evaluar:
[[ condicin ]].
Usando los test condicionales podemos evaluar: atributos de un fichero (si existe, que tipo de fichero es, que
permisos tiene, etc.), comparar dos ficheros para ver cul de ellos es ms reciente, comparar cadenas, e
incluso comparar los nmeros que almacenan las cadenas (comparacin numrica).

Comparacin de cadenas:

Comparacin numrica de enteros:

Comprobar atributos de ficheros:

If aritmtico
Las expresiones aritmticas pueden usarse en las distintas sentencias de control de flujo,
en cuyo caso la
expresin va entre dobles parntesis, pero sin el $ delante, por ejemplo, el
if aritmtico tendra la forma:

if ((expresin aritmtica))

then
cuerpo
fi

7. El bucle for

Se procesan los elementos de una lista uno a uno.


Su sintaxis es la siguiente:
for var [in lista]
do

lista de rdenes

done
Ejecuta las rdenes de lista de rdenes tantas veces como palabras haya en lista.
En cada vuelta del bucle, se almacena un elemento de lista en var.
Si se omite in lista, se recorre el contenido de $@, pero aunque vayamos a recorrer esta
preferible indicarla explcitamente por claridad.

variable,

es

8. Bucles while y until

Los bucles while y until son tiles cuando los combinamos con caractersticas como la aritmtica con
enteros, la entrada y salida de variables, y el procesamiento de opciones de la lnea de comandos. Su
sintaxis es:
while condicin
do
lista de rdenes
done
until condicin
do
lista de rdenes
done

while ejecuta las rdenes especificadas en lista de rdenes mientras el resultado de evaluar condicin
siga siendo true.
until ejecuta las rdenes especificadas en lista de rdenes mientras el resultado de evaluar condicin sea
false.
Ejemplos:

#!/bin/bash
i=0
while [[ $i -lt 10 ]]
do
echo El contador es $i
let i=i+1
done

#!/bin/bash
i=20
until [[ $i -lt 10 ]]
do
echo Contador $i
let i-=1
done

Tanto en el bucle for como en el while, podemos usar break para indicar que
bucle en cualquier momento.

queremos salir del

While aritmtico
Al igual que ocurra con el for y el if, tambin existe el while aritmtico. Tendra la forma:
while ((expresion aritmtica))
do
cuerpo
done

9. Entrada y Salida de Texto


El comando interno read:
El comando read sirve para leer informacin del teclado y guardarla en variables. Su

sintaxis es:

read var1 var2...


Ejemplo:
echo "Inserte palabras, luego de ENTER"
read var2 var3
echo $var1
echo $var2
echo $var3

El comando interno echo:

echo simplemente escribe en la salida estndar los argumentos que recibe.


La siguiente tabla muestra las opciones que podemos pasarle a echo:

10.
La
sentencia case
Esta
sentencia permite realizar
una comparacin de
patrones con la cadena a examinar.

Su sintaxis es la siguiente:
case cadena in
patron1)
Lista de rdenes1 ;;
patron2)
Lista de rdenes2 ;;

esac
La sentencia case compara el valor presente en cadena con los valores de todos los
patrones, uno por uno,
hasta que o bien se encuentra un patrn que coincida o ya no quedan ms patrones para comparar con
cadena.
Si se halla un coincidencia, se ejecutan las rdenes presentes en la correspondiente lista
de rdenes y
la sentencia case cede el control.
Cada patrn puede estar formado por varios patrones separados por el carcter |.

Ejemplo:
#!/bin/bash
n=$1
case $n in
*1* | *5* ) echo Uno o Cinco;;
*2*) echo Dos;;
*3*) echo Tres;;
*4*) echo Cuatro;;
Esac

11. La sentencia select

La sentencia select nos permite generar fcilmente un men simple. Su sintaxis es la siguiente:

select variable [in lista]


do
o Sentencias que usan $variable
done
La sentencia genera un men con los elementos de lista, asigna un nmero a cada elemento, y pide al usuario que
introduzca un nmero. El valor elegido se almacena en variable.
Una vez elegida una opcin por parte del usuario, se ejecuta el cuerpo de la sentencia y el proceso se repite en un
bucle infinito.
Aunque el bucle de select es infinito (lo cual nos permite volver a pedir una opcin cuantas veces haga falta), se
puede abandonar usando la sentencia break.
El prompt que usa la funcin (mensaje que se muestra para pedir la opcin del men) es el definido en la variable de
entorno PS3, y es habitual cambiar este prompt antes de ejecutar select para que muestre al usuario un mensaje ms
descriptivo. Por defecto el valor de PS3 es #?, lo cual no es un mensaje que suela gustar especialmente a los usuarios.
Ejemplo: El siguiente script pide dos nmeros y a continuacin muestra un men para elegir que se quiere hacer con
ellos (sumar, restar, multiplicar o dividir).
#!/bin/bash
#Almacenamos las opciones del men
OPCIONES="Sumar Restar Multiplicar Dividir Salir"
#Cambiamos el prompt para que sea ms descriptivo
PS3="Elija una opcin: "
#Leemos dos nmeros
read n1

echo Numero 1: $n1"


read n2
echo "Numero 2: $n2"
select opt in $OPCIONES
do
if [[ $opt = "Sumar" ]]
then
echo $((n1+n2))
elif [[ $opt = "Restar" ]]
then
echo $((n1-n2))
elif [[ $opt = "Multiplicar" ]]
then
echo $((n1*n2))
elif [[ $opt = "Dividir" ]]
then
echo $((n1/n2))
elif [[ $opt = "Salir" ]]
then
echo Fin
break
else
echo opcin errnea
fi
done

Listas (Arrays)

Una lista (array) es una coleccin de elementos dotada de nombre; los elementos son todos del mismo tipo y
estn almacenados en posiciones consecutivas de memoria.
Los elementos de la lista estn numerados, y el primer elemento de lista tiene el nmero 0.
No existe lmite para el tamao de una lista, y no se requiere que los elementos de la lista
se asignen de
forma contigua.

Creacin de listas

Para declarar un lista podemos usar el comando declare -a de la siguiente forma:


declare -a A
declare -p A

Realmente no hace falta declarar una lista con declare -a, podemos crearla asignndole
directamente valores de la siguiente manera:
b=(Anabell 4 Rosa)
declare -p b

Los elementos en las listas empiezan a contar en 0, aunque podemos cambiar los ndices
elementos indicndolos explcitamente:
C=([5]= Melon [0]=Ja mon [3]=400)
declare -p C

de los

No hace falta suministrar los elementos en orden, ni suministrarlos todos, los ndices donde no colocamos
un valor, simplemente valdrn "cadena nula".
Si slo indicamos algunos ndices, los dems los asigna continuando las cuenta desde el ltimo ndice
asignado:
C=([5]= Cosa Casa Perro)
declare -p C

Acceso a los elementos de una lista

Para acceder a los elementos, usamos el operador corchete [ ] para indicar el ndice del elemento a acceder,
siendo obligatorio encerrar entre llaves
{ } la variable:
C=([5]=Cosa Casa Perro)
echo ${C[5]}

Si no indicamos ndice de elemento, por defecto nos coge el elemento de ndice 0:


C=([0]=Cosa Casa Perro)
echo $C

Tambin podemos inicializar una lista introduciendo valores directamente con el operador corchete:
C=([0]=Cosa Casa Perro)
echo ${C[0]}
C[0]=CosaModificado
echo ${C[0]}

Borrar elementos de una lista

Podemos borrar una entrada de una lista usando unset sobre ese ndice:
C=([0]=Cosa Casa Perro)
declare -p C
echo "Borramos el elemento --cosa--"
unset C[0]
echo "Presentamos como quedo la lista:"
declare -p C

O bien borrar todo la lista usando unset sobre el nombre del array:
unset C

12. Funciones
Como en casi todo lenguaje de programacin, podemos utilizar funciones para agrupar
una manera ms lgica, o practicar el divino arte de la recursividad.

trozos de cdigos de

Definicin de funciones

Antes de utilizar una funcin, es preciso definirla. La forma de definir una funcin en bash es:
nombre_funcin ( )

{
comandos bash
}

Para borrar una funcin podemos usar el comando unset con la siguiente sintaxis:
unset -f nombre_funcin

Cuando definimos una funcin, se almacena como una variable de entorno. Para ejecutar la funcin,
simplemente escribimos su nombre seguido de argumentos, como cuando ejecutamos un comando. Los
argumentos actan como parmetros de la funcin.
Un ejemplo sencillo del uso de funcione es el siguiente script. En l se crean dos funciones, una para salir y
otra para mostrar el mensaje hola:
#!/bin/bash
#Definimos dos funciones
salir ()
{
exit
}
hola ()
{
echo Hola
}
#Comienza el script
hola #Llamamos a la funcion hola
salir #Llamamos a la funcion salir
echo Fin del script

13. Lenguaje de Programacin AWK

Awk busca ciertos patrones en la entrada, y la procesa de la manera especificada.


Awk dispone de un lenguaje completo, sintcticamente similar a C que tiene una gran potencia a la hora de
reconocer patrones en la entrada, ya que permite especificar combinaciones de expresiones regulares.
En el lenguaje awk, un registro es el equivalente a una lnea.
Awk separa automticamente cada registro en campos que pueden utilizarse individualmente.
Por defecto, un registro es una lnea del fichero, lo que significa que el separador de registros es \n.
Un campo es todo aquello que est separado por espacios en blanco, es decir, una palabra.
Un programa de awk es una secuencia de sentencias patrn-accin, con un formato determinado, en el que las
acciones se ejecutarn si en el registro actual se cumple el patrn.
El formato es el siguiente: patrn {accion}
Suele ser necesario encerrar los programas de awk entre comillas, para evitar que el Shell las interprete como
caracteres especiales.
Hay que tener en cuenta dos cosas:
1. Si no hay patrn, las acciones se ejecutan
en todos los registros.
2. Si no hay acciones, lo que se hace es ejecutar la accin por defecto, que es copiar el registro en la salida
estndar.

Ejemplo:
* Mostramos el nombre de usuario de todos los usuarios logueados en la mquina:
who|awk '{print $1}
*Mostramos el nombre de usuario y el intrprete que usa:

awk 'BEGIN {FS=":"}; {print $1,$NF | "sort"}' /etc/passwd


* Mostramos el nombre completo del usuario y su login:
awk 'BEGIN {FS=":"}; {print $1,$5 | "sort"}' /etc/passwd

Variables

Awk dispone de un lenguaje completo, y, como cualquier otro lenguaje, dispone de variables. Las variables
pueden ser de dos tipos:
Variables predefinidas.
Variables definidas por el usuario.

Veamos cuales son las variables predefinidas:

FS (Field separator): Permite indicar a awk cul es el caracter que separa los campos. Por defecto es el espacio. La
forma de indicar a awk el caracter de separacin de campos es la siguiente: FS = caracter.
NF (Number of fields): Contiene el nmero total de campos que contiene el registro que se est leyendo en cada
momento.
RS (Record separator): Contiene el carcter que indica a awk en qu punto del archivo acaba un registro y
empieza el siguiente. Por defecto es el caracter \n.
NR (Number of record): Contiene el nmero de orden del registro que se est procesando en cada momento.
OFS (Output FS): La instruccin print inserta en la salida un carcter de separacin cada vez que aparece una
coma en el cdigo. Mediante OFS, podemos indicar a awk que separe los campos mediante el separador que le
indiquemos. Por ejemplo: OFS = ";"
En cuanto a las variables definidas por el usuario, se crean directamente al hacer referencia a ellas en
expresiones.
Las variables pueden ser:
Escalares: Almacenan un solo valor.
Vectoriales: Como vectores o arrays.
En awk, se pueden crear arrays asociativos, dado que el lenguaje nos permite usar una cadena como ndice
del array. Para referirnos a un elemento dentro de un array, lo haremos: nombre[ subndice ].

Campos de entrada

En Awk se considera cada registro del archivo de entrada como una sucesin de campos delimitados por un
carcter dado. Este carcter es, por defecto, el espacio.
En cualquier caso, podemos indicar a awk que considere otro carcter como separador de
campos
mediante la opcin FS, tal y como podemos ver en ejemplos anteriores.
Cada uno de estos campos se numera de forma correlativa, segn su posicin en la lnea (o registro), de la
siguiente manera: $1, $2, $3, ... Adems, tambin podemos referirnos a la
lnea entera con $0.
Por otra parte, se puede forzar a procesar una lnea carcter a carcter, dejando la variable separador de
campos FS sin contenido. Si hacemos sto, en $1 se tendr el primer carcter de la lnea, en $2 el segundo,
etc.

Estructura bsica de un programa con awk

Para entender fcilmente la estructura de un programa con awk, podemos fijarnos en el


siguiente, en el que tenemos tres bloques:

ejemplo

BEGIN { i=0 }
{ i+=1; print i,"-",$1 }
END { print "Total usuarios " i }

El primero, se ejecuta al inicio. En este caso, hemos utilizado el bloque BEGIN para inicializar la variable i con
valor 0.

El segundo bloque se ejecuta para cada patrn (o registro, como queramos llamarlo). En
este caso,
incrementa el valor de i, y lo muestra por pantalla seguido de un guin y el campo n 1 (que en este ejemplo
es el login del usuario) Como no hemos indicado ningn separador de campo, se toma por defecto el espacio.
El tercer bloque se ejecuta al final. Y qu hace el bloque en el ejemplo? Imprimir el nmero total de usuarios.

Operadores
Aritmticos:
>
mayor que
>=
mayor o igual que
<
menor que
<=
menor o igual que
==
igual a
=
no es igual a
Lgicos:
||
or
&&
and

not
Operaciones matemticas
a=b asignacin
a+=b => a=a+b
a-=b => a=a-b
a*=b => a=a*b
a/=b => a=a/b
a++
=> incremento
a-=> decremento
Sentencias de control
Sentencia if:
if (condicin)
Instruccin
else
Instruccin
if (condicin) {
Instruncin1
Instruccin2.
instruccin n
}
else {
Instruncin1
Instruccin2
instruccin n
}
Sentencia for:

for(variable=valor_inicial;variable<=valor_final;incremento)
{
instruncin1
instruccin2
instruccin n
}

Sentencia do:
do
{
instruncin1
instruccin2
instruccin n
} while (condicin)

Você também pode gostar