1 2 3 4 5 6 7 |
#!/bin/bash CONTADOR=1 while [ $CONTADOR -lt 10 ] do echo "El contador vale ${CONTADOR} y es menor que 10." let CONTADOR++ done |
1 2 3 4 5 6 7 |
#!/bin/bash CONTADOR=1 while [ $CONTADOR -lt 10 ] do echo "El contador vale ${CONTADOR} y es menor que 10." let CONTADOR++ done |
Busca en la entrada, líneas que concuerden con el patrón dado. Cualquier meta-carácter con un significado especial debe ser protegido precediéndolo con una barra inclinada inversa (\ ). Algunos patrones de grep se encierran entre ‘..’ (apóstrofos) para indicarle que no es un metacarácter del sehll. También existe en su versión zgrep para buscar en archivos comprimidos.
grep [opciones] ‘patrón’ archivos
grep «ejemplo» * listara las lineas que concuerden con la cadena ejemplo de «todos» los archivos del directorio actual.
grep -i hola pp.txt considera idénticas las mayúsculas y minúscula en la cadena de búsqueda hola. (hola=HOLA=Hola=etc.).
grep -ri «hola» ./ busca en los archivos del directorio actual y los subdirectorios la palabra hola.
grep -v hola pp.txt lista las líneas que no contengan la cadena hola del archivo pp.txt
grep -n hola pp.txt las líneas concordantes con la cadena hola del archivo pp.txt se mostrarán acompañadas del número de línea.
grep -w sobre pp.txt listara solamente aquellas líneas que contienen concordancias que forman palabras completas.
grep -A 2 hola pp.txt muestra 2 líneas de contexto después de las que concuerden con el patrón hola.
grep -B 2 hola pp.txt muestra 2 líneas de contexto antes de las que concuerden con el patrón hola.
grep -f patron.txt pp.txt obtiene el patrón de fichero patron.txt y listara líneas concordantes del archivo pp.txt
grep -s «ejemplo» * suprime los mensajes de error sobre ficheros que no existen o no se pueden leer.
grep [123] pp.txt listara las lineas que contengan los números 1, 2 o 3
grep ‘^L’ pp.txt lista las lineas de pp.txt que comiencen la línea con el carácter L, el carácter ^ denota inicio de cadena.
grep ‘h$’ pp.txt lista las líneas de pp.txt que terminen en h, el carácter $ denota fin de cadena.
grep ‘\
grep ‘xy*’ pp busca en pp una x seguida por la secuencia más larga de y.
grep ‘^[^#]’ pp.txt muestra pp.txt, ocultando las líneas que empiezan por # y las líneas vaciás.
grep -o patron archivo muestra solo la parte de la linea que coincide con el patrón.
grep –color=always ‘\bing[[:space:]]’ pp.txt | less -R la palabra ing seguida de un espacio sera coloriada y esta redirigida al comando less sin perder el color.
grep -Eio ‘([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,6})’ archivo.txt muestra solo las direcciones de e-mail (no todo la linea que la contiene), del archivo.txt.
cat uu.txt | grep -oE ‘.*111111’ muestra desde el principio de la linea hasta la ocurrencia 111111
# cat uu.txt
73272028636f6e7461696e657269642054455854205051111115259204b4559204e4f54204e554c4c2c736
cat uu.txt | grep -oE ‘.*111111’
73272028636f6e7461696e65726964205445585420505111111
Si quisiéramos mostrar desde la ocurrencia hasta el final de la linea sería.
# cat uu.txt | grep -oE ‘111111.*’
1111115259204b4559204e4f54204e554c4c2c736
Para mostrar el contenido de la línea entre dos ocurrencias por ejemplo entre 6169 y 111111 sería:
# cat uu.txt | grep -oE ‘6169.*111111’
61696e65726964205445585420505111111
En caso que quisiéramos mostrar el final de la linea excluyendo la ocurrencia sería:
# cat uu.txt | awk -F111111 ‘{print $NF}’
5259204b4559204e4f54204e554c4c2c736
En este script se monitorea que el uso de memoria de un servicio en particular no sobrepase los 200 MB. De ser asi el servicio es reiniciado. Se guarda log de las acciones realizadas.-
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/ksh PATH=/usr/bin:/usr/ccb:/etc:/sist_bin:/usr11/home/con/bin:. export PATH # -------------------------COMIENZA FUNCION--------------------------------- ejecuta(){ cat $ servidores | while read line;do ser=$line ejecuta="$COMANDO $ser ccinvtt " hora=`date +%H:%M` $ejecuta > $salida memoria=`awk '$6>1 {suma+=$6}END {print suma}' < $salida` servici=`awk '$6>1 {copias+=1}END {print copias}' < $salida` individ=`expr $memoria / $servici` if [ ${memoria} -gt 200000 ] then echo $ser $fecha $hora $servici $memoria $individ >> $log1 $COMANDO $ser ccinvtt start 1> /dev/null 2> /dev/null fi done } #--------------------------FIN FUNCION---------------------------------------- fecha=`date +%d%m%Y` servidores="/usr11/home/contab/logs/servidores.txt" salida="/usr11/home/contab/logs/salida" log1="/usr11/home/contab/logs/rei_servicios.log" COMANDO="starup star_servicio" ejecuta |
Si recien te inicias en el mundo de la programación web, te recomiendo estos 3 sitios donde podras obtener información y excelentes tutoriales en tres rubros del scripting :
1 2 3 |
CSS (CSS YA), http://www.cssya.com.ar/ Javascript (Javascript YA) http://www.javascriptya.com.ar/ PHP (PHP YA). http://www.phpya.com.ar/ |
Aquellos que utilizan Unix o Linux diariamente, programan muchos scripts para diversas tareas. Es que uno de sus kernels ksh es de los más cómodos para trabajar. Pero pocos dan utilidad a los vectores (arrays).
Su utilización es sencilla, simplemente se asigna a una variable con subíndice un valor y listo. Los subíndices pueden no ser consecutivos, lo que muchas veces puede complicar las cosas a la hora de querer iterarlos, no por el vector, sino por las tareas que hagas con los contenidos de los elementos vacios. Tal vez convenga utilizar una variable para ir llevando el contador de elementos.
1 2 3 4 5 6 |
myVar[0]="algo" myVar[1]="algo mas" myVar[3]="otra cosa" #-- otra forma (pero asina subindices consecutivos) set -A myVar "algo" "algo mas" "otra cosa" |
Pero ¿cómo los recorremos? Uno de los datos principales que necesitamos para recorrerlos es el subíndice máximo del vector, y algo que pocos conoces es la sentencia para obtener ese valor: ${#myVar[@]}, que devuelve el subíndice máximo que se utilizó para asignar un elemento al vector, no la cantidad de elementos que componen el mismo. En el ejemplo anterior, la sentencia retornará 3 para la primera parte del ejemplo y 2 para la segunda parte (set -A…) ya que los subíndices comienzan por cero.
Así, la forma de recorrer el vector sería:
1 2 3 4 5 6 |
i=0 while [ i -le ${#myVar[@]} ] do var=${myVar[i]} ... done |
Nótese en el ejemplo que las llaves ({}) rodean al elemento solicitado. Esta es la forma de acceder a un dato guardado en un elemento requerido del vector.
De esta forma nos aseguramos de recorrer el vector hasta su último elemento aunque alguno de sus subíndice no haya sido asignado. Pero ¿cómo sabemos cuantos elementos fueron asignados?. La respuesta está en esta simple instrucción:
1 2 |
#-- retorna el numer de elementos asignados echo ${#myVar[*]} |
Por otra parte, si quisieramos ver todos los elementos del vector en una lista vastará con:
1 2 3 |
echo ${myVar[*]} # MUESTRA algo algo mas otra cosa |
lo que no es muy útil si tenemos en cuenta que el separador de campos por omisión que utiliza Unix es el espacio en blanco, con lo cual perderíamos la capacidad de saber donde comienza y donde termina cada elemento. Esto tiene una fácil solución cambiando el valor del separador de campo que se encuentra en la variable de entorno FS.