Vamos a comenzar, como mencione en el tutorial de acá podemos hacer uso de parámetros/argumentos tomados desde la linea de comandos, por ejemplo:
Este color es mi shell($PS1):
(rivera@super-tux)-( bash mi_script.sh argumento1 argumento2
Como vemos es sencillo y ya mencione como hacerlo
TutorialAhora el hecho es deplazar los argumentos.
En la shell de bash existe un comando llamado shift que lo que hace es desplazar los parámetros de linea de comandos de derecha a izquierda:
parametro2 ocupa el lugar de parametro1 y 3,4,5 tambien se retroceden
Como?
Vamos a poner un ejemplo sencillo en un script:
Han visto los programas tipo consola que usan parametros (-a,-b,-h,-etc) este es un ejemplo de como se hacen esos programas:
#!/bin/bash
parametros="-t -h -p --help"
function ayuda {
echo " -t [Texto] <Muestra texto>"
echo " -h <Muestra Hostname>"
echo " -p [Sitio] <Hace ping>"
echo " --help <Muestra ayuda>"
}
function uso {
echo "Uso $0 $parametros";
}
if [ $# == 0 ]; then
uso; exit 1;
fi
case $1 in
--help)
ayuda;
;;
-t)
shift; echo $1;
;;
-h)
hostname;
;;
-p)
shift; ping $1
;;
exit)
exit 1;
;;
clear)
clear;
;;
*)
uso;
;;
esac
Bien, el case/esac y el if/fi están explicados en el basic scripting, aquí lo que hay que mencionar es:
case $1 in
--help)
ayuda;
;;
-t)
shift; echo $1;
;;.......
Desplaza el parámetro $2 a $1 y el comando que sigue,que en este caso es echo toma el parámetro $1 que es el $2:
Ejecuten este script mal hecho(sin shift)
#!/bin/bash
parametros="-t -h -p --help"
function ayuda {
echo " -t [Texto] <Muestra texto>"
echo " -h <Muestra Hostname>"
echo " -p [Sitio] <Hace ping>"
echo " --help <Muestra ayuda>"
}
function uso {
echo "Uso $0 $parametros";
}
if [ $# == 0 ]; then
uso; exit 1;
fi
case $1 in
--help)
ayuda;
;;
-t)
echo $1;
;;
-h)
hostname;
;;
-p)
shift; ping $1
;;
exit)
exit 1;
;;
clear)
clear;
;;
*)
uso;
;;
esac
El ejemplo es claro:
La orden que esta en case,ejecuta el mismo parámetro que usa case como valor(no lo cambia)
Pensando un poco,podemos darnos cuenta que en este ejemplo podemos tener el mismo resultado así:
#!/bin/bash
parametros="-t -h -p --help"
function ayuda {
echo " -t [Texto] <Muestra texto>"
echo " -h <Muestra Hostname>"
echo " -p [Sitio] <Hace ping>"
echo " --help <Muestra ayuda>"
}
function uso {
echo "Uso $0 $parametros";
}
if [ $# == 0 ]; then
uso; exit 1;
fi
case $1 in
--help)
ayuda;
;;
-t)
echo $2;
;;
-h)
hostname;
;;
-p)
shift; ping $1
;;
exit)
exit 1;
;;
clear)
clear;
;;
*)
uso;
;;
esac
Como vemos en este ejemplo no es muy necesario shift pero implementandolo en otra cosa si, aquí un script que muestra el funcionamiento de shift para entenderlo mejor:
Copia y ejecuta:
#!/bin/bash
function dormir {
echo "Aguarde..."; sleep 5;
}
if [ $# == 0 ]; then
echo -e "No hay parametros :( \nUso: $0 parametro1 parametro 2 etc"
exit 1;
fi
clear
echo -e "Misparametros: $# \nParametro 1: $1\nParametro 2: $2\nParametro 3: $3"
echo "Haciendo shift"; shift;dormir;
echo -e "Misparametros: $# \nParametro 1: $1\nParametro 2: $2\nParametro 3: $3"
No vean el script,vean lo que hace el script
Eso es todo :D
A no, me falta hablar sobre las rutinas:
En una no podemos usar estos parametros ya que toma propios
¿?
Que?
A lo que me refiero es que a una rutina, no podemos pasarle parametros desde linea de comandos,debemos pasarle desde el script
Por ejemplo
#!/bin/bash
#Definimos una rutina:
mi_rutina () {
echo $1
echo $2
}
# La llamamos
mi_rutina
Y ejecutamos así
bash mi_script.sh parametro1 parametro2
Como ven ejecuta echo,pero no imprime nada:
Si queremos pasarle un parámetro es desde el mismo script con esta sintaxis:
#!/bin/bash
#Definimos una rutina:
mi_rutina () {
echo $1
echo $2
}
# La llamamos
mi_rutina parametro1 parametro2
Pero si queremos usar argumentos globales podemos hacer
#!/bin/bash
#Definimos una rutina:
mi_rutina () {
echo $1
echo $2
}
# La llamamos
parametro1=$1
parametro2=$2
mi_rutina $parametro1 $parametro2
Eso es todo
No hay comentarios.:
Publicar un comentario
Los comentarios serán revisados antes de ser publicados.