1 2 3 4 5 6 |
#!/bin/bash echo ## suma de un maximo de 3 dígitos entrados como argumentos SUMA=$((${1:-0} + ${2:-0} + ${3:-0})) echo $SUMA echo |
1 2 3 4 5 6 |
#!/bin/bash echo ## suma de un maximo de 3 dígitos entrados como argumentos SUMA=$((${1:-0} + ${2:-0} + ${3:-0})) echo $SUMA echo |
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash echo ## Convertir cada palabra de una frase en una variable. echo -e "Dime una frase: \c" read -a FRASE echo declare -a FRASE echo echo "El tercer elemento es ${FRASE[2]}" echo exit |
Script para purgado de logs o archivos temporales. El uso excesivo de logs nos lleva a la necesidad de la existencia de una rotación o depuración de los mismos; para esa ocasión, tan solo con un find bien robusto podemos hacer esta purga.
Veamos el ejemplo y analicemos brevemente el código:
MantenimientoLogs.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/ksh Log() { date “+%Y/%m/%d %H:%M:%S, $0, $1” } echo Log “*** $0 Init ***” cfgFile=$1 if test -z “$”; then Log “No se especifico archivo de configuracion” Log “Termina!” exit 1 fi if test ! -f “$cfgFile”; then Log “No se encuentra el archivo de configuracion: [$cfgFile]” Log “Termina!” exit 3 fi . $cfgFile # include Log “Purgo logs ($datePurge dias)” find $pathLogs \( -name “*.*~” -o -name “*.log” \) -ctime +$datePurge -exec “rm -v {}” Log “Terminamos!” |
MantenimientoLogs.cfg
1 2 3 4 5 6 |
# path del directorio de logs pathLogs=/var/log/myapp/ typeset -i datePurge # tiempo que mantengo los logs datePurge=30*3 #tres meses |
El primero de los archivos es el que hace el trabajo, el segundo es solamente de configuración. El primero recibe como argumento el segundo. El único motivo de este desacople es que cuando haya algo de configuración que modificar, se haga en el archivo cfg y no en el script de mantenimiento que es el que tiene la lógica.
En MantenimientoLogs.cfg solo configuro el directorio que quiero purgar, y la cantidad de días que pretendo mantener los logs.
MantenimientoLogs.sh tiene la “lógica”, entre comillas ya que no hay mucho que decir de la misma sino más bien del find. En este script lo primero que vemos es una función Log, que hace de echo pero que agrega la fecha a cada línea. Luego se hace una especie de “include” del archivo de configuración (recibido como parámetro), previo chequeo de la existencia del argumento y la existencia del archivo. Y luego viene todo el trabajo, que lo hace el find.
El find en el caso del script busca todos los archivos .sql o .*~ cuya fecha de modificación sea más de N días (donde N es $datePurge y $datePurge lo habiamos configurado en el cfg). Y finalizando esta línea, a los resultados del find les ejecuta la acción “rm -v“.
Este script fue copiado desde la siguiente URL : Script para purgado de logs o archivos temporales
Este código se ejecuta en el CRONTAB todos los dias a las 00 Hrs. y borra todos los archivos con mas de 5 dias de antiguedad.-
1 |
0 0 * * * /usr/bin/find /usr01/home/prueba/log -mtime +5 -exec rm {} \; 1> /dev/null 2> /dev/null |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/bin/bash # script de bash para reemplazar parte del nombre de uno o varios archivos. # sh script.sh 2013 2014 log* -> Reemplzara en todos los archivos que empiezan # log y que contengan el valor 2013 por el # valor 2014, quedando por ejemplo el archivo: # log_201301.log -> log_201401.log # # Comprobamos que recibamos tres parametros if [ $# -lt 3 ] ; then echo "usar: $0 [expresion] [reemplazar] archivos..." echo exit 0 fi # cogemos los valores recibidos expresion=$1 reemplazar=$2 shift;shift # Bucle que pasa por todos los archivos y reemplza utilizando el comando sed for file in $* do new=`echo ${file} | sed s/${expresion}/${reemplazar}/g` if [ "$new" != "$file" ];then mv ${file} $new echo "Reemplazando ${file} -> $new" fi done exit 0 |