basic scripting
medium scripting
avanced scripting
core scripting
Bueno quien sabe si va así o le invente de mas :P
Pero así lo veremos aquí en tiempo de tux :D
Así que podemos tachar
La verdad yo a penas voy en avanced scripting y si me equivoco en algo o hago mala practica comenten,ya que es bueno aprender de los demás.
Bueno este tutorial y los que siguen (9 mas) van a ser basados en los de antes,osea que ya deben saber basic scripting.
Como dije yo no se bien,bien he leído libros de red hat y tutoriales (en ingles) sobre scripting,y como dije no vendría mal una ayuda (comentarios, correcciones,etc),bueno.
Primer ejemplo:
Crear un archivo con un bucle que se copie a otro,pero con verificadores por si existe alguno de los dos y romper el bucle cuando existan los dos :D
Primero creamos una función,que usaremos para que no sea tan rápido el proceso:
function dormir {
echo "Aguarde un segundo..."; "sleep 1;
}
Aquí lo que cabe ver es que usamos (;) para no usar mas lineas,ya que es lo que indican los (;)
Asignamos el nombre de los dos ficheros.
: ${fichero_uno="hello.txt"}
: ${fichero_dos="HolaMundo.txt"}
Creamos el bucle(while) y verificamos si no existe el primero,ya que sin el primero no podemos crear el segundo:
while [[ ! -e '${fichero_uno}' ]]
do
# Comandos aquí
done
Verificamos con ! -e (visto en basic scripting)
Y llenamos el bucle:
echo "No existe:"; echo "${fichero_uno}"
dormir
Mostramos que no existe,para demostrar mas los ; los use ya que se podía hacer así también el comando echo:
echo -e "No existe:\n""${fichero_uno}"
Luego llamamos la función dormir que creamos para esperar un poco a que inicie lo interesante:
Creamos una estructura if que vea si existe el archivo 2 y si existe copia el archivo 2 a 1 y rompe el bucle,si no existe lo crea y se repite el bucle,cuando regrese ya existirá y hará lo de if:
if [ -e "${fichero_dos}" ]; then
echo "${fichero_dos} existe"
dormir
cp ${fichero_dos} $fichero_uno}
break
else
echo "$fichero_dos} no existe"; dormir
touch ${fichero_dos}
fi;
Cuando rompa el bucle mostraremos:
echo "Test completo."; echo "$fichero_uno} y ${fichero_dos} existen"
Y así queda el script completo:
#!/bin/bash
function dormir {
echo "Aguarde un segundo..."; sleep 1;
}
: ${fichero_uno="hello.txt"}
: ${fichero_dos="HolaMundo.txt"}
while [[ ! -e "${fichero_uno}" ]]
do
if [ -e "${fichero_dos}" ]; then
echo "${fichero_dos} existe"
dormir
cp ${fichero_dos} ${fichero_uno}
break
else
echo "${fichero_dos} no existe"; dormir
touch ${fichero_dos}
fi;
done
echo "Test completo."; echo -e "${fichero_uno} y ${fichero_dos} existen\n""Haciendo ls a tus txt en $PWD"
dormir
ls *txt
Ejecuten y vean lo grandioso del script :P
Crea el archivo hello.txt y desde ese crea el holamundo.txt,pero verifica primero si no existe hello.txt :D
Ejemplo 2:
Un momento no es tan grandioso :(
Porque si ya existe hello.txt no crea holamundo.txt.
Como se soluciona esto?
Si solo lo ejecutan y hasta ahi no pasa nada,de hecho esperaría a que comentaran el error,pero el hecho no es que usen los ejemplos que aprendan,es que usen lo que aprendan con los ejemplos y si basan este algoritmo en otra cosa es cuando va a dar error :(
Lo solucionamos solamente haciendo una comparacion dual,en el bucle while usando una coma (,):
#!/bin/bash
function dormir {
echo "Aguarde un segundo..."; sleep 1;
}
: ${fichero_uno="hello.txt"}
: ${fichero_dos="HolaMundo.txt"}
while [[ ! -e "${fichero_uno}","${fichero_dos}" ]]
do
if [ -e "${fichero_dos}" ]; then
echo "${fichero_dos} existe"
dormir
cp ${fichero_dos} ${fichero_uno}
break
else
echo "${fichero_dos} no existe"; dormir
touch ${fichero_dos}
fi;
done
echo "Test completo."; echo -e "${fichero_uno} y ${fichero_dos} existen\n""Haciendo ls a tus txt en $PWD"
dormir
ls *txt
Y listo :D
Ejemplo 3:
Definir nuestros propios archivos:
#!/bin/bash
function dormir {
echo "Aguarde un segundo..."; sleep 1;
}
echo -n "Nombre fichero uno: "
read fichero_uno
echo -n "Nombre fichero dos: "
read fichero_dos
echo "Se creara el fichero dos del uno:"; dormir
while [[ ! -e "${fichero_uno}","${fichero_dos}" ]]
do
if [ -e "${fichero_dos}" ]; then
echo "${fichero_dos} existe"
dormir
cp ${fichero_dos} ${fichero_uno}
break
else
echo "${fichero_dos} no existe"; dormir
touch ${fichero_dos}
fi;
done
echo "Test completo."; echo -e "${fichero_uno} y ${fichero_dos} existen\n""Haciendo ls en $PWD"
dormir
ls *txt
Esto de que sirve?
Como el ejemplo es claro y sin objetivo, para nada,pero si usan este algoritmo sirve para muchas cosas,implementando mas comandos,funciones y bucles,por ejemplo para clonar un archivo/carpeta a otro y verificar que existan ambos,por si ya existen y no cometer un error.
Ejemplo 4:
No molestes :D
Como estos ejemplos son sucios podemos automatizar el borrado de toda la basura que estamos dejando con los archivos que estamos creando.
Primero creamos una carpeta,pero no lo haremos simple,usaremos el algoritmo de arriba(verificar y no dañar):
function carpeta {
echo -n "Crearemos una carpeta escriba el nombre que dese : "
read carpeta
mi_carpeta=`echo $carpeta`
}
carpeta
while [ 0 ]; do
if [ ! -d "${mi_carpeta}" ]; then
mkdir "${mi_carpeta}" && cd "${mi_carpeta}"
echo "Directorio actual $PWD"
break
else
echo "Ya existe la carpeta y puede contener algo importante,elije otro nombre"
carpeta
fi
done
Ahora agregamos el script anterior
#!/bin/bash
function dormir {
echo "Aguarde un segundo..."; sleep 1;
}
function carpeta {
echo -n "Crearemos una carpeta escriba el nombre que dese : "
read carpeta
mi_carpeta=`echo $carpeta`
}
carpeta
while [ 0 ]; do
if [ ! -d "${mi_carpeta}" ]; then
mkdir "${mi_carpeta}" && cd "${mi_carpeta}"
echo "Directorio actual $PWD"
break
else
echo "Ya existe la carpeta y puede contener algo importante,elije otro nombre"
carpeta
fi
done
echo -n "Nombre fichero uno: "
read fichero_uno
echo -n "Nombre fichero dos: "
read fichero_dos
echo "Se creara el fichero dos del uno:"; dormir
while [[ ! -e "${fichero_uno}","${fichero_dos}" ]]
do
if [ -e "${fichero_dos}" ]; then
echo "${fichero_dos} existe"
dormir
cp ${fichero_dos} ${fichero_uno}
break
else
echo "${fichero_dos} no existe"; dormir
touch ${fichero_dos}
fi;
done
echo "Test completo."; echo -e "${fichero_uno} y ${fichero_dos} existen\n""Haciendo ls en $PWD"
dormir
ls
#!/bin/bash
function dormir {
echo "Aguarde un segundo..."; sleep 1;
}
function carpeta {
echo -n "Crearemos una carpeta escriba el nombre que dese : "
read carpeta
mi_carpeta=`echo $carpeta`
}
carpeta
while [ 0 ]; do
if [ ! -d "${mi_carpeta}" ]; then
mkdir "${mi_carpeta}" && cd "${mi_carpeta}"
echo "Directorio actual $PWD"
break
else
echo "Ya existe la carpeta y puede contener algo importante,elije otro nombre"
carpeta
fi
done
echo -n "Nombre fichero uno: "
read fichero_uno
echo -n "Nombre fichero dos: "
read fichero_dos
echo "Se creara el fichero dos del uno:"; dormir
while [[ ! -e "${fichero_uno}","${fichero_dos}" ]]
do
if [ -e "${fichero_dos}" ]; then
echo "${fichero_dos} existe"
dormir
cp ${fichero_dos} ${fichero_uno}
break
else
echo "${fichero_dos} no existe"; dormir
touch ${fichero_dos}
fi;
done
echo "Test completo."; echo -e "${fichero_uno} y ${fichero_dos} existen\n""Haciendo ls en $PWD"
dormir
ls
Y por ultimo agregamos un comprobado y un eliminador:
function adios {
echo -e "Directorio acual $PWD\n""Listando..."; ls $PWD
echo -n "Borrar todo lo que se creo? n/s : "
read respuesta
case ${respuesta} in
s|S)
echo "Borrando archivos..."; dormir
rm "${fichero_dos}" && rm "${fichero_uno}"
echo "Borrando carpeta..."; dormir
cd ..; rmdir ${mi_carpeta}
exit 1;
;;
n|N)
echo "Buena eleccion ;P "; dormir; exit 1;
;;
*)
echo "Ok"; exit 1;
;;
esac
}
Y lo agregamos,pero primero incluimos también clear para un trabajo limpio
Y si queremos podemos añadir este, digamos "snipett" también:
function autodestruccion {
echo -n "Borrar este script tambien: "
read opcion
case ${opcion} in
s|S)
echo "Adios :("; rm $0
;;
n|N)
echo "Buena elección :)"; exit 1;
;;
*)
echo "Ok"; exit 1;
;;
esac
}
Y así queda el script
Enlace
Así es el medium scripting,bueno como dije no se si exista el medium scripting pero tenemos que ir poco a poco,porque esto que hicimos en el avanced scripting no es nada y menos en el core,ya que usamos:
sed,awk,perl,flujos estándares,cut, parámetros de desplazamiento,etc
Pero vamos bien :D
Eso es todo
Se ve bien para empezar,pero los regex
ResponderBorrar59206C6F732068657861646563696D616C6573 una pregunta ¿(^-^)? cuanto te tomo hacer este tutorial ya no explicaste bien lo ultimo
Deberías hablar de desplazamiento de parámetros y de expresiones regulares
No soy fan de las regex de shell,si necesito un filtrado especial uso perl,y son de avanced scripting.
BorrarY si,no explique bien lo ultimo,porque ya esta explicado en basic scripting,lo único fue, que lo combine para realizar acciones mas avanzadas,no me tarde tanto pero ya me estaba aburriendo y en parte por eso ya no explique bien :P
De desplazamiento de parámetros si voy a escribir :D
De una vez lo hice :D
Borrarhttp://www.itimetux.com/2012/12/desplazamiento-de-parametros-en-bash.html