Sirviendo información sobre Linux desde 1998

Bash (I) - Introducción y ficheros de configuración

En esta serie de articulos sobre el interprete de comandos Bash, intentaremos explicar de una manera sencilla como configurar, utilizar y programar en Bash. Existen otros interpretes de comandos totalmente validos y potentes, pero nosotros nos vamos a centrar en Bash por ser el mas usado.

Todo administrador de sistemas UNIX en general y Linux en particular, deberia de aprender un minimo de programacion en Bash para automatizar y administrar tareas y trabajos en el sistema. Las posibilidades som muchas y una vez que se le coge el gusto a este lenguaje de programacion, no te puedes imaginar un dia como administrador sin hacer uso del mismo.

Programar en Bash es facil (aunque a algunos no se lo parezca al principio) y las posibilidades de uso casi infinitas.

Introduccion

Un interprete de comandos es un programa que funciona como interfaz de usuario con el sistema operativo. Es el encargado de traducir los comandos de los usuarios a instrucciones que el sistema operativo pueda entender y viceversa, traducir el resultado devuelto por el sistema operativo a un lenguaje que los usuarios podamos entender.

Bash ha sido escrito por el Proyecto GNU y pertenece a la categoria de interfaz de usuarios en modo caracter o texto.

Este articulo supone que ya teneis Bash instalado en vuestro sistema (por defecto la mayoria de distribuciones instalan y configuran Bash como interprete de comandos del sistema) Para utilizar Bash teneis que usar el sistema en modo texto o abrir una consola de texto en modo grafico.

Como podemos configurar nuestro interprete de comandos

Por defecto, la distribucion que utilicemos configura Bash para que podamos empezar a utilizarlo inmediatamente. Pero si queremos cambiar o añadir otros parametros de configuracion, es bueno saber donde tenemos que hacerlo.

Existen tres ficheros en el directorio de un usuario que tienen un significado especial para el shell Bash. Estos ficheros permiten al usuario configurar el entorno de su cuenta automaticamente cuando entra en el sistema, cuando arranca un subshell o ejecutar comandos cuando sale del sistema.

Los nombres de estos ficheros son .bash_profile, .bashrc y .bash_logout. Si ninguno de estos ficheros existe en el directorio del usuario, /etc/profile es utilizado por el sistema como fichero de configuracion de bash.

.bash_profile es el el mas importante de los tres. Es leido y los comandos incluidos en el, ejecutados, cada vez que el usuario entra en el sistema. Cualquier cambio hecho en este fichero no tendra efecto hasta que salgamos y entremos en el sistema de nuevo. Una alternativa para no tener que salir del sistema es ejecutar el comando source .bash_source.

Bash permite dos sinonimos para este fichero, .bash_login (derivado del C shell) y .profile (derivado del Bourne y Korn shell). Si .bash_profile no existe, el sistema buscara primero .bash_login y luego .profile. Solamente uno de estos ficheros es leido, en el caso que existan simultaneamente.


   # Ejemplo de .bash_profile

   # Get the aliases and functions
   if [ -f ~/.bashrc ]; then
           . ~/.bashrc
   fi

   # User specific environment and startup programs

   BASH_ENV=$HOME/.bashrc
   USERNAME=""
   PATH=$PATH:/usr/local/pgsql/bin
   MANPATH=$MANPATH:/usr/local/pgsql/man
   PGLIB=/usr/local/pgsql/lib
   PGDATA=/usr/local/pgsql/data

   export USERNAME BASH_ENV PATH MANPATH PGLIB PGDATA

.bashrc es leido cuando el usuario arranca un subshell, escribiendo por ejemplo bash en la linea de comandos. Esto nos permite ejecutar diferentes comandos para la entrada al sistema o para la ejecucion de un subshell. Si el usuario necesita los mismos comandos tanto a la entrada como en subshells, podemos incluir la siguiente linea en .bash_profile:

    source .bashrc
   # Ejemplo de .bashrc

   # User specific aliases and functions

   alias ll="ls -l --color"
   alias lal="ls -la --color"
   alias faq="cd /home/rafael/EL_RINCON/FAQ/"
   alias php="cd /home/rafael/EL_RINCON/PHP/"

   # Source global definitions
   if [ -f /etc/bashrc ]; then
           . /etc/bashrc
   fi

.bash_logout es el fichero leido por Bash, cuando salimos del sistema. Podemos definir, por ejemplo que se borren los ficheros temporales creados en nuestra ultima sesion o registrar el tiempo que hemos estado utilizando el sistema. Si .bash_logout no existe, ningun comando sera ejcutado a nuestra salida.

   # ejemplo de .bash_logout

   clear

En la proxima entrega veremos una serie de parametros que podemos utilizar en nuestros ficheros e configuracion y como podemos utilizar una serie de combinaciones especiales de teclas para realizar tareas que nos haran nuestro dias como administradores mucho mas faciles y llevaderos.

Libros recomendados sobre el tema (solo en ingles):

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

#!/bin/bash .=dot _=dash #

#!/bin/bash
.=dot
_=dash
# generate ascii (from space to ~)
for ((i=32; i<127; i++)); do
ascii="$ascii$(echo -en $(printf "%s%o" "\\" "$i"))"
done
# english chars that can be translated to morse
eng=".,?'!/():;=-\"\$@ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
# The morse code for each character in eng
mor=( # punctuation
·-·-·- --··-- ··--·· ·----· -·-·-- -··-· -·--·- -·--·-
---··· -·-·-· -···- -····- ·-··-·
···-··- ·--·-·
# alphabet A-Z
·- -··· -·-· -·· · ··-· --· ···· ·· ·--- -·- ·-·· -- -·
--- ·--· --·- ·-· ··· - ··- ···- ·-- -··- -·-- --··
# Numbers 0-9
----- ·---- ··--- ···-- ····-
····· -···· --··· ---·· ----· )
mor=( ${mor[@]//·/${dot:-·}} )
mor=( ${mor[@]//-/${dash:--}} )
while read -a line; do
for i in "${line[@]}"; do
for (( j=0; j<${#i}; j++ )); do
if [ "${eng/${i:$j:1}/}" == "$eng" ]; then
pos=${ascii%%${i:$j:1}*}
eval char=\$\'\\$( printf "%o" "$(( ${#pos} ))" )\'
[ "${eng/$char/}" == "$eng" ] && continue
else
char="${i:$j:1}"
fi
pos="${eng%%$char*}"
printf "%s " "${mor[${#pos}]}"
done
printf " "
done
printf "\n"
done
exit 0

señores tengo un problema con este codigo, necesito invertirlo, osea que me pase de clave morce a letras....
mi correo es stb102@gmail.com y jalh111@hotmail.com.... muchas gracias...