En este momento estás viendo El entorno del shell II

El entorno del shell II

Vista la sintaxis del entorno del shell en el post anterior, vamos a ver que son:

  • Tuberías
  • Filtros
  • Variables del entorno
  • Variables del shell
  • El operador grave
  • Ejecución de varias órdenes en la misma línea de comandos

Tuberías

Es habitual que necesitemos pasar la salida de una orden a otra como entrada. Para ello utilizamos el operador «|». Veamos un ejemplo:

ls -l > tuberias
cat tuberias
rm tuberias

La salida del comando la redirigimos a un fichero llamado «tuberias» , luego mostramos el contenido de dicho fichero y finalmente lo borramos.

En la ejecución de estos comandos, el flujo de los datos de entrada, salida y error estandar es como sigue:

Para conseguir esto en una sola linea, el shell, nos ofrece un operador muy potente, el operador tubería «|» (pipe, en inglés), que nos permite ejecutar varias ordenes en una sola linea. Veámoslo con el ejemplo anterior. No necesitaremos crear el fichero temporal «tuberías», lo resolveríamos más rápido con la siguiente linea:

ls -l | cat

Filtros

La linea de comandos con tuberías, no está limitada a dos órdenes, podemos seguir pasando la salida a otro comando, tantas veces como necesitemos. En cada uno de esos pasos, iremos filtrando la información que buscamos.

Las órdenes que utilizamos para este objetivo son llamadas filtros. En los sistemas UNIX, encontramos numerosas órdenes que funcionan como filtros.

Orden «grep»

Una de las más poderosas es el comando «grep», que se utiliza para realizar búsquedas. Vamos a ver un ejemplo:

cat buscar
cat buscar | grep a

Como podemos ver con «grep» buscamos las lineas en las que hay, al menos, una «a», y lo muestra por la salida estandar.

Filtro «tr»

Otro filtro es el comando «tr», con el que podemos cambiar un caracter o cadena por otros. En el siguiente ejemplo, vemos el contenido del fichero «buscar» y sustituimos las «e» que encuentre por el número «3».

cat buscar | tr e 3 

El comando «wc»

También podemos utilizar el comando «wc», que se utiliza para contar palabras, lineas, caracteres, etc.. (ver «man wc» en la terminal). En la siguiente captura vemos, del contenido del fichero «buscar»:

  • el número de lineas
  • el número de caracteres
  • el número de palabras

Variables del entorno

Cuando abrimos sesión en un sistema UNIX, tenemos una serie de variables asociadas a nuestro entorno de trabajo, a nuestra ID, que están «vivas» hasta que cierras la sesión.

Todos los shell que generemos en la misma sesión compartirán estas variables.

Algunas de las más utilizadas son:

HOMEDirectorio del usuario
LOGNAMEIdentificador del usuario
PATHDirectorios que contienen los comandos
SHELLShell que se está ejecutando

Si las queremos ver todas, tenemos la orden «env», que nos mostrará por la salida estandar todas las variables asociadas a nuestra sesión.

env

Nos da esta salida, de la que muestro los últimos valores…

Si queremos saber el valor de una variable en concreto, tenemos que utilizar el comando «echo» y añadir al principio el signo «$».

echo $LOGNAME 

Variables del shell

Además de las variables de entorno que hemos visto, el sistema nos permite definir variables locales que afectan únicamente al shell en ejecución. Para ello tenemos que introducir el nombre de la variable y su valor como se ve en la siguiente captura.

Le hemos asignado a la variable «PRUEBA» el valor «10» y lo comprobamos, después lo hemos cambiado por «ande o no ande, siempre burra grande».

Con la orden «set», obtendremos una lista de todas las variables del entorno y de las del shell local en ejecución.

set

Otras variables del entorno y del shell

Con la orden «echo», igual que con las variables del entorno, podemos ver el valor de una variable del shell.

echo $PRUEBA

Podemos utilizar todas las variables como nombres de orden o como argumentos. Por ejemplo:

CONTENIDO="cat fichero"
cd $HOME/javier/Documentos

Acotación de argumentos en la línea de órdenes

El Shell interpreta una cadena de caracteres, incluyendo espacios en blanco como argumentos múltiples. Así, por ejemplo, si ejecutamos,

PRUEBA=nuevo valor

Vemos que, en este ejemplo, el shell asigna un valor a la variable «PRUEBA» que es «nuevo» y trata de ejecutar el comando «valor», que nos dice que no se encuentra.

Para solucionar este problema tenemos que recoger la cadena de caracteres entre comillas dobles.

Tenemos que saber que las comillas dobles interpretan el caracter «$» como un símbolo especial del shell, y por tanto no protegen a las variables de entorno o del shell. Veamos…

Para evitar que «$» no se considere un carácter especial del shell, sino un carácter ascii más, ha de ir protegido entre comillas simples. Siguiendo con el mismo ejemplo,

Veamos que pasa si jugamos con las comillas,

El operador grave

Este operador usado como sigue: ‘comando’, está obsoleto hay que hacerlo con $(comando)

Podemos tomar la salida estandar de una orden y utilizarla en la linea de ordenes también. Veamos…

Como vemos las dos órdenes son equivalentes.

Ejecución de varias órdenes en la misma línea de comandos

Muchas veces es muy util ejecutar más de un comando en la misma línea de comandos. Para ello basta con separar los comandos con un punto y coma, como se muestra a continuación.

echo "Practicas_scripts/";ls -l | more; sleep 10; clear

Como vemos, la orden muestra «Practicas_scripts/», crea un listado del directorio actual, lo muestra por la salida estandar , se espera 10 segundos y limpia la pantalla.

En próximos posts seguiremos con el entorno del shell.

Si tienes algún comentario que hacer, al pie del post tienes un formulario para hacerlo.

Y si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, o te quieres suscribir para recibir un correo-e cuando haya una nueva publicación, en la pagina de contacto, tienes otro formulario.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.