Bash (II) - Comandos, variables de entorno y combinaciones de teclas


Table Of Contents

En este segundo articulo sobre el interprete de comandos bash, vamos a ver tres cosas importantes cuando trabajamos con bash:

  • Los comandos y palabras reservadas
  • Las variables de entorno
  • Combinaciones especiales de teclas

Estas tres cosas nos van a ayudar a trabajar y a escribir scripts y ficheros de configuracion en bash, a conseguir informacion sobre el interprete de comandos y a hacernos nuestro dias como administradores mucho mas faciles y llevaderos (siempre que usemos Bash como nuestro interprete de comandos).

Comandos y palabras reservadas

Aqui tenemos los comandos y palabras reservadas mas importantes que se pueden utilizar con bash, tanto desde scripts como desde la linea de comandos. Mas adelante en esta serie de articulos explicaremos y daremos ejemplos de como usarlos.

Comando		Explicacion 
-----------------------------------------------------------------------------
!		Palabra reservada. Valor logico NOT del codigo de retorno de
		un comando
:		No hace nada (expande cualquier argumento)
.		Lee un fichero y ejecuta su contenido en el interprete de
		comando actual	
	
alias		Configura un 'alias' para un comando o linea de comandos 
bg		Pone un trabajo en 'background'
bind		Asigna una secuencia de teclas a una funcion 'readline' o macro
break		Sale de un bucle for, select, while o until 
builtin		Ejecuta el interprete de comandos especificado 
case		Palabra reservada. Construccion condicional 
cd		Cambia el directorio de trabajo actual.
command		Ejecuta un comando sin pasar por la funcion de busqueda del
		interprete de comandos.
continue	Salta a la siguiente interacion en un bucle for, select, while
		o until
declare		Define variables y les da atributos
dirs		Muestra la lista actual de directorios recordados
disown		Remueve un trabajo/proceso de la tabla de trabajod/procesos
do		Palabra reservada. Parte de un bucle for, select, while
		o until
done		Palabra reservada. Parte de un bucle for, select, while
		o until
echo		Expande e imprime cualquier argumento
elif		Palabra reservada. Parte de una construccion if
else		Palabra reservada. Parte de una construccion if
enable		Enable and disable built-in shell commands
esac		Palabra reservada. Parte de una construccion case.
eval		Ejecuta los argumentos dados a traves de la linea de comandos
exec		Reemplaza el interprete de comandos con el programa definido
exit		Sale de el interprete de comandos
export		Crea variables de entorno
fc		Edita el fichero con la historia de comandos usados
fg		Pone un trabajo/proceso en background a foreground
fi		Palabra reservada. Parte de un construccion if.
for		Palabra reservada. Bucle de tipo for.
function	Define una funcion.
getopts		Procesa opciones de la linea de comandos.
hash		Rutas de acceso completas son determinadas y recordadas
help		Muestra informacion sobre comandos embedidos.
history		Muestra la historia de comandos usados
if		Palabra reservada. Construccion condicional de tipo if
in		Palabra reservada. Parte de una construccion condicional de
		tipo case
jobs		Muestra una lista con trabajos/procesos ejecutandose en background
kill		Manda una signal a un proceso
let		Asigna una variable aritmetica
local		crea una variable local
logout		Sale de un interprete de comando de tipo login
popd		Remueve un directorio del 'stack' de directorios
pushd		Añade un directorio al 'stack' de directorios
pwd		Muestra el directorio de trabajo actual.
read		Lee una linea en el 'standard input'
readonly	Hace las variable del tipo  solo lectura
return		Retorna de una funcion o script
select		Palabra reservada. Construccion del tipo generacion de menus.
set		Define opciones
shift		Cambia argumentos de la linea de comandos.
suspend		Suspende la ejecucion de un interprete de comandos.
test		Evalua una expresion condicional.
then		Palabra reservada. Parte de una construccion if.
time		Palabra reservada. Ejecuta un comando y muestra los tiempos de
		ejecucion. El formato de salida puede ser controlado con
		TIMEFORMAT
times		Muestra los tiempos de usuario y sistema acumulados para
		procesos ejecutados desde el interprete de comandos
trap		Define una rutina para atrapar una 'signal'
type		Identifica la fuente de un comando
typeset		Define variables y les da atributos. Igual que 'declare'
ulimit		Define/muestra los limites de recursos para los procesos
umask		Define/muestra la mascara de los permisos de ficheros
unalias		Remueve definiciones de alias
unset		Remueve definiciones de variables o funciones
until		Palabra reservada. Bucle de tipo until
wait		Espera a que trabajos/procesos en background terminen de ejecutarse
while		Palabra reservada. Bucle de tipo while

Variables de entorno

A continuacion tenemos la lista de variables reservadas por el interprete de comandos mas comunes. Todas ellas tienen un significado especial para el mismo, algunas de ellas solo se pueden leer, a otras se le asignan ciertos valores automaticamente y algunas pierden su significado si le cambiamos los valores que tienen por defecto.

Variable       Explicacion
---------------------------------------------------------------------------

CDPATH		Una lista de directorios separados por el signo ':' usada como
		ruta de acceso por el comando cd
HOME		El directorio principal de usuario
IFS		Una lista de caracteres para separar campos; usado cuando el
		interprete de comandos separa palabras como parte de una expansion.
MAIL		Si este parametro tiene un fichero definido y la variable
		MAILPATH no esta definida, bash informa al usuario de la
		llegada de correo al fichero especificado.
MAILPATH	Una lista de ficheros separada por comas, en los cuales el
		interprete de comandos comprueba periodicamente de la llegada
		de correo.	
OPTARG		El valor del ultimo argumento procesado por getopts.
OPTIND		El indice del ultimo argumento procesado por getopts
PATH		Una lista de directorios, separados por comas, en los cuales
		el interprete de comandos busca por comandos
PS1		Prompt principal. El valor por defecto es “'\s-\v\$ '
PS2		El prompt secundario. El valor por defecto es '> '	

auto_resume	Esta variable controla como el interprete de comandos
		interaciona con el control de usuario y trabajos/procesos 
BASH		La ruta de acceso completa usada para ejecutar la instancia
		actual de bash
BASH_ENV	Si esta variable esta definida cuando bash es llamado para
		ejecutar un script, su valor es expandido y usado como el
		nombre del fichero leido antes de ejecutar el script.
BASH_VERSION	El numero de version de bash usada 
BASH_VERSINFO	Una matriz de solo lectura con informacion sobre la version de
		bash usada.
COLUMNS		Usada por 'select' para determinar el ancho de la terminal
		cuando imprime listas de menus.
COMP_CWORD	Un indice en ${COMP_WORDS} de la palabra conteniendo la
		posicion del puntero actual
COMP_LINE	La linea de comando actual
COMP_POINT	El indice de la posicion relativa del puntero actual con
		respecto al comienzo del comando actual 
COMP_WORDS	Una matriz con las palabras individuales en la linea de
		comando actual
COMPREPLY	Una matriz de donde bash lee las palabras posibles generadas
		por una funcion del interprete de comandos usada por la
		utilidad de generacion de terminos posibles. 
DIRSTACK	Una matriz que contiene los contenidos actuales del stack de directorios
EUID		El identificador numerico de usuario del usuario actual 
FCEDIT		El editor usado por defecto por la opcion -e del comando 'fc'
FIGNORE		Una lista separada por comas de sufijos a ignorar cuando se
		efectua la generacion de posibles nombres de ficheros. 
FUNCNAME	El nombre de la funcion que se esta ejecutando actual 
GLOBIGNORE	Una lista separada por comas de los patrones que definen el
		conjunto de nombres de ficheros a ignorar cuando se efectua la
		generacion de posibles nombres
GROUPS		Una matriz que contiene la lista de los grupos a que pertenece
		el usuario actual
HISTCMD		El indice del comando actual en la historia de comandos 
HISTCONTROL	Define si un comando es ańadido a la historia de comandos
HISTFILE	El nombre del fichero en el cual se graba la historia de comandos
		de comandos. El valor por defecto es ~/.bash_history
HISTFILESIZE	El numero maximo de lineas contenidas en la historia de comandos,
		por defecto 500
HISTIGNORE	Una lista separada por comas de los patrones usados para
		definir que comandos deben de grabarse en la historia de comandos
HISTSIZE	El maximo numero de comandos a recordar en la historia de
		comandos, por defecto 500
HOSTFILE	Contiene el nombre de un fichero en el mismo formato que
		/etc/hosts que deberia de usarse cuando el interprete de
		comandos necesita completar un nombre de maquina (hostname)
HOSTNAME	El nombre de maquina actual
HOSTTYPE	Cadena describiendo la maquina que esta ejecutando Bash
IGNOREEOF	Controla la accion a tomar cuando el interprete de comandos
		recibe un caracter EOF
INPUTRC		Nombre del fichero de inicializacion de 'Readline',
		sobreescribiendo el valor por defecto  /etc/inputrc.
LINES		Usada para determinar la anchura de la columna usada para
		imprimir listas 
MACHTYPE	Cadena describiendo el tipo de sistema que esta ejecutando Bash
MAILCHECK	Frecuencia de comprobacion (en segundos) del correo
		electronico en el fichero definido en las variables MAILPATH o MAIL
OLDPWD		Directorio previo definido por el comando 'cd'
OSTYPE		Cadena describiendo el sistema operativo que esta ejecutando Bash
PPID		El numero de proceso del proceso padre del interprete de comandos
PS3		El valor de esta variable se usa como 'prompt'
PWD		Directorio actual definido por el comando 'cd'
RANDOM		Cuando se llama esta variable un numero entero entre 0  32767
		es generado
SECONDS		Numero de segundos desde que Bash fue arrancado
SHELLOPTS	Lista con opciones de Bash activadas
UID		El valor numerico real del usuario actual

Combinaciones especiales de teclas

Cuando usamos bash existen una serie de combinaciones de teclas que se pueden utilizar para editar y realizar operaciones usuales.

Existen dos modos de edicion, mode emacs y modo vi. El modo por defecto es emacs, pero para los que estan acostumbrados a utilizar el editor ‘vi’, no es dificil cambiar entre los modos.

Para cambiar de modos podeis ejecutar estos comandos:

$ set -o emacs
$ set -o vi

Nosotros nos vamos a centrar en el modo de edicion emacs, al ser el modo por defecto y el mas usado. A continuacion teneis las combinaciones mas usuales (aunque no son las unicas):

Para moverse por la linea de comandos:

Ctrl + A       Ir al principio de linea
Ctrl + E       Ir al final de linea
ESC + B	       Ir una palabra hacia atras
ESC + F	       Ir una palabra hacia adelante
Ctrl + B       Ir una letra hacia atras
Ctrl + F       Ir una letra hacia adelante

Para moverse por el historial de comandos ejecutados:

Ctrl + N       Proxima linea en el historial
Ctrl + P       Previa linea en el historial
Ctrl + R       Busqueda atras en el historial
Ctrl + S       Busqueda adelante en el historial

Para borrar parte de la linea de comandos:

Ctrl + U       Borra de la posicion actual al principio de la linea      
Ctrl + K       Borra de la posicion actual al final de la linea
Ctrl + W       Borra de la posicion actual al principio de la palabra
ESC + D	       Borra de la posicion actual al final de la palabra
Ctrl + D       Borra el caracter actual hacia adelante
Ctrl + Y       Deshace el ultimo borrado

Transformaciones:

Ctrl + T       Intercambiar dos letras
ESC + C	       Cambiar a mayuscula la primera letra de la primera palabra
	       despues de la posicion actual
ESC + L	       Cambiar a minusculas la primera palabra despues de la posicion
               actual
ESC + T	       Intercambiar dos palabras 
ESC + U	       Cambiar a mayusculas la primera palabra despues de la posicion
               actual

TAB + TAB      Autocompleta palabras (comandos, ficheros, directorios, variables etc) 
	       con posibles valores

En nuestra proxima entrega empezaremos a ver como usar la informacion de este articulo para trabajar con bash y empezar a escribir nuestros primeros scripts.