Tutorial: Lenguaje del Interprete de Comandos
La shell interpreta las ordenes que ingresas a nuestro sistema de computo y te devuelve los resultados en tu terminal remota.
Si bien dispones de varias shells para elegir, todos las shells Unix suelen derivar del interprete C shell. Esto implica que algunas caracteristicas de uso son comunes entre todas ellas, y puede ser muy util aprenderlas para lograr resultados mas utiles.
¡Aprende algunas caracteristicas en comun de los interpretes de comandos!
Metacaracteres
La shell recibe los caracteres (letras y simbolos). Sin embargo, alguno de estos caracteres son "especiales", conocidos como meta-caracteres. Te ofreceran posibilidades de realizar tareas especiales al ser interpretados de diferentes maneras. Estos caracteres son los siguientes,
*
?
[
]
se interpretan como "comodines", y se pueden operar como "atajos" en los nombres de fichero o directorio.;
Este caracter permite ingresar varios comandos seguidos, y hacerlo en una sola orden. Cada comando debe estar intercedido por un;
. Cuando presiones la tecla Intro cada comando que compone la orden resultara introducido secuencialmente (desde comienzo de la linea hasta el final).&
Este caracter envia la ejecucion del comandos en segundo plano, y mientras la shell ejecuta dicha orden, tu terminal quedara libre para que puedas continuar realizando otras operaciones.\
El caracter de barra invertida permite desactivar la interpretacion de los meta-caracteres tales como*
,[]
,&
, y;
."
..."
'
...'
Los entrecomillados y los entreapostrofos ocultan contenido al shell, desactivando tanto el significado delimitador del espacio entre ellos, asi como la interpretacion de los caracteres especiales. Sin embargo, las comillas permiten que los caracteres$
y\
retengan su significado especial.- El acento grave
..
se utilizan para expansion de comandos. (ver caracteres especiales en el teclado espanol
Los caracteres
$
y\
se discutiran mas adelante y son importante para los programas interpretados.
Metacaracteres Comodines
Los comodines son caracteres "de inclusion".
Comodin para cualesquiera caracteres (*)
El caracter asterisco *
representa todo el
contenido de caracteres, y en el contexto de archivaje, denota
la inclusion de "todos los ficheros en el directorio
actual".
Por ejemplo, podrias utilizar el comando echo - capaz de
presentar una cadena de texto en la terminal - y combinarlo con el
*
para lograr el resultado deseado. Por ejemplo, introduce
en tu terminal:
echo *
...y recibiras como eco de respuesta una lista con todos los ficheros del directorio actual.
Por favor, ten especial cuidado al emplear el metacaracter
*
pues significa "todo cualesquiera". Por
ejemplo, si indicas:
ls *.txt
...listara todos los ficheros en el directorio actual (cualesquier
nombre que tengan), cuya extension sea .txt
.
Podrias indicar que liste cualesquier ficheros que contiengan una
letra s
incorporada en cierto lugar de su nombre de
archivo, de esta manera:
ls *s*
Si introduces:
ls reporte*
Sera interpretado como "lista cualesquier fichero contenido en el
directorio actual, cuyo nombre contenga cualquier letra a continuacion
de reporte
inclusive". Esto incluiria, por ejemplo:
reporte
reporte1
reporte1a
reporte2b.0.txt
reporte_final_editado.txt
reporte_viejo.bak
Comodin para un caracter (?)
El signo cierre de interrogacion ?
se
interpreta como la inclusion de "un caracter unico
cualquiera".
Por ejemplo, podrias ordenar:
ls capitulo?
...y te podria devolver:
capitulo1
capitulo2
capitulo3
capitulo4
capitulo5
capitulo6
capitulo7
capitulo8
capitulo9
...pero no listara el capitulo10
.
Afortunadamente, si utilizas doble cierre de
interrogacion (??
), el interprete buscara dos
caracteres cualesquiera:
ls capitulo??
...y podria dar desde capitulo10
hasta
capitulo99
. De la misma forma, procediendo con
???
se buscaran tres caracteres cualquiera, etc, etc.
Rangos ([])
Utiliza los corchetes []
para incluir cierto
rango de cualquier caracter delimitado. Por ejemplo, si
introduces la siguiente delimitacion:
ls [gpr]ata
...el interprete podria listarte los ficheros gata
,
pata
y rata
(si existiesen en el directorio
actual, claro esta).
Puedes utilizar tambien el encorchetado si deseas manifestar rangos numericos. Esto es muy util. En este sentido podrias ordenar:
cat capitulo[2-4]
...lo que lograria concatenar los contenidos de los ficheros
capitulo2
, capitulo3
y capitulo4
en tu terminal.
Tambien podras delimitar letras alfabericos.
[a-z]
respondera a letras minusculas, mientras que
[A-Z]
lo hara con letras mayusculas. El resultado suele
presentarse en orden alfabetico.
Metacaracteres de redireccion
El uso de metacaracteres simples permite obrar la funcion de redireccion.
El metacaracter de redireccion signo mayor que
>
redirige el resultado (salida) a una localizacion
distinta a la terminal. Podras redirigir la salida hacia un fichero (si
existiese tal fichero previamente, lo reemplazara). Por ejemplo:
who > ~/reporte_logueo.txt
(date ; who) > reporte_logueo.txt
Esto ejecutara el comando date (fecha), luego el comando who, y sus
resultados secuencial sera escrito en el fichero
~/reporte.logueo.txt
.
Si en lugar de usar >
utilizas >>
,
el significado cambia de "sobreescribir en" a "agregar a".
Revisa el resultado y borra el fichero con:
cat ~/reporte_logueo.txt ; rm ~/reporte_logueo.txt
Ejecucion Secuencial
La ejecucion secuencial te permitira programar tareas complejas e introducirlas de una sola vez.
El caracter punto y coma ;
se interpreta como
"luego", y permite ejecutar secuencialmente mas de un
comando, que podras emplearlo en tanto los ingreses en una sola linea,
de la siguiente manera:
comando1; comando2; comando3;
Por ejemplo, imaginemos necesitar leer tu finger de usuario, luego desplazarte a tu directorio de usuario, luego presentar en terminal dicho directorio, y luego a continuacion solicitar un listado del mismo. Para hacer todo ello en una accion concatenada, operarias secuencialmente, de la siguiente manera:
finger $USER; cd; pwd; ls $HOME
Ejecucion Condicional
El uso de metacaracteres dobles denota diferentes funciones condicionales.
Utiliza &&
(que es intepretado como "si
y solo si") para ejecutar el comando1 y si
condicionalmente tiene exito, ejecutar el comando2
comando1 && comando2
...y utiliza ||
(que es interpretado como "solo
si no") para ejecutar un comando1 y si
condicionalmente fracasa, ejecutar un comando2:
comando1 || comando2
Ejecucion en Segundo Plano: &
El caracter et o "ampersand", el &
, se agrega al
final de un comando, para provocar su procesamiento en segundo
plano.
Esto se hace ingresando:
comando &
Ver tambien: Multitarea en texto-plano.xyz
Algunos comandos ejecutados en el shell podrian tardar mucho tiempo en ejecutarse. Podria ser conveniente que dejes esos comandos en segundo plano y liberes tu terminal de modo que puedas continuar ingresando otras ordenes al interprete.
Por ejemplo, el comando grep
se utiliza para realizar
busquedas de cadenas de texto. Podrias usarlo para buscar en segundo
plano todas las existencias de la cadena Mengana
en todos
los ficheros del directorio, de la siguiente manera:
grep Mengana * &
La terminal devolvera un identificador de proceso, el cual estara activo mientras se trabaja. Este numero de proceso es esencial para poder eliminarlo.
Desactivar la Interpretacion de meta-caracteres
Desactivar los caracteres especiales entrecomillando
-
''
Si usas apostrofos todos los metacaracteres contenidos entre ellas no seran interpretados. -
""
Si usas comillas todos los metacaracteres contenidos entre ellas no seran interpretados, exceptuando$
,\
y'
.
Los meta-caracteres no seran interpretados cuando aparecen
entrecomillados. El apostrofo simple desactiva todos los
meta-caracteres, mientras que las comillas lo hacen con todos con
excepcion de $
, \
y '
.
Estos delimitadores separan argumentos, y le dicen al interprete cuando termina un argumento y cuando inicia otro.
Los espacios tiene un significado especial, ya que delimita argumentos en un comando.
Desactivar la interpretacion de metacaracteres ()
La barra invertida \
desactiva la interpretacion del
meta-caracter indicado a inmediata continuacion.
Supongamos que queremos que el shell devuelva
"El juego de la $plata"
, sin que $plata
sea
interpretado como una variable:
$ echo "El juego de la $Plata"
el juego de la # es erroneo pues el $ es un metacaracter reservado y el entrecomillado no aparece.
$ echo "\"El juego de la \$Plata\""
"El juego de la $Plata"
#tAmbien podria ignorarse su interpretacion parcial del contenido entre apostrofes:
$ echo '"El juego de la $Plata"'
"El juego de la $Plata"
Expansion de comandos (..
)
Los acentos graves ``` se utilizan para definir una expansion de comandos anidados.
Cuando se utilizan los acentos graves ...
alrededor de
un texto, el interprete reemplaza el texto entre los acentos graves con
la devolucion de la ejecucion del comando anidado.
Por ejemplo, este comando anidara una solicitud del navegador w3m para conocer la IP local, y la devolucion la incorporara dentro de una cadena de texto informativa personalizada, gracias al comando Echo.
echo "Hola ~$USER, la IP de salida de $HOSTNAME es `w3m http://ipecho.net/plain`"
Conclusion
Este uso de lenguaje generico sirve para la mayoria de los interpretes de comandos. Cada uno de ellos cuenta - sin embargo, con distintas disidencias o particularidades.
¡No temas anunciar este logro con gab!:
gab -m "¡Practique lenguaje del interprete de comandos con $SHELL!"
Ver tambien:
Tutorial de Programacion en Bash
Fish Shell cuenta con ciertas diferencias.