Sunteți pe pagina 1din 36

Linux 1

Administracin y
Configuracin de
GNU Linux
Modulo II
Clase II Aspectos importantes de la shell
Ing. Dennis Cervantes
dennis.cervantes@udb.edu.sv
Twitter: @dicn1978
2 2007 Linux. Todos los derechos reservados.
Conocer aspectos importantes de la shell
Personalizar la consola
Crear funciones de la shell script

Objetivos de la clase
3 2007 Linux. Todos los derechos reservados.
Para conocer todos los interpretes de comandos que
tenemos veremos que se guardan dentro de un archivo
llamado shells.
$ cat /etc/shells
/bin/csh
/bin/sh
/bin/ksh
/bin/tcsh
/bin/dash
/bin/bash
Conocer interpretes de comandos
4 2007 Linux. Todos los derechos reservados.
Si queremos cambiar nuestro shell por defecto a bash
ejecutamos el siguiente comando y luego volvemos a
loguearno para que tome la nueva configuracin.
$ chsh -s /bin/bash
5 2007 Linux. Todos los derechos reservados.
Los comodines de bsqueda son signos o smbolos
que nos ayudarn a la hora de encontrar algn archivo
en nuestro ordenador. Donde mas lo podemos llegar a
utilizar es con el comando ls.
$ ls /bin/bash

Manejo de comodines
6 2007 Linux. Todos los derechos reservados.
El tercer comodn permite indicar un conjunto de
caracteres que son vlidos. Por ejemplo l[eno]*
encontrara el fichero less lesssecho lessfile lesskey
lesspipe ln loadkeys login no traira liss. Es decir como
primer letra si o si l a continuacin puede ser e, n o o y
luego como bien dijimos el comodn (*) representa cero
o ms caracteres realiza una distributiva.
$ ls /bin/l[eno]*
/bin/less /bin/lessecho /bin/lessfile /bin/lesskey
/bin/lesspipe /bin/ln /bin/loadkeys /bin/login
7 2007 Linux. Todos los derechos reservados.
Bash siempre busca los programas que ejecutamos en
los directorios indicados en la variable de entorno
$PATH, pero hay ciertos comandos internos de bash
que no corresponde a ningn archivo del disco,
algunos de estos comandos son cd, chdir, alias, set o
export, etc.
Para saber los comandos que tenemos en bash
ejecutamos help.
$ help
$ help alias
alias: alias [-p] [name[=value] ... ]
Define o muestra aliases.

Comandos internos del bash
8 2007 Linux. Todos los derechos reservados.
`alias' sin argumentos muestra la lista de aliases en la
forma reutilizable `alias NOMBRE=VALOR' en la salida
estndar.
De otra manera, se define un alias por cada NOMBRE
cuyo VALOR se proporcione. Un espacio final en
VALOR causa que se revise la siguiente palabra para
sustitucin de alias cuando se expande el alias.
Opciones:
-p Muestra todos los aliases definidos en un
formato reusable
Estado de salida:
alias devuelve verdadero a menos que se de un
NOMBRE para el cual no se haya definido ningn alias.
9 2007 Linux. Todos los derechos reservados.

Caracteres especiales y entrecomillados
10 2007 Linux. Todos los derechos reservados.

11 2007 Linux. Todos los derechos reservados.
Otra forma de cambiar el significado de un carcter de
escape es precederlo por \, que es lo que se llama el
carcter de escape.
Por ejemplo :
$ echo 2\*\3\>5 es una expresion cierta
2*3>5 es una expresion cierta
Donde hemos puesto el carcter de escape a los
caracteres especiales para que Bash no los interprete.
Tambin lo usamos para que poder usar los espacios a
los nombres de ficheros, ya que el espacio es
interpretado por Bash como un separador de
argumentos de la lnea de comandos.
Caracteres de escape
12 2007 Linux. Todos los derechos reservados.
Podemos usar el carcter de escape para que no se
interpreten los entrecomillados simples o dobles, es
decir:
$echo \2\*\3\>5\ es una expresion cierta
2*3>5 es una expresin cierta
$echo \'2\*\3\>5\' es una expresin cierta
'2*3>5' es una expresin cierta

Entrecomillar los entrecomillados
13 2007 Linux. Todos los derechos reservados.
Para ver el historial de los comandos que ejecutamos
habamos visto que existe el comando history, tambin
encontramos el comando fc (fix command) es un
clsico del C Shell trado al mundo de Bash, que al
igual que el comando history lee el archivo
.bash_history.
estos comandos internos de bash no contienen man
sino la forma de ver ayuda es mediante el comando
help.
$ help fc

Ver el historial de comandos
14 2007 Linux. Todos los derechos reservados.
Podemos obtener un listado de los ltimos comandos
usados junto con su numero usado :
$ fc -l
Es equivalente al comando history excepto que solo el
comando fc muestra slo los ltimos comandos del
historial y no todo.
Para editar uno de ellos indicamos su nmero :
$ fc 20

15 2007 Linux. Todos los derechos reservados.
Al igual que history podemos ejecutar comando
anteriores o por el nmero de comando.



Con la opcin !cadena, ya que con dar las primeras
letras de un comando que hayamos ejecutado
previamente lo busca en el historial y lo ejecuta, se
ejecuta el comando ms reciente que empiece por la
cadena.

Ejecutar comandos anteriores
16 2007 Linux. Todos los derechos reservados.
Las teclas de control del terminal son combinaciones de
teclas que interpreta el terminal (no Bash).
$ stty --all
Veremos que por ejemplo ^C esto significa la tecla Ctrl+C,
veremos algunas que son tiles:
Teclas de control del terminal
17 2007 Linux. Todos los derechos reservados.

Moverse por la lnea de comandos
18 2007 Linux. Todos los derechos reservados.
Ya vimos como movernos, y borrar, ahora si queremos
buscar un determinado comando podemos usar la
combinacin de teclas Ctrl+R, que nos permite buscar haca
atrs en el historial un comando que contenga un
determinado texto. Al pulsar esta combinacin de teclas el
prompt cambia de forma y segn vamos escribiendo nos va
indicando el comando del histrico que cumple el patrn
dado.

Buscar y ejecutar comandos del historial
19 2007 Linux. Todos los derechos reservados.
Reglas a tener en cuenta :
1. Si no hay nada que empiece por el texto de la
palabra que precede al cursor se produce un pitido
queinforma del problema.
2. Si hay un comando (en el PATH), una variable
(siempre precedida por $), un nombre de fichero o
funcin Bash que comienza por el texto escrito, Bash
completa la palabra.
3. Si hay un directorio que comienza por el nombre
escrito, Bash completa el nombre de directorio seguido
por una barra de separacin de nombres de directorios
/.

Autocompletar con el tabulador
20 2007 Linux. Todos los derechos reservados.
Si hay ms de una forma de completar la palabra el
shell completa lo ms que puede y emite un pitido
informado de que no la pudo terminar de completar.
Cuando Bash no puede completar una cadena (por
haber varias posibles que empiecen igual), podemos
pulsar dos veces el tabulador y se nos mostrar una
lista con las posibilidades cadenas candidatas.

21 2007 Linux. Todos los derechos reservados.
Nos ayudan a configurar el entorno en el que se
ejecutan los programas. Las variables de entorno no
pueden tener espacios, y si queremos asignar un valor
con espacio debemos de entrecomillarlo, o bien
preceder el espacio por un carcter de escape :
$ NOMBRE='Marcos Pablo'
$ echo $NOMBRE
Marcos Pablo
$ NOMBRE=Marcos\ Pablo
$ echo $NOMBRE
Marcos Pablo





























Las variables de entorno

22 2007 Linux. Todos los derechos reservados.
Como vemos para obtener el valor de la variable
precede del signo $, observamos que las comillas o el
carcter de escape no forman parte del valor de la
variable una vez que se realiza la asignacin.
Para eliminar una variable de entorno usamos el
comando unset.
$ unset NOMBRE
Es conveniente utilizar los nombre de las variables en
maysculas por conviccin.

23 2007 Linux. Todos los derechos reservados.
Vemos en este caso como combinar la variable con la
salida de pantalla utilizando el comando echo.
$ NOMBRE='Marcos Pablo'
$ EDAD=37
$ echo Su nombre es : $nombre y la edad es : $edad
Su nombre es : Marcos Pablo y la edad es : 37
Variables y entrecomillado
24 2007 Linux. Todos los derechos reservados.
Podemos personalizar nuestro prompt de Bash usando
las variables de entorno PS1, PS2, PS3 y PS4. En la
siguiente tabla se muestra las opciones de
personalizacin que podemos usar en cualquiera de los
prompt.

Personalizar el prompt
25 2007 Linux. Todos los derechos reservados.

26 2007 Linux. Todos los derechos reservados.

27 2007 Linux. Todos los derechos reservados.
Un ejemplo sencillo es de poner \w que es el directorio
donde estamos parado y esto nos ayuda siempre para
saber donde estamos parado.
$ PS1='\w->'
~->
Donde ~ significa que estamos en el directorio home.
Es muy tpico querer saber si somos root o cualquier
otro usuario de la mquina, para lo cual se usa la
opcin \$ que muestra una # si somos root, o un $ en
cualquier otro caso.
$ PS1='\w\$'
~$
28 2007 Linux. Todos los derechos reservados.
Es muy comn que accedamos a servidores remotos
por medio de ssh o telnet y no sabes por medio del
prompt en que servidor estamos, para eso podemos
incorporar en la variables PS1 la opcin \H que nos da
el nombre de la mquina donde estamos situados, o la
opcin \h que nos da el nombre de la mquina slo
hasta el primer punto :
$ PS1='\h\w\$'
centrux~$
$ PS1='\H\w\$'
centrux.org~$

29 2007 Linux. Todos los derechos reservados.
Cuando nos movemos en distintas tty de la consola
como vimos con la teclas Alt+F1 hasta Alt+F6 (desde la
tty1 hasta la tty6), es conveniente que en nuestro
prompt tengamos tambin que tty es donde estamos.
$ PS1='[\u@\h@\l] \w\$'
[pablo@centrux@1] ~$
Con la opcin \u es la que indica el nombre del usuario,
\l nos indica la tty que estamos.
Nombrar el prompt segn la consola
30 2007 Linux. Todos los derechos reservados.
A diferencia de los scripts, se ejecutan dentro de la
memoria del propio proceso de Bash, con lo que son
ms eficientes que ejecutar aparte, pero tienen el
inconveniente de que tienen que estar siempre
cargadas en la memoria del proceso Bash para poder
usarse.


Funciones en el Shell
31 2007 Linux. Todos los derechos reservados.
No existe diferencia entre ellos, para borrar una funcin
podemos utilizar el comando unset -f nombre_funcin.
Cuando definimos una funcin se almacena como una
variable de entorno (con su valor almacenado la
implementacin de la funcin). Para ejecutar la funcin
escribimos el nombre de la funcin y los parmetros
necesarios.
$ vi funcion.sh
!#/bin/bash
imprimir_valor() {
A=20
echo $A
}

32 2007 Linux. Todos los derechos reservados.
$ chmod +x funcion.sh
$ source funcion.sh
$ imprimir_valor
20
Si queremos borrar una funcin como explicamos
anteriormente con el comando unset -f
nombre_funcin.
$ unset -f imprimir_valor
$ imprimir_valor
bash: imprimir_valor: no se encontr la orden

33 2007 Linux. Todos los derechos reservados.
Para ver todas las funciones que tenemos declaradas
simplemente ejecutamos declare -f, por ejemplo
creamos la siguiente funcin.
$ vi hola.sh
!#/bin/bash
imprimir_saludo() {
echo Hola : ${USER} }
$ chmod +x hola.sh
$ source hola.sh

34 2007 Linux. Todos los derechos reservados.
$ imprimir_saludo
Hola : pablo
$ declare -f

imprimir_saludo ()
{
echo "Hola : ${USER}"
}


35 2007 Linux. Todos los derechos reservados.
Si solo queremos obtener el nombre de la funcin sin el
cdigo :
$ declare -f

declare -f imprimir_saludo

Si una funcin tiene el mismo nombre que un script o
ejecutable, la funcin tiene preferencia.

36 2007 Linux. Todos los derechos reservados.