36
Linux 1  Administración y Configuración de GNU Linux Modulo II Clase II Aspectos importantes de la shell Ing. Dennis Cervantes [email protected]  Twitter: @dicn1978

Shell Aspectos

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

    [email protected]

    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