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
gracias @Bucio, claro que si, esto es mi examen
Oye chavo, te sobra el $ a la hora de declararlo (NOMBRE=”Jose Luis”)
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!
oh cierto @lhchavez, acomodado
perdón, un dedaso
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
hola que tal @inukaze
por que no pruebas con subcadenas:
echo ${HOME:6}
Saludos !!