En nuestra tercera entrega sobre el interprete de comandos Bash vamos a empezar a ver como podemos usar de forma practica la informacion que hemos visto en los articulos anteriores. Para empezar y antes de entrar en materia, nada mejor que un ejemplo del clasico "Hola Mundo" en Bash.
#!/bin/bash # # Esto es un ejemplo en Bash del clasico "Hola Mundo" # echo "Hola Mundo"
Como podeis ver, nada dificil para empezar. Empecemos a explicar un poco que significa cada linea:
#!/bin/bash: Esta linea indica donde se encuentra el interprete de comandos en nuestro sistema. Por defecto todos los sistemas que tengan Bash instalado, lo tendran en el directorio /bin. Al utilizar esta linea, podremos ejecutar el script como un programa normal, ya que el sistema sabra que es un script en Bash y que tiene que hacer con el.
Si el script de ejemplo lo hubiesemos grabado como ejemplo.sh, lo podriamos ejecutar de la siguiente manera:
[ralfm@desktop]# chmod ugo+x ejemplo.sh [ralfm@desktop]# ./ejemplo.sh Hola Mundo
# Esto es un ejemplo en Bash del clasico "Hola Mundo": Esto es un comentario. Todas las lineas que empiecen con el simbolo '#' seran tratadas como comentarios y no se ejecutaran.
echo "Hola Mundo": Esto es el comando que imprime la cadena de texto en pantalla.
En todo script tendreis que trabajar con variables, mas tarde o mas temprano. Vamos a ver como se definen y usan. Una buena costumbre cuando definamos variables en Bash es utilizar letras mayusculas, esto no es necesario, pero nos ayudara a tener un script mas facil de entender.
#!/bin/bash # # Esto es un ejemplo en Bash del clasico "Hola Mundo" # MENSAJE="Hola Mundo" echo $MENSAJE
Hemos definido una variable llamada MENSAJE con el valor "Hola Mundo", y la hemos usado con el comando echo para escribir el valor de la misma. Las variables en Bash se definen como NOMBRE=valor (sin espacios antes o despues del simbolo '=') y su valor se usa, poniendo el simbolo '$' delante del nombre de la variable, $NOMBRE.
Si al utilizar el valor de una variable, el nombre de variable esta seguido de un caracter que sea otra letra, numero o el simbolo '_', tendremos que utilizar los simbolos '{}' alrededor del nombre de la variable.
#!/bin/bash
FICHERO="registro"
echo ${FICHERO}_2006.txt
#!/bin/bash echo "El usuario '$USERNAME' ha ejecutado el script $0, en el ordenador '$HOSTNAME'. "
Tambien se pueden usar en nuestro scripts, variables que no hemos definido nosotros. Estas variables son las llamadas 'variables de entorno' del sistema. Teneis una lista con las mas importantes por defecto, en el segundo articulo de esta serie, Bash (II) - Comandos, variables de entorno y combinaciones de teclas. En nuestro ejemplo hemos utilizado $USERNAME y $HOSTNAME para obtener el nombre de usuario y del ordenador. La variable $0 contiene el nombre del script, mas adelante explicaremos esto.
#!/bin/bash ATRIBUTOS_SCRIPT=`/bin/ls -l $0` echo "El usuario '$USERNAME' ha ejecutado el script $0, en el ordenador '$HOSTNAME'. " echo "Los atributos del script son: " echo $ATRIBUTOS_SCRIPT
Tambien podemos asignar la salida que producen los comandos del sistema a una variable. En nuestro ejemplo hemos asignado la salida del comando 'ls -l a una variable llamada ATRIBUTOS_SCRIPT. Esto nos sera muy util en nuestros scripts para obtener informacion del sistema que podremos utilizar en nuestros scripts.
Existen una serie de caracteres que tienen un significado especial en Bash, por ejemplo $ y ". Si queremos usar literalmente estos caracteres en el valor de una variable tendremos que usar el simbolo '\' delante de ellos.
#!/bin/bash MENSAJE="\"Hola Mundo ...\"" echo "El valor de la variable \$MENSAJE es $MENSAJE"
Si queremos definir variables numericas para su utilizacion en scripts Bash podemos utilizar el comando let. Nada mejor que un ejemplo para ver como se trabaja con variables numericas.
#!/bin/bash let A=100 let B=200 let C=$A+$B echo "A: $A | B: $B | C: $C"
En Bash se pueden definir funciones. Una funcion en Bash (denominada subrutina o procedimiento en otros lenguajes de programacion) se podria definir como un script dentro de un script. Sirve para organizar un script en unidades logicas de manera que sea mas facil mantenerlo y programarlo. En Bash las funciones se pueden definir de la siguiente manera:
function nombre_de_funcion(){
comandos_del_shell
}
Un ejemplo de funcion en un script:
#!/bin/bash
let A=100
let B=200
#
# Funcion suma()
# Suma los variables A y B
#
function suma(){
let C=$A+$B
echo "Suma: $C"
}
#
# Funcion resta()
# Resta los variables A y B
#
function resta(){
let C=$A-$B
echo "Resta: $C"
}
suma
resta
En fin, esto es todo por hoy. En la proxima entrega hablaremos de las estructuras condicionales: if/else, for, case, select y while/until.
Articulos anteriores relacionados:
Comentarios
Hola, Gracias por esta
Sáb, 30/05/2009 - 05:10 — AnónimoHola, Gracias por esta información.
Thnks
Sáb, 30/05/2009 - 06:08 — AnimAlfNo te lo pierdas el siguiente que publicó, es muy cañero: Bash (IV) - Estructuras de control y bucles
SaludOS
que significa el signo $
Vie, 05/06/2009 - 23:13 — Anónimoque significa el signo $ cuando lo utilizamos en codigo.
un ejemplo:
for ((i=32; i<127; i++)); do
ascii="$ascii$(echo -en $(printf "%s%o" "\\" "$i"))"
done
muchas gracias dpor su colaboracion
Antes del parentesis, es para
Sáb, 06/06/2009 - 22:34 — AnimAlfAntes del parentesis, es para ejecutar algo de shell, es lo equivalente a ponerlo entre estas comillas `lo que se quiera ejecutar`, por ejemplo:
$(ls -l)
o
`ls -l`
si antecede a una palabra, es una variable, cuando se declara la variable no se pone el simbolo, pero cuando se hace referencia a ella sí:
variable=3
echo $variable
Creo que queda claro, luego están las referencias a los argumentos de la llamada al script y el pid (identificador de proceso)
por ejemplo el archivo con el siguiente archivo prueba.sh
#!/bin/bash ESTO="Más cosas\n" echo el pid de $0 es: $$ echo el nombre del script es: $0 echo el primer parámetro: $1 echo el segundo parámetro: $2 printf "${ESTO}Veamos la versión del kernel: $(uname -r)\n"lo guardas en un archivo, y le das permiso de ejecución chmod a+x prueba.sh y lo lanzas del siguiente modo, por ejemplo
./prueba.sh uno otro
SaludOS
como un comentario jeje literalmente
Vie, 21/08/2009 - 19:59 — Anónimoestaria bien que actualizaras los enlazes con las siguientes partes, me refiero que estoy leyendo la guia y no me interesa ver las entregas pasadas sino continuar con la siguiente entrega, gracias
Funcion Tecla
Mar, 08/09/2009 - 11:43 — AnónimoBuenas tengo un problema que no me funciona esta tecla y no se por que.
menu_prog ()
{
clear
echo -e $BLUE"4) Instalación de Programas:"$ENDCOLOR
echo ""
echo -e "NOTA: Se instalarán los programas que escojamos, simplemente escribimos \"s\" o \"n\" según queramos o no. Para más información acerca del programa, seleccionalo.\n"
echo -e $GREEN" 1) xxxx"
echo " a) COMPILADORES"
echo ""
echo " 0) Instalar TODOS los programas"
echo -e " S) Volver al Menú\n"$ENDCOLOR
echo -n "Escoge una opción: "
La tecla S de volver al menu no me funciona alguien sabe por que?
variable real
Lun, 02/11/2009 - 17:44 — Anónimocomo declaro una variable real ¿??
declare XXX NUMERO
NUMERO=23/4
echo " resultado decimal es " $NUMERO
Utilizando el programa bc
Lun, 02/11/2009 - 18:48 — webmasterLos reales son un poco engorrosos en BASH. Pero puedes utilizar el programa bc para trabajar con ellos, te dejo un ejemplo.
--
Rafael Martinez
Webmaster
Pequeño problema.
Sáb, 21/11/2009 - 14:22 — Anónimo#!/bin/bash
echo "Inserta un número: "
read Num1
echo "Inserta otro número: "
read Num2
echo "Selecciona la operación que quieres realizar: "
echo "1.- Suma"
echo "2.- Resta"
echo "3.- Producto"
echo "4.- División"
read opcion
case $opcion in
1)
$Res=`echo "$Num1 + $Num2"`;;
*)
echo "Prueba después.";;
esac
Me sale lo siguiente:
Inserta un número:
1
Inserta otro número:
1
Selecciona la operación que quieres realizar:
1.- Suma
2.- Resta
3.- Producto
4.- División
1
segundo.sh: 17: =1: not found
Los números si me los pide, pero a la hora de hacer la operación algo falla, y no sé lo que es :s
Muchas graciasi :)
Re: Pequeño problema.
Sáb, 21/11/2009 - 18:26 — webmaster$Res=`echo "$Num1 + $Num2"`;;
El problema esta en esta linea. La puedes cambiar por esto:
O por esto:
Me da "1+1", me devuelve la
Sáb, 21/11/2009 - 20:44 — AnónimoMe da "1+1", me devuelve la operación, no el resultado :s
Re: Me da "1+1", me devuelve la
Dom, 22/11/2009 - 11:51 — webmasterTe falta definir que Num1 y Num2 van a tener valores numéricos y no alfanuméricos.
En este mismo artículo tienes una sección sobre esto "Variables numéricas"
--
Rafael Martinez
Linux-es.org
let not found
Dom, 22/11/2009 - 19:43 — AnónimoNo encuentra la orden ._.
nombres de archivos con espacio
Sáb, 12/12/2009 - 20:29 — Anónimobueno, tengo problemas con los nombres de archivos con espacio, he simplificado mi script a:
FICHEROS_ORIGEN="/mnt/data/prueba\ base"
ls ${FICHEROS_ORIGEN}
en la línea de comando teclee:
$ ./prueba.sh
ls: no se puede acceder a /mnt/data/prueba\: No existe el fichero o el directorio
ls: no se puede acceder a base: No existe el fichero o el directorio
se me escapa la tortuga en algún lado, agradeceria su ayuda.
fernando
Problema en proceso
Mié, 16/12/2009 - 17:30 — AnónimoTengo el siguiente script
#!/bin/bash
rdesktop 10.1.2.8;
sleep 2;
/usr/games/glchess
Quiero que dos programas se ejecuten uno despues del otro con cierto retardo, el problema es que hasta que no cierre secion no ejecuta el otro programa.
Gracias d ante mano por la ayuda...
$$variable
Dom, 10/01/2010 - 14:31 — AnónimoY si quiero optener el valor del argumento dado por una variable, ¿cónmo sería?
$arg=3
${$arg} he probado con esto y no me sale.
Gracias de antemano
Re: $$variable
Dom, 10/01/2010 - 14:41 — Anónimo$arg=3
${$arg} he probado con esto y no me sale.
Prueba con:
arg=3 echo ${arg}Enviar nuevo comentario