Los Shell Script son bastantes simples de crear, ejecutar, y trabajar con ellos, lo que necesitamos es algún sistema operativo GNU/LinuxEn esta página aprenderemos a crear Shell Scripts (en adelante script) de la forma más eficiente, sin dar muchas vueltas.Nivel 1 - No sé nada de scriptsBueno, ya que no sabés nada te voy a explicar como empezar:Paso 1: Abrís la consola, o terminal, ese va ser tu compilador y va ser donde ejecutes tu programa...Paso 2: Elegí tu editor de textos preferido, en la consola puedes ejecutar el comando "vi" o el comando "nano", de estos editores de la consola recomiendo usar el "nano", el "vi" es muy confuso usarlo.En caso de elegir el editor "vi": Tenés 3 niveles Modo Comando Modo insertar Modo última líneaHace mucho que no agarro mis cuadernos, pero creo que estoy en lo cierto, el modo insertar es el que vamos a utilizar para escribir en nuestro archivo, el modo comando se entra desde el modo insertar presionando Esc y luego ":", sino estando en el modo comando, presionando ":" y ejecutando un comando, también sirve... no voy a explicar eso, agarrenle la mano si quieren. Para entrar al modo insertar debemos presionar la letra "i" desde el modo comando, y la verdad no me acuerdo mucho de este editor, pero al menos ya tienen una base.En caso de elegir el editor "nano":En este entrás directamente a escribir, y presionando Ctrl+O guardas el archivo, Ctrl+X para salir, bueno, en la parte inferior les va mostrar las opciones...También podés elegir un editor de textos como el gedit, es como el Bloc de notas de windows, o cualquier editor de textos, el que mas les guste.Paso 3: Fijate en donde lo guardes, esa será la ruta para ir a ejecutar el script, /home/usuario/Escritoriosi donde lo guardamos fue en el escritorio, entonces esa será la ruta, para fijarnos en la ruta en la que estamos utilizamos el comando "pwd" en la consola.Para ir a un directorio entonces ejecutamos el comando "cd" y la ruta a la que queremos ir$ pwd/home/usuario$ cd Escritorio$ cd "mi carpeta"$ pwd/home/usuario/Escritorio/mi carpetaPara ver los archivos de un directorio lo hacemos con el comando "ls"$ lsarchivo1archivo2.textoarvhivo3.tarPaso 4: Ya sabemos manejarnos en nuestra computadora a traves de la consola, ahora, ¿cómo ejecutamos el script?El script tiene varias formas de ejecutarse, supongamos que nuestro script es el archivo1, para ejecutarlo utilizaremos el comando "sh"$ sh archivo1o el comando "bash"$ bash archivo1o el que recomiendo usar, "."$ . archivo1Con este último, el script además de ejecutarse y simplemente eso como lo hacen con "sh" y "bash", también lo que hace es dejar que el próximo script a ejecutarse, o solamente la consola en la que se ejecutó, se quede con el resultado de las variables.Esto es una ventaja, ya que si queremos controlar una variable desde la consola en la que se ejecuta este comando nos va ser muy útil.Paso 5: Vamos a crear un pequeño script con algunos comando basicosEn su editor preferido escriben:____________________________# Mi shell Scriptclearecho Este es mi shell scriptread -s -p "Presione enter para continuar..."____________________________Guardenlo con el nombre que más les guste, ejecutenlo, y les aparecerá esto:Este es mi shell scriptPresione enter para continuar..._Explicación: clear - Limpia la pantalla echo - Muestra una cadena de texto en pantalla read -s -p "texto" - Hace una pausa en el scriptNivel 2 - Ahora sé un poquitoBueno ya que sabés un poquito, empieza el teórico feo, el mal necesario...Tenemos que saber que como un lenguaje de programación, este lenguaje es un lenguaje estructurado.Yo les voy a enseñar usar 3 estructuras que son las más importantes para mi, una es el IF, la segunda es CASE y la tercera es WHILE, obvio señores, estas son las que me parecen las más importantes, pero esta el FOR, el UNTIL, y no me acuerdo más...Empecemos con el IF, la más usada diría yo, su sentencia es fácil: Una sola condición Dos o más Ejemploif condición then comandos fi if condición then comandos else comandos fi if test 2 -eq 2 then echo el número es 2 fiExplicación: el "test" es un comando que se puede usar con el "if" tanto como con cualquier estructura condicional, este comprueba que una sentencia es verdadera, en el ejemplo, si lo traducimos al "español", dice: si 2 es igual a 2 entonces...en el "test" se comparan números o cadenas de texto, para comparar números se utilizan-eq Igual a-gt Mayor que-lt Menor que-ge Mayor o igual a-le Meno o igual a-ne Distinto dey para las cadenas de texto= Igual a> Mayor que< Menor que>= Mayor o igual a<=Menor o igual a!= Distinto deAntes de continuar, les voy a enseñar a usar variables, estas pueden guardar adentro cualquier valor numérico y cadena de texto, salidas de comandos, etc...Se declaran así:variable=valory se las llama así:$variablesEjemplo:$ variable="hola como estas?"$ echo $variablehola como estas?Pero las variables las vamos a usar para muchísimas partes del programa, desde operaciones numéricas hasta para guardar cadenas de texto, o salidas de comandos.Para guardar una salida de comando en una variable vamos a utilizar el tilde que apunta hacia la izquierda "`", encerrando al comando.De esta forma:$ variable=`echo hola`$ echo $variableholaEs un ejemplo nada más... a medida que avancen en un shell script podrán darse cuenta de como utilizar las variables para las salidas de comando,ahora para hacer operaciones matematicas usamos el comando "expr", y lo guardamos en una variable el resultado, asi, de esta forma:$ operacion=`expr 1 + 1`$ echo $operacion2El "expr" también puede utilizar variables en sus operaciones, de esta forma:$ numA=1$ numB=2$ operacion=`expr $numA * $numB`$ echo $operacion2Bien, ahora que sabemos como manejar variables, entonces vamos a seguir con las estructuras de programación, y la siguiente es el WHILEEl "while" es un bucle repetitivo que se ejecuta mientras se cumpla la condición: while Ejemplo while condición do comandos done while test 2 -eq 2 do echo el numero es dos doneLa salida de esta estructura van a ser infinitos:el numero es dosel numero es dosel numero es dosel numero es dosel numero es dosel numero es dosel numero es dos...y así hasta que se agota la energía de la tierra... porque se ejecuta mientras 2 sea igual a 2.Pero para manejar un "while" de manera correcta, lo que tenemos que aprender es a hacer que el usuario ingrese valor de variables en nuestro script, y ahí viene el otro uso que le vamos a dar al comando "read" y su sentencia es muy simple:$ read variable_El comando queda esperando a que le ingresemos un valor a variable y luego presionemos «enter»$ read variablehola$ echo $variableholaBueno ahora nuestro while y cualquier otra estructura ya va cobrando vida, voy hacer un ejemplo con un if___________________________________clearecho ingrese un numero:read numif test $num -eq 5 then echo Saliste sorteado, el numero ganador es 5 else echo Perdiste, el numero ingresado no es el ganador fi_____________________________________En este script, que tiene un if de dos condiciones, solo nos va aparecer "Saliste sorteado, el numero ganador es 5", si el numero que ingresamos en el read es igual a 5, en caso contrario no aparecerá "Perdiste, el numero ingresado no es el ganador"Y para continuar, vamos a seguir con nuestra tercera estructura, el CASE, es una estructura de selección, según el valor de la variable va ser el menú al cual entre el case, su estructura es así: case Ejemplo case $var in1)comandos;;2)comandos;;esac read opcioncase $opcion in1)echo la opcion es 1;;2)echo la opcion es 2;;esacen caso de números en las opciones pueden usar letras, sabiendo de antemano que en linux se diferencian las mayúsculas de las minúsculas, pero tenemos un OR que es un operador lógico, y este nos va ayudar con el case, "a|A)" -> esto significa "a o A", nuestro operador lógico es el pipe, que es igual a OR que en español significa O. También en el case tenemos comodines, que para remplazar 1 carácter tenemos al "?" y para remplazar una cantidad indeterminada de caracteres tenemos al "*", el asterisco siempre se utiliza al final como el default de salida, les voy a mostrar un pequeño ejemplo:____________________________________read opcioncase $opcion ina|A)echo la opcion es A;;1)echo la opcion es 1;;?0)echo la opcion es un multiplo de 10;;*)echo No se ingreso nada valido;;esac____________________________________Hay que tener en cuenta que para terminar cada opción del CASE es necesario poner ";;", asi finalizará cada opción correctamente.Nivel 3 - Dale flaco, empezá a enseñarme comandos que quiero hacer mi scriptBueno, bueno... ya va... el tema es que no me voy a poner a explicar comandos como loco, porque hay demasiados comop para que me sacrifique explicando cada uno de ellos, pero les voy a enseñar algunos que les va servir abundante en cada script que creen ustedes:supongamos que tenemos un archivo llamada datos y el contenido es este:_____________________jose:pedro:34anibal:clementino:46debora:juliana:27juan:noel:31_____________________grep - Este comando busca cadenas de texto en un archivo o en la salida de un comandogrep "jose" "datos"va buscar la palabra "jose" en el archivo "datos"... y la salida es esta:jose:pedro:34cut - lo vamos a utilizar para separar campos en un archivocut -f2 -d: datosva mostrarnos los palabras del campo 2 con el separador de campos que es ":" en el archivo datos.. y la salida es esta:pedroclementinojuliananoeltail y head - Nos va mostrar tantas lineas le digamos que muestre dependiendo si es head, las primeras lineas o tail empezando desde las ultimas.tail -2 datosnos va mostrar las ultimas 2 lineas del archivo "datos"... y la salida es esta:debora:juliana:27juan:noel:31head -2 datosnos va mostrar las primeras 2 lineas del archivo "datos"... y la salida es esa:jose:pedro:34anibal:clementino:46awk - un comando bastante útil, que separa los campos, podemos usarlo para salidas de un comando y separar sus distintos campos y mostrarlos en el orden que queramos, pero antes de que les enseñe a usar este comando, tiene que aprender a usar el pipe, que es "|" (Alt Gr+1), es lo mismo que el OR del CASE, pero de esta vez no es OR es un direccionador de salida de comando.En el próximo caso supongamos que el archivo "datos" tiene muchos reglones, unos 100 renglones.cat datos | moreExplicación: "cat" es el comando que muestra el contenido de un archivo especificado posteriormente, y more muestra el resultado de la salida de un comando (en este caso, por el pipe) por pantallas para que pudiéramos ver cada parte del archivo(en este caso "datos".Les explico esto porque el awk siempre lo vamos a utilizar con el pipe.Ahora un comando para explicarles el awk y de paso ya aprenden otro comando:df es el comando que nos muestra la información de los discos instalados, y el parámetro "-h" (df -h) nos muestra los datos de los discos en forma que lo podamos leer.$ df -h | awk ' {print $2 " - " $6} 'Tamaño - Montado36G - /876M - /dev881M - /dev/shm881M - /var/run881M - /var/lock881M - /lib/init/rw150G - /media/04E4A38UE4A37C94_*/Este es el caso de mi computadora/* El comando lo que hace es mandar la salida del comando "df -h" a awk, y awk toma el campo 2 y el 6, entre medio de ellos pone el "-" que lo utilize como separador, y eso nos muestra en pantalla.POR MÁS COMANDOS PIDANLOS POR COMENTARIOS. Por ayuda de cada comando esta es la sentencia: "comando --help" o "man comando"Nivel 4 - Ya hice mi script, pero enseñame algo de redes.(Recomiendo que a medida que encuentren siglas o palabras que no conozcan, búsquenlas en Internet)Como ya saben, el tema redes, es el más importante en la computación. Por eso les voy a enseñar a crear scripts con comandos que les servirán en una red. Pero tengan en cuenta que los van a tener que releer muchas veces, ya que algunos no son tan fáciles de usar, pero esta es la parte en la que voy a usar scripts para explicarles.ping - es un comando que comprueba el estado de conexión del equipo actual a uno o más equipos remotos. Esto se logra ingresando la ip del equipo destino o el DNS. Supongamos que queremos comprobar conexion con la ip 127.0.0.1 (IP del host local)$ ping 127.0.0.1PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.062 ms64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.057 ms64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.053 ms64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.057 ms64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.039 ms64 bytes from 127.0.0.1: icmp_seq=6 ttl=64 time=0.044 ms...Y así infinitas veces. Pero si solo queremos que haga 2 ping al host entonces usamos el parámetro "-c número_de_veces", así:$ ping -c 2 127.0.0.1PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.055 ms64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.060 ms--- 127.0.0.1 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 999msrtt min/avg/max/mdev = 0.055/0.057/0.060/0.008 msPero supongamos que no tenemos el número de ip del destinatario, pero sabemos su DNS, entonces el ping es la misma sentencia, pero en vez de ip vamos a poner la URL del destinatario, así:ping -c 4 www.google.comPING www.l.google.com (200.40.0.83) 56(84) bytes of data.64 bytes from adistcen1.antel.net.uy (200.40.0.83): icmp_seq=1 ttl=60 time=13.7 ms64 bytes from adistcen1.antel.net.uy (200.40.0.83): icmp_seq=2 ttl=60 time=816 ms64 bytes from adistcen1.antel.net.uy (200.40.0.83): icmp_seq=3 ttl=60 time=12.3 ms64 bytes from adistcen1.antel.net.uy (200.40.0.83): icmp_seq=4 ttl=60 time=15.9 ms--- www.l.google.com ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 3338msrtt min/avg/max/mdev = 12.318/214.533/816.162/347.353 msY entonces nos estará mostrando la ip de google, en este caso es 200.40.0.83. (Descargar ping.sh)Script de muestraw - Nos muestra en pantalla los usuarios conectados a la redwho - Similar a "w"traceroute - (misma sentencia que ping) Nos muestra los saltos que hay desde nuestro equipo hasta el equipo destino. Mostrándonos todo el camino que hace.netstat - conexiones activas de Internetifconfig - información de todas las interfaces de redes de nuestro equipoy bla bla bla... por comandos así busquen en Internet... hay muchos más... pero les voy a enseñar uno difícil e importante.iptables - establece la configuración del firewall de linux(para ingresar cambios con iptables deben ingresar como superusuario con el comando "su"Por los que no saben que es un firewall, en este caso es un software, que filtra las entradas y salidas de paquetes de o a nuestro equipo, permitiendo pasar simplemente los que tengan un destino que le hayamos permitido (con iptables), o que ingrese de un destino confiable, lo que le explicitaremos cuales son confiables o no con el iptables. Esto es una definición muy básica de lo que es un firewall.El iptables, es el comando que no ayudará a controlar estos paquetes, pero tengo que explicarles que este comando es un gran mapa, y tiene una sentencia que varia muchisimo.Este comando se divide en tres reglas: Tablas NAT Mangle Tablas de filtrosPero yo les voy a enseñar como usar el iptables para los filtros, para filtrar paquetes.Empecemos; el iptables tiene como primer recurso las políticas, es decir, que se va hacer con cada paquete por defecto, y hay tres cadenas, los paquetes de entrada, los de salida, y los que se va a direccionar a otra parte. Estas políticas las pueden ver con "iptables -L", y ya verán también las reglas que tienen puestas.$ iptables -LChain INPUT (policy ACCEPT)target prot opt source destination Chain FORWARD (policy ACCEPT)target prot opt source destination Chain OUTPUT (policy ACCEPT)target prot opt source destinationLo que dice aqui es que las cadenas, ninguna de ellas tiene reglas, y sus politicas están en aceptar todos los paquetes entrantes, salientes y direccionados.El parámetro para cambiar una política es el "-P nombre_cadena acción", así:$ iptables -P INPUT DROP$ iptables -LChain INPUT (policy DROP)target prot opt source destination Chain FORWARD (policy ACCEPT)target prot opt source destination Chain OUTPUT (policy ACCEPT)target prot opt source destination Acciones: ACCEPT (Acepta los paquetes) REJECT (Rechaza los paquetes con aviso, es decir, avisa el origen del pquete de que no se puede recibir el paquete) DROP (Rechaza sin aviso)Para los filtros de entrada y salida, la sentencia es:iptables -regla comando -p protocolo tipo puerto -j accionDonde regla es: "I" Para agregar regla al principio "A" Para agregar regla al final "D" Para borrar una regla existenteDonde comando es: INPUT OUTPUTDonde protocolo es: tcp Si pertenece a la lista de protocolos TCP udp Si pertenece a la lista de protocolos UDPDonde tipo es: "--dport" Para especificar que es puerto destino "--sport" Para especificar que es puerto de origenDonde puerto es: Número de puerto (Ejemplo: 22) Nombre de puerto (Ejemplo: ssh)Donde accion es: ACCEPT REJECT DROPEjemplo:$ iptables -I OUTPUT -p tcp --dport 22 -j REJECTEsta sentencia lo que hace es ingresar al principio de la tabla OUTPUT que todos los paquetes del protocolo tcp con destino al puerto 22 sean rechazados con aviso.Aclaro, las reglas no se guardan al ejecutarlas, esto significa que cuando reinicien el equipo, las reglas volverán su valores normales, pero si lo que deseamos es guardar los cambios, ejecutamos:iptables-savePara los filtros de direccionamiento de paquetes la sentencia es:iptables -regla comando -p protocolo -s origen -o destino -j accionDonde origen es la ip de salida del paquete y destino es la ip del destinatario, a donde se va direccionar el paquete... regla, comando, protocolo y accion tienen las mismas características que para los filtros de entrada y salida.$ iptables -A FORWARD -p tcp -s 192.168.0.1 -o 192.168.0.2 -j ACCEPTEsta sentencia loq ue hace es ingresar al final de la tabla FORWARD, la accion de aceptar todos los paquetes tcp de origen en 192.168.0.1 y destino 192.168.0.2, es decir, deja pasar al paquete por la red.Ping.sh: Descargar - https://sites.google.com/site/vddcnsite/home/shell-script/ping.sh?attredirects=0&d=1***FIN***
Datos archivados del Taringa! original
10puntos
0visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
3visitas
0comentarios
Dar puntos: