miércoles, 3 de marzo de 2010

Ejemplos de Codigo Bash

Shell es un programa que interpreta comandos. Los comandos son ingresados directamente por el usuario o leídos desde un archivo llamado shell script.

Shell es llamado como shell interactivo cuando lee la entrada desde el usuario directamente.

Shell es llamado shell no-interactivo cuando lee los comandos desde un archivo y los ejecuta. En este caso shell lee cada linea del código en el archivo desde el principio hasta el final y ejecuta cada comando como si lo hubiera tipeado el usuario directamente.

Imprime el valor de la variable shell $-, para saber si el shell es interactivo o no.

# echo $-
himBH

Nota: La variable $- contiene una "i" lo cual indica que es interactivo.

Unix tiene una variedad de Shell. Bourne shell (sh), Bourne again shell (bash), C shell (csh), Korn shell (ksh), Tenex C shell (tcsh). Usa el comando where o whereis para encontrar donde esta localizado el shell especifico tal como se muestra a continuación:

# which bash
/bin/bash

# whereis bash
bash: /bin/bash /usr/share/man/man1/bash.1.gz

Puedes intercambiar entre los shells escribiendo el nombre del shell. Por ejemplo escribe csh para cambiar al C shell.

Escribir y Ejecutar Codigo Shell

Ejemplo 1. Código Bash de Hola Mundo

1) Crear un script escribiendo las siguientes lineas en un archivo usando tu editor favorito:

$ cat holamundo.sh
#!/bin/bash
echo Hola Mundo

2) Puedes escoger cualquier nombre para el archivo. El nombre del archivo no debe ser igual a cualquier comando de Unix o Linux.

3) El script siempre empieza con dos caracteres '#!' el cual es llamado she-bang. Esto indica que es un archivo de código y debe ser ejecutado usando un interprete (/bin/bash) especificado por el resto de la primera linea en el archivo.

4) Ejecutar el script tal como se muestra abajo:

$ bash holamundo.sh
Hola Mundo


5) Cuando ejecutas el comando "bash holamundo.sh", este inicia el shell no-interactivo y pasa el nombre del archivo como argumento a este.

6) La primera linea indica al sistema operativo cual es el shell que se usara para ejecutar el código.

7) En el ejemplo anterior el interprete bash es el que interpreta el código y ejecuta los comandos uno por uno desde el principio hasta el final.

8) Puedes ejecutar el código sin necesidad de usar el bash:

  • Cambia los permisos del archivo para permitir que el usuario lo ejecute usando el comando chmod u+x holamundo.sh.
  • El directorio que contiene el archivo debe estar incluido en la variable de entorno PATH. Si no esta incluida, puedes ejecutar el script especificando toda la ruta del mismo.

9) echo es un comando que muestra el argumento que se le da. Tambien se usa para imprimir el valor de una variable.

Ejemplo 2. Imprimir un Mensaje de Bienvenida al Logearse

Escribe el siguiente contenido en tu archivo ~/bash_profile. Si no existe crea un archivo con el siguiente contenido:

$ cat ~/.bash_profile
hname=`hostname`
echo "Bienvenido a $hname."

Cuando te logeas a un shell interactivo veras el mensaje de bienvenida tal como se muestra:

root@dev-db's password:
Bienvenido a dev-db


Ejemplo 3. Imprimir Información Relacionada al Sistema

Cuando te logeas a un shell interactivo podría mostrarte el nombre del kernel instalado en el servidor, la versión del bash y hora en el servidor.

$cat ~/.bash_profile
hname=`hostname`
echo "Bienvenido a $hname."

echo -e "Detalles del Kernel: " `uname -smr`
echo -e "`bash --version`"
echo -ne "Hora Servidor: "; date

Cuando lanzas un shell interactivo se imprime el siguiente mensaje:

root@dev-db's password:
Bienvenido a dev-db

Detalles del Kernel: Linux 2.6.18-128 x86_64
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
Hora Servidor : Tue Feb 22 11:24:01 CET 2010


Ejemplo 4. Imprimir los Detalles del Ultimo Logeo

Si varios usuarios usan la misma maquina con el mismo login entonces detalles como la maquina desde donde se esta logeando y la hora del logoe, serian detalles muy útiles. Este ejemplo imprime detalles del ultimo logeo durante el inicio de un shell interactivo.

$ cat ~/.bash_profile
hname=`hostname`
echo "Bienvenido a $hname."

echo -e "Detalles del Kernel: " `uname -smr`
echo -e "`bash --version`"
echo -ne "Hora Servidor : "; date


lastlog | grep "root" | awk {'print "Ultimo logeo desde: "$3

print "Fecha y Hora del Ultimo Logeo: ",$4,$5,$6,$7,$8,$9;}'

Durante el inicio veras el siguiente mensaje:

root@dev-db's password:
Bienvenido a dev-db

Detalles del Kernel: Linux 2.6.18-128 x86_64
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
Hora Servidor : Tue Feb 22 11:24:01 CET 2010


Ultimo logeo desde : user-laptop

Fecha y Hora del Ultimo Logeo: Tue Feb 22 11:24:01 +0100 2010


Ejemplo 5. Exportar Variables y Configurar Alias durante el Inicio

Los comandos mas comunes que veras en tus archivos .bashrc y .bash_profile son los comandos export y alias.

Un alias es simplemente una pieza de texto que sustituye a otra. Cuando ejecutas un alias, este simplemente reemplaza lo que escribiste con el alias. Por ejemplo, si deseas configurar un alias para el comando ls para listar archivos/directorios con los colores, haz lo siguiente:

alias ls 'ls --color=tty'

Si añades este comando a un archivo de inicio puedes ejecutar el comando ls el cual sera reemplazado automáticamente por el comando ls –color=tty.

El comando export es usado para configurar una variable de entorno. Varias variables de entorno son usadas por el sistema u otras aplicaciones. Estas simplemente son una forma de configurar parámetros que cualquier aplicación/script puedan leer. Si configuras una variable sin el comando export, la variable solo existirá para ese proceso en particular.

En el siguiente ejemplo se muestra como exportar la variable de ambiente HISTSIZE. La linea que empieza con # es un comentario.

$ cat /etc/profile
alias ls 'ls --color=tty'

# Configurar alguna variable de entorno
export HISTSIZE=1000

PATH=$PATH:$HOME/bin:/usr/bin:/bin/usr:/sbin/etc

export PATH

export SVN_SH=${SVN_RSH-ssh}

No hay comentarios: