Programación en Bash Linux II: Variables y Argumentos

El uso de variables en la programación bash es muy sencillo, por ejemplo, para asignarle un valor a una variable se hacer como ya podrás imaginar VARIABLE=valor, sin embargo, para hace uso de ella tendremos que añadirle el $ al inicio, de modo que si quisiéramos imprimir su valor lo harías así: echo $VARIABLE.

Un ejemplo sería:

NOMBRE="Jorge Luis"
echo "Bienvenido $NOMBRE"

Que su salida sería:

Bienvenido Jorge Luis

También debemos conocer que existen variables de entorno las cuales podemos usar en nuestros scripts. Hay que tener mucho cuidado con estas variables, ya que un cambio podría implicar un mal funcionamiento no solo del programa si no de la terminal en si.

  • $HOME : Contiene la ruta del directorio home del usuario.
  • $PATH : Contiene los directorios donde se encuentran los ejecutables
  • $TERM : nombre del a terminal (Config Terminal)
  • $BASH : Ruta del interprete bash
  • $PWD : Directorio Actual

Y existen muchas mas que fácilmente podrás encontrar en google.

Los argumentos realmente se manejan como variables por que lo son de cierta forma, así que por ejemplo, si quisiéramos saber cual es el primer argumento que nos mandan tendríamos que usar $1, $2 para el segundo y así sucesivamente.

Por ello pongo la siguiente lista para saber como actúan:

  • $* : Todos los argumentos
  • $# : Numero de argumentos recibidos
  • $$ : Identificador del proceso
  • $?  : Resultado de la ejecución del comando anterior
  • $@ : Crea y devuelve un Array con todos los argumentos con posición
  • $0 : Nombre del script
  • $1 : Primero argumento
  • $2 : Segundo Argumento
  • $n : n-ésimo argumento

Así que a programar para ver si realmente es verdad lo que he dicho:

#!/bin/bash
echo "Variables y Argumentos"
echo "\$HOME: $HOME"
echo "\$PATH: $PATH"
echo "\$TERM: $TERM"
echo "\$$: Identificador del proceso: $$"
echo "\$?: Resultado de la ejecución del comando anterior: $?"
echo "\$@: Crea y devuelve un Array con todos los argumentos con posición: $@"
echo "\$*: Todos los argumentos: $*"
echo "\$#: Cantidad de Argumentos: $#"
echo "\$0: Nombre del archivo: $0"
echo "\$1: Primer Argumento: $1"
echo "\$2: Segundo Argumento: $2"

Ejecutamos el script:

$chmod +x script02
$./script02 uno dos tres
Variables y Argumentos
$HOME: /home/lesthack
$PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
$TERM: xterm
$$: Identificador del proceso: 8671
$?: Resultado de la ejecución del comando anterior: 0
$@: Crea y devuelve un Array con todos los argumentos con posición: uno dos tres
$*: Todos los argumentos: uno dos tres
$#: Cantidad de Argumentos: 3
$0: Nombre del archivo: ./script02
$1: Primer Argumento: uno
$2: Segundo Argumento: dos

Así que como lo hemos visto, ya podemos tratar los argumentos para alguna posible acción.

6 Comments

  1. Posted May 30, 2009 at 11:29 pm | Permalink

    :-) orale te rifaste la buena explicación de la variable estática, después pondrás sobre la introducidas por el usuario (teclado), la esperare :D saludos

  2. Posted May 30, 2009 at 11:32 pm | Permalink

    gracias @Bucio, claro que si, esto es mi examen :D

  3. Posted May 31, 2009 at 5:00 am | Permalink

    Oye chavo, te sobra el $ a la hora de declararlo (NOMBRE=”Jose Luis”) :P

    Y ya que estamos por aquí, también me gustaría comentar sobre el comando export. Si precedes una declaración de variable por “export” (export NOMBRE=”Jose Luis”), esa variable que acabas de declarar, la guarda en el environment, tanto del proceso del shell como de todos los procesos que éste invoque (sus hijos).

    saludos!

  4. Posted May 31, 2009 at 10:18 am | Permalink

    oh cierto @lhchavez, acomodado :P perdón, un dedaso :D

  5. Posted November 3, 2011 at 10:24 pm | Permalink

    Hola muy buenas , excelente no sabia para que eran varias de esas cosas que siempre meto en mis scripts xD . bueno ahora cambiando al punto que me hizo llegar hasta aqui .

    Alguien puede decir como puedo hacer por ejemplo , cuando ejecuto

    echo $HOME
    /home/nombre_de_usuario

    si con algun comando como “sed” , “cut” u otro , eliminar la parte que dice “/home/” y quedarme unicamente con el nombre de usuario ??? lo necesito para un script en bash 3.2 ( Mac OS X ) y asignarselo a una variable

  6. Posted November 3, 2011 at 10:29 pm | Permalink

    hola que tal @inukaze

    por que no pruebas con subcadenas:

    echo ${HOME:6}

    Saludos !!

Post a Comment

Your email is never shared. Required fields are marked *

*
*