Linux.Shell.Caracteres Especiales y Metacaracteres.

Caracteres Especiales.

Ismael Royano Gómez
Enredando con Linux.
3 min readAug 23, 2018

--

El shell realiza una sustitución cuando encuentra una expresión que contiene uno o más caracteres especiales. Veamos un ejemplo:

#!/bin/basha=10
echo -e "Value of a is $a \n"

En este ejemplo, simplemente mostramos el valor de a.
La opción -e sirve para que nos de la interpretación de los caracteres espaciales que hay en la barra invertida (\n).

  • \n. Nueva línea.
  • \\. Muestra el carácter de barra invertida como texto.
  • \a. Muestra un pitido de alerta.
  • \b. Retroceso.
  • \c. Suprime línea nueva.
  • \r. Retorno de carro.
  • \t. Pestaña horizontal.
  • \v. Pesteña vertical.

Shell también nos permite guardar el resultado de la ejecución de comandos, simplemente metiendo el comando entre comillas inversas:

#!/bin/bashDATE=`date`
echo "Date is $DATE"
#Incluso varios comandos a la vez separados por comas.
UP=`date ; uptime`
echo "Uptime is $UP"

Sustitución de Variables.

La sustitución de variables permite al usuario poder modificar el contenido de éstas según su estado:

  • ${variable}. Sustituye el valor de variable.
  • ${variable:-”mensaje”}. Si la variable es nula o no tiene valor, lo sustituirá por “mensaje”, pero en ningún caso modificará el valor de variable. Se suele utilizar para mensajes de errores.
  • ${variable:=”mensaje”}. Si la variable es nula o no tiene valor, se guardará por defecto el valor que pongamos después del igual.
  • ${variable:?menaje}. Si la variable es nula o no tiene valor, se imprirá lo que pongamos después de la interrogación.
  • ${variable:+palabra}. Si la variable se establece, es sustituido por palabra pero el valor de variable no se modificará en ningún caso.
#!/bin/bashvar=1echo ${var:-"No tiene valor"}
echo "1 - El valor es ${var}"
echo ${var:="No tiene valor"}
echo "2 - valor es ${var}"
unset var
echo ${var:+"Por Defecto"}
echo "3 - El valor es $var"
var="Otro valor"
echo ${var:+"Tiene valor"}
echo "4 - El valor es $var"
echo ${var:?"Muéstrame este mensaje"}
echo "5 - El valor es ${var}"
  1. Si no tuviera valor mostraría “No tiene valor”
  2. Si no tuviera valor guardaría en la variable “No tiene valor”.
  3. Si no tuviera valor o no existiera guardaría en la variable “Por Defecto”
  4. Si tiene valor mostraría el mensaje “Tiene valor”.
  5. Si no tiene valor o no existe mostraría el mensaje “Muéstrame este mensaje”.

Metacaracteres.

Shell proporciona varios caracteres que tienen un significado especial al usarlos en cualquier Script, es decir, son como reservados por el propio sistema para realizar ciertas funciones especiales.

Un ejemplo claro puede ser el signo ? . Se utiliza para referirnos a un sólo carácter cuando se listan archivos o se busca por algún patrón. También le pasa al signo *, que lo utilizamos para referirnos a una cantidad indeterminada de caracteres a la hora de buscar o listar archivos.

Aquí hay una lista de la mayoría de los caracteres:

* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab

Algunos ejemplos:

#!/bin/sh

echo Hola \; Ismael
echo "I have \$1200"

Si ejecutamos este script el resultado sería el siguiente:

Hola; Ismael
I have $1200

El truco para que el sistema no interprete los caracteres especiales ; y $ está en la barra invertida \. Ésta hace que se olvide de que son metacaracteres y muestra el propio signo que estamos utilizando como un texto.

Si vamos a utilizar muchos caracteres especiales, es muy pesado poner una barra invertida a cada una, la solución estaría poner todo entre comilla simples y el sistema lo interpretará como si pusieramos una barra invertida a cada uno de ellos:

echo '<-$1500.**>; (Estás seguro?) [s|n]'

Si queremos que muestre variables y que interprete bien el $, debemos usar las comillas dobles:

variable=Ismael
echo "$variable <-\$1500.**>; [ as of (`date +%m/%d`) ]"

Las comillas dobles quita el significa especial que le da el sistema excepcionando los siguientes:

$
\$
\'
\"

También podemos guardar el resultado de comandos del sistema en una variable, de forma que podamos imprimir toda la información del comando:

DATE=`date`
echo "La fecha de hoy es: $DATE"

Para indicarle al sistema que es un comando, debemos especificárselo con las comillas invertidas.

Continúa por Redireccionar entradas y salidas de datos.

--

--

Ismael Royano Gómez
Enredando con Linux.

Técnico Informático curioso, lector activo de las nuevas tecnologías, amante de las series de televisión y usuario del respetable mundo del enredo.