La shell es el interprete de comandos, la consola o terminal de toda la vida, la capa más básica para comunicar al usuario con el kernel del sistema. Con ella podemos hacer potentes scripts para automatizar tareas que de por si son aburridas, triviales y costosas en tiempo humano. Sacrificando algo de tiempo en automatizarlas te ahorrará gritones de horas a tu yo del futuro, aunque para ello tendrás que sacrificar algo de tiempo de tu yo presente.
Rendimiento respecto tiempo invertido
Para este tutorial me voy a basar en esta guia, comenzaré con unos conceptos básicos:
- Como usar variables
- Como imprimir información por pantalla
- Uso básico de if, while y for
Para los ansiosos, teneis todo el código de este tutorial aqui. En próximos tutoriales ampliaré información y al final resolveré el problema de tener varios ficheros con texto no deseado para editarlos automáticamente.
Para los más pacientes, parto de la base de que no sois expertos en el tema aunque si sabeis algo de programar en general, dejaré todo extensamente comentado y bien tabulado para que no te pierdas en el proceso (vamos, como hago siempre).
Script bash coloreado en Atom
Puedes usar tu editor de texto favorito para hacer los scripts, yo usaré atom porque es multiplataforma, opensource, y colorea la sintaxis.
Crea el fichero "myfirstscript.sh" en la ruta que quieras. No olvides que a cada fichero que crees hay que darle permisos de ejecución, escritura y lectura, bien para cada usuario:
chmod +rwx myfirstscript.shO bien solo para el creador:
chmod u+rwx myfirstscript.shY para ejecutarlo el clásico
./myfirstscript.shConceptos básicos e importantes:
1.- Variables:
- Tipo int, se asigna valor con nombre=value, siendo value un número.
- Tipo string, se asigna el valor con nombre="value", siendo value caracteres
- Tipo undefined, si no existe una variable, es NULL, y no se imprime
- Se usa el comando echo "mensaje"
- El contenido de una variable se imprime ${nombre}
- Si la variable (undefined) no existe no aparecerá nada.
- Se usa la sintaxis if[condición]
- then para el codigo que se debe ejecutar si es cierto
- elif para más condiciones
- else para los casos restantes
if [ -z "${var}" ] # Check if exist, z option true if size is zero4.- Bucle while, manual, comparations.
then
echo "var no existe"
else
echo "var si existe"
fi
- Se usa la sintaxis while [ CONDICIÓN ]
- do para el código que se debe ejecutar mientras sea cierta
- El script saldrá del bucle si se deja de cumplir la condición, o se ejecuta un break
- En caso contrario quedaría atrapado hasta que se mate el proceso con kill o se mate el actual en consola con Control+C
counterwhile=0Nota: Si descomentas el break, saldrá en la primera iteración, sino imprimirá de la 0 a la 4.
while [ ${counterwhile} -lt 5 ]
do
echo "Hola iteración: ${counterwhile}"
let counterwhile=counterwhile+1 # Forward
#break
done
5.- Bucle for, manual.
- Se usa la sintaxis for NOMBRE in LISTA
- do para el código que se debe ejecutar en cada iteración, al terminar done
- El script termina al acabar la llista, o se ejecuta un break
- Siempre acaba.
for name in {1..5}Nota: Si descomentas el break, saldrá en la primera iteración, sino imprimirá de la 1 a la 5.
do
echo " Variable name is: ${name}"
#break
done
Ahora si, copia el código del snippet, pegalo en myfirstscript.sh, y ejecutalo. Se debería crear las carpetas input y output, y dar como salida:
------- My first script begins execution...Para cualquier duda, google es tu amigo, y sino busca ayuda en stackoverflow después de leerte las normas.
--------------------------------------------
If you want to print a special character use \ before, # is not, $ is a special characters
Variable with type int intvariable, ${intvariable} contains 5
Variable with type string inputpath, ${inputpath} contains ./input
Variable with type string outputpath, ${outputpath} contains ./output
An unassigned variable no exist, so ${unassigned} = NULL =
Check if exist input path...
Creating input folder...
Check if exist output path...
Creating output folder...
Check if exist file: myfile, with extension dat, full name is: myfile.dat
File: myfile.dat not found, creating...
List with files in ./output:
Filename 0: myfile_0.dat - full: ./output/myfile_0.dat
Filename 1: myfile_1.dat - full: ./output/myfile_1.dat
Filename 2: myfile_2.dat - full: ./output/myfile_2.dat
Filename 3: myfile_3.dat - full: ./output/myfile_3.dat
Filename 4: myfile_4.dat - full: ./output/myfile_4.dat
ls show a list of all of them too:
myfile_0.dat myfile_1.dat myfile_2.dat myfile_3.dat myfile_4.dat
------- My first script end now!
---------------------------------
No hay comentarios:
Publicar un comentario