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 :
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.
Shell
1
2
3
4
5
6
myVar[0]="algo"
myVar[1]="algo mas"
myVar[3]="otra cosa"
#-- otra forma (pero asina subindices consecutivos)
set-AmyVar"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:
Shell
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:
Shell
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:
Shell
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.
Auth –> (Procesos de autenticación)
Broadcast –> (Descubrir hosts en red local)
Brute –> (Ataques de fuerza bruta)
Default –> (Juego de tests ‘por defecto’)
Discovery –> (Descubrir nuevos hosts con pruebas avanzadas)
Dos –> (Ataques de tipo DoS)
Exploit –> (Sacar partido de vulnerabilidades)
External –> (Uso de servicios externos como ‘Whois’)
Fuzzer –> (‘Fuzzing’ de aplicaciones)
Intrusive –> (Puede causar daños al host remoto)
malware –> (Para detectar equipos infectados)
Safe –> (No hay riesgo para el host remoto)
Version –> (Detectar versiones de servicios)
Vuln –> (Búsqueda de vulnerabilidades explotables)
Pongamos unas comillas al “infinito”, todo concluye al fin, nada puede escapar a un Ctrl+C o a un break (produce un abandono inmediato) dentro del bucle.-
Shell
1
2
3
4
5
while:;do
# Todo lo que quieras repetir infinitas veces
echo"Hola Mundo"
sleep2
done
Otras opciones son utilizar las palabras especiales true (indica que una condición en verdadera) y false (indica que una condición es falsa) de bash:
La combinación de arrays e indirección de variables demuestra toda la potencia del método. Es especialmente útil para crear archivos de configuración coherentes, fáciles de modificar, potentes y flexibles, pero sobre todo, que no necesitan ser parseados, el mismo Bash se encarga de eso en forma trasparente, por lo tanto la probabilidad de bugs disminuye notoriamente. El siguiente ejemplo demuestra la configuración de un pequeño programa utilizando arrays e indirección de variables:
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
# Archivo de configuración: pruebaservidores.conf
servidores=(srvmysql srvapache)
srvmysql_config=(
nombre=SrvMySQL
ip=172.16.2.1
)
srvapache_config=(
nombre=SrvApache
ip=172.16.2.4
)
A continuación el programa principal :
Shell
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
28
29
30
31
32
33
34
35
#!/bin/bash
# Programa principal: pruebaservidores.sh
source pruebaservidores.conf
functionprobarServidor(){
# Esta es la función que hace la "magia"
# usando indirección de variables
# Crea una variable local con el nombre del array
# que contiene la configuración del servidor
local servidor="$1[*]"
# Itera cada elemento de la configuración
# creando variables locales, usando indirección
forconfigin${!servidor}
do
# Crea instancias locales a partir de los elemntos
# del array que configura cada servodr
local$config
done
# Ahora cada elemento del array es una variable usable localmente
Como se puede apreciar, el programa tiene un archivo de configuración que casi no requiere ningun esfuerzo de programación adicional para leer la configuración del usaurio, y éste a su vez encuentra una estructura de configuración sumamente intuitiva y fácil de adaptar a sus necesidades particulares, pudiendo incluso incorporar lógica de proceso en caso de ser un usuario técnico y tener un buen motivo para hacerlo.
¿Te ha servido este sitio alguna vez? Cada script, cada línea de ayuda aquí es fruto de horas de trabajo y pasión por compartir. Si alguna vez resolviste un problema gracias a esta página, considera hacer una donación. Tu aporte —por pequeño que sea— mantiene vivo este proyecto y me impulsa a seguir creando.