Professional Documents
Culture Documents
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.
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.
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
[]
{}
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.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.
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.
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
4. Metacaracteres de entrada/salida
>
>>
<
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:
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
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
#!/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
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:
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 .
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:
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
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
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.
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
sintaxis es:
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
La sentencia select nos permite generar fcilmente un men simple. Su sintaxis es la siguiente:
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
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
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]}
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]}
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
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:
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.
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.
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)