Upload
tin-burgess
View
13
Download
0
Embed Size (px)
DESCRIPTION
linux Shell
Citation preview
5/25/2018 Shell Aspectos
1/36
Linux 1
Administracin y
Configuracin deGNU Linux
Modulo IIClase II Aspectos importantes de la shell
Ing. Dennis Cervantes
Twitter: @dicn1978
mailto:[email protected]:[email protected]5/25/2018 Shell Aspectos
2/36
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
5/25/2018 Shell Aspectos
3/36
3 2007 Linux. Todos los derechos reservados.
Para conocer todos los interpretes de comandos quetenemos veremos que se guardan dentro de un archivollamado shells.
$ cat /etc/shells /bin/csh
/bin/sh
/bin/ksh /bin/tcsh
/bin/dash
/bin/bash
Conocer interpretes de comandos
5/25/2018 Shell Aspectos
4/36
4 2007 Linux. Todos los derechos reservados.
Si queremos cambiar nuestro shell por defecto a bashejecutamos el siguiente comando y luego volvemos aloguearno para que tome la nueva configuracin.
$ chsh -s /bin/bash
5/25/2018 Shell Aspectos
5/36
5 2007 Linux. Todos los derechos reservados.
Los comodines de bsqueda son signos o smbolosque nos ayudarn a la hora de encontrar algn archivoen nuestro ordenador. Donde mas lo podemos llegar a
utilizar es con el comando ls. $ ls /bin/bash
Manejo de comodines
5/25/2018 Shell Aspectos
6/36
6 2007 Linux. Todos los derechos reservados.
El tercer comodn permite indicar un conjunto decaracteres que son vlidos. Por ejemplo l[eno]*encontrara el fichero less lesssecho lessfile lesskeylesspipe ln loadkeys login no traira liss. Es decir como
primer letra si o si l a continuacin puede ser e, n o o yluego como bien dijimos el comodn (*) representa ceroo 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
5/25/2018 Shell Aspectos
7/36
7 2007 Linux. Todos los derechos reservados.
Bash siempre busca los programas que ejecutamos enlos directorios indicados en la variable de entorno$PATH, pero hay ciertos comandos internos de bashque no corresponde a ningn archivo del disco,
algunos de estos comandos son cd, chdir, alias, set oexport, etc.
Para saber los comandos que tenemos en bashejecutamos help.
$ help
$ help alias
alias: alias [-p] [name[=value] ... ]
Define o muestra aliases.
Comandos internos del bash
5/25/2018 Shell Aspectos
8/36
8 2007 Linux. Todos los derechos reservados.
`alias' sin argumentos muestra la lista de aliases en laforma reutilizable `alias NOMBRE=VALOR' en la salidaestndar.
De otra manera, se define un alias por cada NOMBREcuyo VALOR se proporcione. Un espacio final enVALOR 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 unNOMBRE para el cual no se haya definido ningn alias.
5/25/2018 Shell Aspectos
9/36
9 2007 Linux. Todos los derechos reservados.
Caracteres especiales y entrecomillados
5/25/2018 Shell Aspectos
10/3610 2007 Linux. Todos los derechos reservados.
5/25/2018 Shell Aspectos
11/3611 2007 Linux. Todos los derechos reservados.
Otra forma de cambiar el significado de un carcter deescape es precederlo por \, que es lo que se llama elcarcter 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 loscaracteres especiales para que Bash no los interprete.
Tambin lo usamos para que poder usar los espacios alos nombres de ficheros, ya que el espacio esinterpretado por Bash como un separador deargumentos de la lnea de comandos.
Caracteres de escape
5/25/2018 Shell Aspectos
12/3612 2007 Linux. Todos los derechos reservados.
Podemos usar el carcter de escape para que no seinterpreten los entrecomillados simples o dobles, esdecir:
$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
5/25/2018 Shell Aspectos
13/3613 2007 Linux. Todos los derechos reservados.
Para ver el historial de los comandos que ejecutamoshabamos visto que existe el comando history, tambinencontramos el comando fc (fix command) es un
clsico del C Shell trado al mundo de Bash, que aligual 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 comandohelp.
$ help fc
Ver el historial de comandos
5/25/2018 Shell Aspectos
14/3614 2007 Linux. Todos los derechos reservados.
Podemos obtener un listado de los ltimos comandosusados junto con su numero usado :
$ fc -l
Es equivalente al comando history excepto que solo elcomando fc muestra slo los ltimos comandos delhistorial y no todo.
Para editar uno de ellos indicamos su nmero : $ fc 20
5/25/2018 Shell Aspectos
15/3615 2007 Linux. Todos los derechos reservados.
Al igual que history podemos ejecutar comandoanteriores o por el nmero de comando.
Con la opcin !cadena, ya que con dar las primeras
letras de un comando que hayamos ejecutadopreviamente lo busca en el historial y lo ejecuta, seejecuta el comando ms reciente que empiece por lacadena.
Ejecutar comandos anteriores
5/25/2018 Shell Aspectos
16/3616 2007 Linux. Todos los derechos reservados.
Las teclas de control del terminal son combinaciones deteclas 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
5/25/2018 Shell Aspectos
17/3617 2007 Linux. Todos los derechos reservados.
Moverse por la lnea de comandos
5/25/2018 Shell Aspectos
18/3618 2007 Linux. Todos los derechos reservados.
Ya vimos como movernos, y borrar, ahora si queremosbuscar un determinado comando podemos usar lacombinacin de teclas Ctrl+R, que nos permite buscar hacaatrs en el historial un comando que contenga un
determinado texto. Al pulsar esta combinacin de teclas elprompt cambia de forma y segn vamos escribiendo nos vaindicando el comando del histrico que cumple el patrndado.
Buscar y ejecutar comandos del historial
5/25/2018 Shell Aspectos
19/3619 2007 Linux. Todos los derechos reservados.
Reglas a tener en cuenta :
1. Si no hay nada que empiece por el texto de lapalabra que precede al cursor se produce un pitidoqueinforma del problema.
2. Si hay un comando (en el PATH), una variable(siempre precedida por $), un nombre de fichero ofuncin Bash que comienza por el texto escrito, Bashcompleta la palabra.
3. Si hay un directorio que comienza por el nombreescrito, Bash completa el nombre de directorio seguidopor una barra de separacin de nombres de directorios/.
Autocompletar con el tabulador
5/25/2018 Shell Aspectos
20/3620 2007 Linux. Todos los derechos reservados.
Si hay ms de una forma de completar la palabra elshell completa lo ms que puede y emite un pitidoinformado de que no la pudo terminar de completar.
Cuando Bash no puede completar una cadena (porhaber varias posibles que empiecen igual), podemospulsar dos veces el tabulador y se nos mostrar unalista con las posibilidades cadenas candidatas.
5/25/2018 Shell Aspectos
21/3621 2007 Linux. Todos los derechos reservados.
Nos ayudan a configurar el entorno en el que seejecutan los programas. Las variables de entorno nopueden tener espacios, y si queremos asignar un valorcon 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
5/25/2018 Shell Aspectos
22/3622 2007 Linux. Todos los derechos reservados.
Como vemos para obtener el valor de la variableprecede del signo $, observamos que las comillas o elcarcter 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 enmaysculas por conviccin.
5/25/2018 Shell Aspectos
23/3623 2007 Linux. Todos los derechos reservados.
Vemos en este caso como combinar la variable con lasalida 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
5/25/2018 Shell Aspectos
24/3624 2007 Linux. Todos los derechos reservados.
Podemos personalizar nuestro prompt de Bash usandolas variables de entorno PS1, PS2, PS3 y PS4. En lasiguiente tabla se muestra las opciones depersonalizacin que podemos usar en cualquiera de los
prompt.
Personalizar el prompt
5/25/2018 Shell Aspectos
25/3625 2007 Linux. Todos los derechos reservados.
5/25/2018 Shell Aspectos
26/3626 2007 Linux. Todos los derechos reservados.
5/25/2018 Shell Aspectos
27/36
27 2007 Linux. Todos los derechos reservados.
Un ejemplo sencillo es de poner \w que es el directoriodonde 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 cualquierotro usuario de la mquina, para lo cual se usa laopcin \$ que muestra una # si somos root, o un $ en
cualquier otro caso.
$ PS1='\w\$'
~$
5/25/2018 Shell Aspectos
28/36
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 delprompt en que servidor estamos, para eso podemosincorporar en la variables PS1 la opcin \H que nos dael nombre de la mquina donde estamos situados, o laopcin \h que nos da el nombre de la mquina slo
hasta el primer punto :
$ PS1='\h\w\$'
centrux~$
$ PS1='\H\w\$'
centrux.org~$
5/25/2018 Shell Aspectos
29/36
29 2007 Linux. Todos los derechos reservados.
Cuando nos movemos en distintas tty de la consolacomo vimos con la teclas Alt+F1 hasta Alt+F6 (desde latty1 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
5/25/2018 Shell Aspectos
30/36
30 2007 Linux. Todos los derechos reservados.
A diferencia de los scripts, se ejecutan dentro de lamemoria del propio proceso de Bash, con lo que sonms eficientes que ejecutar aparte, pero tienen elinconveniente de que tienen que estar siempre
cargadas en la memoria del proceso Bash para poderusarse.
Funciones en el Shell
5/25/2018 Shell Aspectos
31/36
31 2007 Linux. Todos los derechos reservados.
No existe diferencia entre ellos, para borrar una funcinpodemos utilizar el comando unset -f nombre_funcin.
Cuando definimos una funcin se almacena como unavariable de entorno (con su valor almacenado laimplementacin de la funcin). Para ejecutar la funcinescribimos el nombre de la funcin y los parmetros
necesarios. $ vi funcion.sh
!#/bin/bash
imprimir_valor() {
A=20
echo $A
}
5/25/2018 Shell Aspectos
32/36
32 2007 Linux. Todos los derechos reservados.
$ chmod +x funcion.sh
$ source funcion.sh
$ imprimir_valor
20
Si queremos borrar una funcin como explicamosanteriormente con el comando unset -f
nombre_funcin. $ unset -f imprimir_valor
$ imprimir_valor
bash: imprimir_valor: no se encontr la orden
5/25/2018 Shell Aspectos
33/36
33 2007 Linux. Todos los derechos reservados.
Para ver todas las funciones que tenemos declaradas
simplemente ejecutamos declare -f, por ejemplocreamos la siguiente funcin.
$ vi hola.sh
!#/bin/bash
imprimir_saludo() {
echo Hola : ${USER} }
$ chmod +x hola.sh
$ source hola.sh
5/25/2018 Shell Aspectos
34/36
34 2007 Linux. Todos los derechos reservados.
$ imprimir_saludo
Hola : pablo $ declare -f
imprimir_saludo ()
{
echo "Hola : ${USER}"
}
5/25/2018 Shell Aspectos
35/36
35 2007 Linux. Todos los derechos reservados.
Si solo queremos obtener el nombre de la funcin sin elcdigo :
$ declare -f
declare -f imprimir_saludo
Si una funcin tiene el mismo nombre que un script oejecutable, la funcin tiene preferencia.
5/25/2018 Shell Aspectos
36/36