Linux Professional Institute Learning Logo.
Pasar al contenido principal
  • Inicio
    • Todos los recursos
    • LPI Learning Materials
    • Conviértete en colaborador
    • Publishing Partners
    • Conviértase en un Publishing Partner
    • Acerca de nosotros
    • FAQ
    • Colaboradores
    • Contáctenos
  • LPI.org
105.1 Lección 3
Tema 105: Shells y scripts
105.1 Customize and use the shell environment
  • 105.1 Lección 1
  • 105.1 Lección 2
  • 105.1 Lección 3
105.2 Personalización y escritura de scripts sencillos
  • 105.2 Lección 1
  • 105.2 Lección 2
Tema 106: Interfaces de usuario y escritorios
106.1 Instalar y configurar X11
  • 106.1 Lección 1
106.2 Escritorios gráficos
  • 106.2 Lección 1
106.3 Accesibilidad
  • 106.3 Lección 1
Tema 107: Tareas administrativas
107.1 Administrar cuentas de usuario y de grupo y los archivos de sistema relacionados con ellas
  • 107.1 Lección 1
  • 107.1 Lección 2
107.2 Automatizar tareas administrativas del sistema mediante la programación de trabajos
  • 107.2 Lección 1
  • 107.2 Lección 2
107.3 Localización e internacionalización
  • 107.3 Lección 1
Tema 108: Servicios esenciales del sistema
108.1 Mantener la hora del sistema
  • 108.1 Lección 1
  • 108.1 Lección 2
108.2 Registros del sistema
  • 108.2 Lección 1
  • 108.2 Lección 2
108.3 Conceptos básicos del Agente de Transferencia de Correo
  • 108.3 Lección 1
108.4 Gestión de la impresión y de las impresoras
  • 108.4 Lección 1
Tema 109: Fundamentos de redes
109.1 Fundamentos de los protocolos de Internet
  • Muy pronto...
109.2 Configuración de red persistente
  • Muy pronto...
109.3 Resolución de problemas básicos de red
  • Muy pronto...
109.4 Configuración DNS en el lado del cliente
  • Muy pronto...
Tema 110: Seguridad
110.1 Tareas de administración de seguridad
  • Muy pronto...
110.2 Configuración de la seguridad del sistema
  • Muy pronto...
110.3 Protección de datos mediante cifrado
  • Muy pronto...
  1. Tema 105: Shells y scripts
  2. 105.1 Customize and use the shell environment
  3. 105.1 Lección 3

105.1 Lección 3

Certificación:

LPIC-1

Versión:

5.0

Tema:

105 Shells y shell scripting

Objetivo:

105.1 Personalizando y utilizando el entorno de shell

Lección:

3 de 3

Introducción

Después de repasar los shells, los scripts de inicio y las variables, abarcaremos todo el tema de la personalización del shell echando un vistazo a dos elementos muy interesantes: los alias y las funciones. De hecho, todo el grupo de variables, alias y funciones, es lo que constituye el entorno de shell.

La principal fortaleza tiene que ver con el concepto de encapsulamiento: ofrecen la posibilidad de reunir — bajo un solo comando — una serie de comandos repetitivos o recurrentes.

Creando Alias

Un alias es un nombre sustituto de otro(s) comando(s). Puede ejecutarse como un comando normal, pero en su lugar ejecuta otro comando según la definición de alias

La sintaxis para declarar alias es muy sencilla. Estos se declaran escribiendo la palabra clave alias seguida de su asignación. A su vez, dicha asignación consiste en el nombre de alias, un signo igual y uno o más comandos:

alias alias_name=command(s)

Por ejemplo:

$ alias oldshell=sh

Este alias iniciará una instancia del shell original sh cuando el usuario digite oldshell en la terminal:

$ oldshell
$

El poder de los alias radica en que nos permiten escribir versiones cortas de comandos largos:

$ alias ls='ls --color=auto'
Note

Para información sobre ls y sus colores, escriba man dir_colors en la terminal.

De la misma manera, podemos crear alias para una serie de comandos concatenados — el punto y coma (;) se utiliza como delimitador. Por ejemplo, podemos tener un alias que nos dé información sobre la ubicación del ejecutable git y su versión:

$ alias git_info='which git;git --version'

Para invocar un alias, escribimos su nombre en la terminal:

$ git_info
/usr/bin/git
git version 2.7.4

El comando alias producirá un listado de todos los alias disponibles en el sistema:

$ alias
alias git-info='which git;git --version'
alias ls='ls --color=auto'
alias oldshell='sh'

El comando unalias elimina los alias. Por ejemplo, unalias git-info, posteriormente podremos ver como desaparece del listado:

$ unalias git-info
$ alias
alias ls='ls --color=auto'
alias oldshell='sh'

Como se observa en la sentencia alias hi='echo We salute you.', debemos encerrar los comandos entre comillas (ya sea simple o doble) cuando — los argumentos o parámetros — contienen espacios:

$ alias greet='echo Hello world!'
$ greet
Hello world!

Los comandos con espacios también son incluidos con esas opciones:

$ alias ll='ls -al'

Ahora ll listará todos los archivos — incluyendo los ocultos (a) — en el formato largo (l).

Podemos referenciar variables en los alias:

$ reptile=uromastyx
$ alias greet='echo Hello $reptile!'
$ greet
Hello uromastyx!

La variable también puede ser asignada dentro del alias:

$ alias greet='reptile=tortoise; echo Hello $reptile!'
$ greet
Hello tortoise!

Podemos escapar de un alias con \:

$ alias where?='echo $PWD'
$ where?
/home/user2
$ \where?
-bash: where?: command not found

Escapar de un alias es útil cuando un alias tiene el mismo nombre que un comando normal. En este caso, el alias tiene prioridad sobre el comando original, sin embargo, este sigue siendo accesible al escapar del alias.

Del mismo modo, podemos colocar un alias dentro de otro alias:

$ where?
/home/user2
$ alias my_home=where?
$ my_home
/home/user2

Además, también podemos agregar una función dentro de un alias como se muestra a continuación.

Expansión y evaluación de las comillas en los alias

Cuando se usan comillas con variables de entorno, las comillas simples hacen que la expansión sea dinámica:

$ alias where?='echo $PWD'
$ where?
/home/user2
$ cd Music
$ where?
/home/user2/Music

Sin embargo, con las comillas dobles la expansión se hace de forma estática:

$ alias where?="echo $PWD"
$ where?
/home/user2
$ cd Music
$ where?
/home/user2

Persistencia de Alias: Scripts de inicio

Al igual que con las variables, para que nuestros alias ganen persistencia, debemos escribirlos en scripts de inicialización que se ejecuten al inicio. Como ya sabemos, un buen archivo para que los usuarios agreguen sus alias personales es ~/.bashrc. Probablemente encontrarás algunos alias allí (la mayoría de ellos comentados y listos para ser usados eliminando el # principal):

$ grep alias .bashrc
# enable color support of ls and also add handy aliases
    alias ls='ls --color=auto'
    #alias dir='dir --color=
    #alias vdir='vdir --color=
    #alias grep='grep --color=
    #alias fgrep='fgrep --color'
    #alias egrep='egrep --color=
# some more ls aliases
#ll='ls -al'
#alias la='ls -A'
#alias l='ls -CF'
# ~/.bash_aliases, instead of adding them here directly.
if [ -f ~/.bash_aliases ]; then
   . ~/.bash_aliases

Como pueden leer en las últimas tres líneas, se nos ofrece la posibilidad de tener nuestro propio archivo dedicado a los alias — ~/.bash_aliases — y ser ejecutado por .bashrc con cada inicio del sistema. Así que podemos ir por esa opción, crear y editar dicho archivo:

###########
# .bash_aliases:
# a file to be populated by the user's personal aliases (and sourced by ~/.bashrc).
###########
alias git_info='which git;git --version'
alias greet='echo Hello world!'
alias ll='ls -al'
alias where?='echo $PWD'

Creando funciones

En comparación con los alias, las funciones son más programables y flexibles, especialmente cuando se trata de explotar todo el potencial de las variables incorporadas y los parámetros posicionales de Bash. También son muy buenas para trabajar con estructuras de control de flujo, como bucles o condicionales. Podemos pensar en una función como un comando que incluye la lógica a través de bloques o colecciones de otros comandos.

Dos sintaxis para crear funciones

Hay dos sintaxis válidas para definir las funciones.

Usando la palabra clave function

Por un lado, podemos usar la palabra clave function, seguida del nombre de la función y los comandos entre corchetes:

function function_name {
command #1
command #2
command #3
.
.
.
command #n
}
Using ()

Por otro lado, podemos omitir la palabra function y usar dos paréntesis justo después del nombre de la función:

function_name() {
command #1
command #2
command #3
.
.
.
command #n
}

Es común agregar funciones en archivos o scripts. Sin embargo, también se puede escribir con cada comando en el shell prompt, en una línea diferente — note PS2(>) que indica una nueva línea después de un salto de línea:

$ greet() {
> greeting="Hello world!"
> echo $greeting
> }

En cualquier caso, e independientemente de la sintaxis que elijamos, si decidimos saltarnos los saltos de línea y escribir una función en una sola línea, los comandos deben estar separados por punto y coma (también observe el punto y coma que hay después del último comando):

$ greet() { greeting="Hello world!"; echo $greeting; }

El shell bash no se reaccionó negativamente cuando presionamos "Enter", así que nuestra función está lista para ser invocada. Para invocar una función, debemos escribir su nombre en la terminal:

$ greet
Hello world!

Al igual que con las variables y los alias, si queremos que las funciones sean persistentes a través de los reinicios del sistema tenemos que agregarlas en los scripts de inicialización de shell como /etc/bash.bashrc (global) o ~/.bashrc (local).

Warning

Después de añadir alias o funciones a cualquier archivo de script de inicio, debe ejecutar tales archivos con . o source para que los cambios surtan efecto si no quiere salir y volver a entrar o reiniciar el sistema.

Variables especiales incorporadas en Bash

Bourne Again Shell llega con un conjunto de variables especiales que son particularmente útiles para funciones y scripts. Estas son especiales porque sólo pueden ser referenciadas — no asignadas. Aquí hay una lista de las más relevantes:

$?

La referencia de esta variable se expande hasta el resultado de la última ejecución del comando. Un valor de 0 significa éxito:

$ ps aux | grep bash
user2      420  0.0  0.4  21156  5012 pts/0    Ss   17:10   0:00 -bash
user2      640  0.0  0.0  12784   936 pts/0    S+   18:04   0:00 grep bash
$ echo $?
0

Un valor distinto de 0 significa error:

user1@debian:~$ ps aux |rep bash
-bash: rep: command not found
user1@debian:~$ echo $?
127
$$

Se expande hasta el PID del shell (process ID):

$ ps aux | grep bash
user2      420  0.0  0.4  21156  5012 pts/0    Ss   17:10   0:00 -bash
user2      640  0.0  0.0  12784   936 pts/0    S+   18:04   0:00 grep bash
$ echo $$
420
$!

It expands to the PID of the last background job:

$ ps aux | grep bash &
[1] 663
$ user2      420  0.0  0.4  21156  5012 pts/0    Ss+  17:10   0:00 -bash
user2      663  0.0  0.0  12784   972 pts/0    S    18:08   0:00 grep bash
^C
[1]+  Done                   ps aux | grep bash
$ echo $!
663
Note

Remember, the ampersand (&) is used to start processes in the background.

Parámetros de posición de 0 a 9

Se expanden a los parámetros o argumentos que se pasan a la función (alias o script) — $0 expandiéndose al nombre del script o shell.

Vamos a crear una función para demostrar los parámetros de posición — note PS2 (>) indicando nuevas líneas después de los saltos de línea:

$ special_vars() {
> echo $0
> echo $1
> echo $2
> echo $3
}

Ahora, invocaremos la función (special_vars) pasándole tres parámetros (debian, ubuntu, zorin):

$ special_vars debian ubuntu zorin
-bash
debian
ubuntu
zorin

Excelente, funcionó como se esperaba.

Warning

Aunque pasar parámetros posicionales a los alias es técnicamente posible, no es en absoluto funcional ya que - con los alias - los parámetros posicionales siempre se pasan al final:

$ alias great_editor='echo $1 is a great text editor'
$ great_editor emacs
is a great text editor emacs

Otras variables especiales incorporadas en Bash incluyen:

$#

Se expande al número de argumentos que se le pasan al comando.

$@, $*

Se extienden a los argumentos pasados al comando.

$_

Se expande hasta el último parámetro o el nombre del script (entre otras cosas; ¡revisa "man bash" para conocer más!):

Variables en funciones

Por supuesto, las variables pueden utilizarse dentro de las funciones.

Para probarlo, esta vez crearemos un nuevo archivo vacío llamado funed y agregaremos la siguiente función:

editors() {

editor=emacs

echo "My editor is: $editor. $editor is a fun text editor."
}

Como ya habrán adivinado, debemos obtener el archivo primero para poder invocar la función:

$ . funed

Y ahora podemos probarlo:

$ editors
My editor is emacs. emacs is a fun text editor.

Como pueden apreciar, para que la función de editors funcione correctamente, la variable editor debe ser fijada primero. El alcance de esa variable es local al shell actual y podemos referirnos a ella mientras la sesión este activa:

$ echo $editor
emacs

Junto con las variables locales también podemos incluir variables de entorno en nuestra función:

editors() {

editor=emacs

echo "The text editor of $USER is: $editor."
}

editors

Note como esta vez decidimos llamar a la función desde el propio archivo (editors en la última línea). De esta manera, cuando hagamos la ejecución del archivo, la función también será invocada — todo a la vez:

$ . funed
The text editor of user2 is: emacs.

Parámetros de posición en las funciones

Algo similar ocurre con los parámetros posicionales.

Podemos pasarlos a las funciones desde adentro del archivo o el script (note la última línea: editors tortoise):

editors() {

editor=emacs

echo "The text editor of $USER is: $editor."
echo "Bash is not a $1 shell."
}

editors tortoise

Buscamos la fuente del archivo y probamos que funciona:

$ . funed
The text editor of user2 is: emacs.
Bash is not a tortoise shell.

Y también podemos pasar parámetros posicionales a funciones en la línea de comandos. Para probarlo, nos deshacemos de la última línea del archivo:

editors() {

editor=emacs

echo "The text editor of $USER is: $editor."
echo "Bash is not a $1 shell."
}

Entonces, tenemos que ejecutar el archivo:

$ . funed

Finalmente, invocamos la función con tortoise como el parámetro posicional 1$ en la línea de comando:

$ editors tortoise
The text editor of user2 is: emacs.
Bash is not a tortoise shell.

Funciones en Scripts

Las funciones se encuentran principalmente en scripts de Bash.

Convertir nuestro archivo funed en un script (lo llamaremos funed.sh) es realmente sencillo:

#!/bin/bash

editors() {

editor=emacs

echo "The text editor of $USER is: $editor."
echo "Bash is not a $1 shell."
}

editors tortoise

¡Eso es! Sólo añadimos dos líneas:

  • La primera línea es el shebang y define qué programa va a interpretar el script: #!/bin/bash. Curiosamente, ese programa es bash en sí mismo.

  • La última línea es simplemente la invocación de la función.

Ahora sólo queda una cosa — tenemos que hacer el script ejecutable:

$ chmod +x funed.sh

Y ahora está listo para ser ejecutado:

$ ./funed.sh
The text editor of user2 is: emacs.
Bash is not a tortoise shell.
Note

Aprenderás todo sobre el shell scripting en las próximas lecciones.

Una función dentro de un Alias

Como se ha dicho antes, podemos agregar una función dentro de un alias:

$ alias great_editor='gr8_ed() { echo $1 is a great text editor; unset -f gr8_ed; }; gr8_ed'

Este largo valor del alias merece una explicación. Vamos a desglosarlo:

  • Primero está la función en sí misma: gr8_ed() { echo $1 is a great text editor; unset -f gr8_ed; }

  • El último comando de la función — unset -f gr8_ed — remueve la función para que no permanezca en la sesión actual de bash después de que el alias sea llamado.

  • Por último, pero no menos importante, para tener una invocación de alias exitosa, también debemos invocar la función: gr8_ed.

Invoquemos el alias y probemos si funciona:

$ great_editor emacs
emacs is a great text editor

Como se muestra en unset -f gr8_ed, el comando unset no sólo se usa para remover variables, sino también funciones. De hecho, hay opciones específicas:

unset -v

para variables

unset -f

para funciones

Si se usa sin opciones, unset tratará de desajustar una variable primero y — si falla — entonces tratará de desajustar una función.

Una función dentro de un Alias

Ahora mencionamos que queremos comunicar dos cosas a user2 cada vez que se registre en el sistema:

  • Saludar y recomendar un editor de texto.

  • Ya que está empezando a agregar muchos archivos de video de Matrosk`" en su carpeta `$HOME/Video, también queremos darle una advertencia.

Para lograr ese propósito, hemos puesto las siguientes dos funciones en /home/user2/.bashrc:

La primera función (check_vids) hace el chequeo de los archivos .mkv y la advertencia:

check_vids() {
    ls -1 ~/Video/*.mkv > /dev/null 2>&1
    if [ "$?" = "0" ];then
        echo -e "Remember, you must not keep more than 5 video files in your Video folder.\nThanks."
    else
	echo -e "You do not have any videos in the Video folder. You can keep up to 5.\nThanks."
    fi
}

check_vids hace tres cosas:

  • Lista los archivos mkv en ~/Video enviando la salida — y cualquier error — al llamado bit-bucket (/dev/null).

  • Prueba la salida del comando anterior para el éxito.

  • Dependiendo del resultado de la prueba, imprime uno de los dos mensajes.

La segunda función es una versión modificada de nuestra función de editors:

editors() {

editor=emacs

echo "Hi, $USER!"
echo "$editor is more than a text editor!"

check_vids
}

editors

Es importante observar dos cosas:

  • El último comando de editors invoca check_vids para que ambas funciones se encadenen: El saludo, el elogio, el chequeo y la advertencia se ejecutan en secuencia.

  • editors es el mismo punto de entrada a la secuencia de funciones, por lo que se invoca en la última línea (editors).

Ahora, entremos como user2 y probemos que funciona:

# su - user2
Hi, user2!
emacs is more than a text editor!
Remember, you must not keep more than 5 video files in your Video folder.
Thanks.

Ejercicios guiados

  1. Completa la tabla con Sí o No considerando las capacidades de los alias y las funciones:

    Características Alias Funciones

    Las variables locales pueden ser usadas

    Las variables de entorno pueden ser utilizadas

    Se puede escapar con \

    Puede ser recursivo.

    Muy productivo cuando se usa con parámetros posicionales

  2. Introduzca el comando que lista todos los alias en su sistema:

  3. Escribe un alias llamado logg que enumere todos los archivos ogg en ~/Music — uno por línea:

  4. Invoca el alias para probar que funciona:

  5. Ahora, modifica el alias para que imprima el usuario de la sesión y dos puntos antes del listado:

  6. Invóquelo de nuevo para probar que esta nueva versión también funciona:

  7. Enumera todos los alias de nuevo y comprueba que tu alias de logg aparece en el listado:

  8. Quite el alias:

  9. Estudie las columnas Nombre del alias,Comando(s) aliado(s) y asigne los alias a sus valores correctamente:

    Nombre del alias Comando(s) aliado(s) Asignación de Alias

    b

    bash

    bash_info

    which bash + echo "$BASH_VERSION"

    kernel_info

    uname -r

    greet

    echo Hi, $USER!

    computer

    pc=slimbook + echo My computer is a $pc

  10. Como root, escribe una función llamada my_fun en etc/bash.bashrc. La función debe saludar al usuario y decirle cuál es su PATH. Invóque la función para que el usuario reciba los dos mensajes cada vez que inicie sesión:

  11. Ingrese como user2 para comprobar que funciona:

  12. Escriba la misma función en una sola línea:

  13. Invoca la función:

  14. Desconecta la función:

  15. Esta es una versión modificada de la función special_vars:

    $ special_vars2() {
    > echo $#
    > echo $_
    > echo $1
    > echo $4
    > echo $6
    > echo $7
    > echo $_
    > echo $@
    > echo $?
    > }

    Este es el comando que usamos para invocarlo:

    $ special_vars2 crying cockles and mussels alive alive oh

    Adivina las salidas:

    Referencia Valor

    echo $#

    echo $_

    echo $1

    echo $4

    echo $6

    echo $7

    echo $_

    echo $@

    echo $?

  16. Basándonos en la función de muestra (check_vids) en la sección “Función dentro de una función”, escribe una función llamada check_music para incluirla en un script de inicio bash que acepte parámetros posicionales para que podamos modificarla fácilmente:

    • El tipo de archivo que se comprueba: ogg

    • El directorio en el que se guardan los archivos: ~/Music

    • El tipo de archivo que se guarda: music

    • El número de archivos que se guardan: 7

Ejercicios de exploración

  1. Las funciones de sólo lectura son aquellas cuyo contenido no podemos modificar. Haga una investigación sobre funciones de sólo lectura y complete la siguiente tabla:

    Nombre de la función Haz que sea sólo de lectura Lista de todas las funciones de sólo lectura

    my_fun

  2. Busca en la web cómo modificar PS1 y cualquier otra cosa que necesites para escribir una función llamada fyi (que se colocará en un script de inicio) que le da al usuario la siguiente información:

    • Nombre del usuario

    • Directorio principal

    • Nombre del host

    • Tipo de sistema operativo

    • Buscar la ruta (PATH) de ejecutables

    • Directorio de correo

    • Con qué frecuencia se revisa el correo

    • ¿Cuántos shells tiene la sesión actual?

    • Prompt (deberías modificarlo para que muestre <user>@<host-date>)

Resumen

En esta lección aprendiste:

  • Tanto los alias como las funciones son características importantes de shell que nos permiten encapsular bloques de código recurrentes.

  • Los alias son útiles para tener versiones más cortas de comandos largos y/o complicados.

  • Las funciones son procedimientos que implementan la lógica y nos permiten automatizar tareas, especialmente cuando se usan en scripts.

  • La sintaxis para escribir alias y funciones.

  • Como concatenar varios comandos por medio del punto y coma (;).

  • Como usar correctamente las comillas con los alias.

  • Como hacer que los alias y las funciones sean persistentes.

  • Variables Bash especiales incorporadas: $?, $$, $!, parámetros de posición ($0-$9), $#, $@, $* y $_.

  • Como usar variables y parámetros posicionales con las funciones.

  • Como usar funciones en los scripts.

  • Como invocar una función desde un alias.

  • Como invocar una función desde otra función.

  • Lo básico para crear un script bash.

Comandos y palabras clave utilizadas en esta lección:

alias

Crear alias.

unalias

Eliminar alias.

cd

Cambiar de directorio.

grep

Imprime líneas que coincidan con un patrón.

function

Palabra clave de Shell para crear funciones

.

Ejecutar un archivo

source

Realiza una ejecución de un archivo con el comando source

ps

Captura de los procesos actuales.

echo

Imprimir en pantalla una línea de texto.

chmod

Cambiar permisos de un archivo, por ejemplo hacerlo ejecutable.

unset

Remover variables and funciones.

su

Cambia la identificación de usuario o lo convierte en superusuario.

Respuesta a los ejercicios guiados

  1. Completa la tabla con Sí o No considerando las capacidades de los alias y las funciones:

    Características Alias Funciones

    Las variables locales pueden ser usadas

    Sí

    Sí

    Las variables de entorno pueden ser utilizadas

    Sí

    Sí

    Se puede escapar con \

    Sí

    No

    Puede ser recursivo.

    Sí

    Sí

    Muy productivo cuando se usa con parámetros posicionales

    No

    Sí

  2. Introduzca el comando que lista todos los alias en su sistema:

    alias
  3. Escribe un alias llamado logg que enumere todos los archivos ogg en ~/Music — uno por línea:

    alias logg='ls -1 ~/Music/*ogg'
  4. Invoca el alias para probar que funciona:

    logg
  5. Ahora, modifica el alias para que imprima el usuario de la sesión y dos puntos antes del listado:

    alias logg='echo $USER:; ls -1 ~/Music/*ogg'
  6. Invóquelo de nuevo para probar que esta nueva versión también funciona:

    logg
  7. Enumera todos los alias de nuevo y comprueba que tu alias de logg aparece en el listado:

    alias
  8. Quite el alias:

    unalias logg
  9. Estudie las columnas Nombre del alias,Comando(s) aliado(s) y asigne los alias a sus valores correctamente:

    Nombre del alias Comando(s) aliado(s) Asignación de Alias

    b

    bash

    alias b=bash

    bash_info

    which bash + echo "$BASH_VERSION"

    alias bash_info='which bash; echo "BASH_VERSION"'

    kernel_info

    uname -r

    alias kernel_info='uname -r'

    greet

    echo Hi, $USER!

    alias greet='echo Hi, $USER'

    computer

    pc=slimbook + echo My computer is a $pc

    alias computer='pc=slimbook; echo My computer is a $pc'

    Note

    Las comillas simples también pueden ser reemplazadas por dobles.

  10. Como root, escribe una función llamada my_fun en etc/bash.bashrc. La función debe saludar al usuario y decirle cuál es su PATH. Invóque la función para que el usuario reciba los dos mensajes cada vez que inicie sesión:

    Opción A:

    my_fun() {
    echo Hello, $USER!
    echo Your path is: $PATH
    }
    my_fun

    Opción B:

    function my_fun {
    echo Hello, $USER!
    echo Your path is: $PATH
    }
    my_fun
  11. Ingrese como user2 para comprobar que funciona:

    su - user2
  12. Escriba la misma función en una sola línea:

    Opción A:

    my_fun() { echo "Hello, $USER!"; echo "Your path is: $PATH"; }

    Opción B:

    function my_fun { echo "Hello, $USER!"; echo "Your path is: $PATH"; }
  13. Invoca la función:

    my_fun
  14. Remover la función:

    unset -f my_fun
  15. Esta es una versión modificada de la función special_vars:

    $ special_vars2() {
    > echo $#
    > echo $_
    > echo $1
    > echo $4
    > echo $6
    > echo $7
    > echo $_
    > echo $@
    > echo $?
    > }

    Este es el comando que usamos para invocarlo:

    $ special_vars2 crying cockles and mussels alive alive oh

    Adivina las salidas:

    Referencia Valor

    echo $#

    7

    echo $_

    7

    echo $1

    crying

    echo $4

    mussels

    echo $6

    alive

    echo $7

    oh

    echo $_

    oh

    echo $@

    crying cockles and mussels alive alive oh

    echo $?

    0

  16. Basándonos en la función de muestra (check_vids) en la sección “Función dentro de una función”, escribe una función llamada check_music para incluirla en un script de inicio bash que acepte parámetros posicionales para que podamos modificarla fácilmente:

    • El tipo de archivo que se comprueba: ogg

    • El directorio en el que se guardan los archivos: ~/Music

    • El tipo de archivo que se guarda: music

    • El número de archivos que se guardan: 7

      check_music() {
          ls -1 ~/$1/*.$2 > ~/.mkv.log 2>&1
          if [ "$?" = "0" ];then
              echo -e "Remember, you must not keep more than $3 $4 files in your $1 folder.\nThanks."
          else
      	 echo -e "You do not have any $4 files in the $1 folder. You can keep up to $3.\nThanks."
          fi
      }
      
      check_music Music ogg 7 music

Respuestas a los ejercicios de exploración

  1. Las funciones de sólo lectura son aquellas cuyo contenido no podemos modificar. Haga una investigación sobre funciones de sólo lectura y complete la siguiente tabla:

    Nombre de la función

    Haz que sea sólo de lectura

    Lista de todas las funciones de sólo lectura

    my_fun

    readonly -f my_fun

    readonly -f

  2. Busca en la web cómo modificar PS1 y cualquier otra cosa que necesites para escribir una función llamada fyi (que se colocará en un script de inicio) que le da al usuario la siguiente información:

    • Nombre del usuario

    • Directorio principal

    • Nombre del host

    • Tipo de sistema operativo

    • Buscar la ruta (PATH) de ejecutables

    • Directorio de correo

    • Con qué frecuencia se revisa el correo

    • ¿Cuántos shells tiene la sesión actual? *

    • prompt (deberías modificarlo para que muestre <user>@<host-date>)

      fyi() {
          echo -e "For your Information:\n
          Username: $USER
          Home directory: $HOME
          Host: $HOSTNAME
          Operating System: $OSTYPE
          Path for executable files: $PATH
          Your mail directory is $MAIL and is searched every $MAILCHECK seconds.
          The current level of your shell is: $SHLVL"
          PS1="\u@\h-\d "
      }
      
      fyi

© 2020 Linux Professional Insitute Inc. Todos los derechos reservados. Visite el sitio web de Learning Materials: https://asir.sudo.es/docnux/learning.lpi.org
Este trabajo está registrado bajo la Licencia Internacional Creative Commons Attribution-NonCommercial-NoDerivatives 4.0

Siguiente lección

105.2 Personalización y escritura de scripts sencillos (105.2 Lección 1)

Leer la próxima lección

© 2020 Linux Professional Insitute Inc. Todos los derechos reservados. Visite el sitio web de Learning Materials: https://asir.sudo.es/docnux/learning.lpi.org
Este trabajo está registrado bajo la Licencia Internacional Creative Commons Attribution-NonCommercial-NoDerivatives 4.0

LPI es una organización sin fines de lucro.

Linux Professional Institute (LPI) es la organización global de certificación y apoyo académico para profesionales de código abierto. Con más de 200,000 titulares de certificación, es el primer y más grande organismo de certificación no comercial del mundo para Linux y Open Source. LPI cuenta con profesionales certificados en más de 180 países, realiza exámenes en varios idiomas y tiene cientos de socios de capacitación.

Nuestro propósito es hacer que las oportunidades económicas y creativas estén disponibles para todos, haciendo que el conocimiento de código abierto y la certificación sea universalmente accesible.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Contáctenos
  • Política de privacidad y cookies

¿Detecta un error o desea ayudar a mejorar esta página? Por favor háznoslo saber.

© Copyright 1999-2020 The Linux Professional Institute Inc. Todos los derechos reservados.