2500hz2:(e02a07.txt):27/03/2000 << Back To 2500hz2


.--[ @_2500Hz - Underground Scene - ]------------(http://pagina.de/2500hz)--. | | | Titulo : Introduccion al Shell Scripting en Sistemas UNIX (I) | | Autor : kLoNiCaL (klonical@cyber-wizard.com) | | Fecha : 27/03/2000 | `-----------------------------------------------------(2500hz@mixmail.com)--┤ Primero que nada quiero decir que este documento refleja lo que yo se acerda de la programacion en shell. Como lo que sΘ puede estar incompleto o incorrecto, cabe la posibilidad de que este texto estuviera tambien incompleto o incorrecto ( mira que me repito eh?! =) ). Si alguien cree que se tiene que corregir, a±adir o quitar algo, que me envie un mail a klonical@cyber-wizard.com. O para lo que le de la gana. 1. Introducci≤n --------------- La programaci≤n en shell (o Shell Scripting) consiste en usar las herramientas que nos ofrece sistema operativo, en nuestro caso UNIX, para facilitar el uso del sistema mediante scripts que son una especie de programitas peque±os (ya lo veremos) que automatizan y simplifican los procesos que normalmente serφan mßs engorrosos y lentos para el usuario. Este articulo se basa en la utilizaci≤n de cualquier shell compatible con sh, en mi caso uso bash que es el mas conocido por ser el que trae por defecto el Linux. La programaci≤n en shell viene a ser mßs o menos parecida a los archivos por lotes (*.BAT) del MS-DOS y es muy comoda por ej. para realizar determinadas tareas mediante una unica orden, la cual ha sido programada con anterioridad en un script. Un script es un fichero de texto que contiene una sucesi≤n de instrucciones (comandos) que se pueden ejecutar igualmente desde el prompt pero que es este caso se ejecutarßn una seguida de otra, segun el orden en que las hayamos especificados en el script. Segun esto seria igual que un fichero BAT del DOS, con la diferencia de no tener extension, ya que en UNIX no existen las extensiones. El unico requisito es que tenga permisos de ejecucion sobre los usuarios a los que se quiera dejar usar el script. Cuando ejecutamos un script, el sistema lo intenta hacer como si fuera un binario normal, pero al darse cuenta que no es un binario directamente lo trata como un script. Si la primera linea del fichero es algo asi: #!/bin/sh El sistema verifica que es un script y pasa a interpretar las ordenes del mismo. En este ejemplo el script usaria el shell sh como interprete de comandos pero perfectamente podria ser algo asi: #!/bin/bash Que seria los mismo salvo que ahora usamos bash. En caso de que la primera linea no sea una llamada al shell o este incorrecta el sistema dara un error de ejecucion. Ya que la sintaxis que introducimos es erronea. Es obligatorio introducir SIEMPRE en la primera linea de un script el shell que vamos a usar para ejecutar el script. El sistema lo que hace es crear un proceso shell hijo y ejecutar desde Θl todos las intrucciones del script. Todas las lineas de un script que comiencen con una almohadilla (#) indican que toda la linea es un comentario, excepto la primera que es la llamada al shell, que la sintaxis esta definida asφ, con una almohadilla al principio. Los comentarios se usan para una mejor comprension de lo que hace el script a la hora de ser leido por otro usuario que no lo haya escrito, incluso para que su propio autor recuerde lo que hace, ya que se suele olvidar con facilidad. Entonces todas las lineas que comiencen por # seran ignoradas...vale, seguimos. Os voy a poner un ejemplo de un script tipo "hello world" para explicar sus partes mas simples e insignificantes :) Ahφ va: -------EMPIEZA EL SCRIPT---------- #!/bin/sh # Script: Hello World echo Hello World!! -------TERMINA EL SCRIPT---------- ahora explico esta gilipollada tan grande xDDD. La primera linea es la llamada al shell que explicamos antes y paso de repetir. La segunda linea es un comentario (vemos que empieza por #) y en la tercera linea se usa uno de los comandos del unix, el echo, que lo unico que hace es escribir lo que nosotros le digamos en pantalla (sirve para mas cosas, pero la que nos interesa a nosotros es esta), en este caso "Hello World". Si quisieramos ejecutar el script y ver como nos ha quedado la chapucilla, hacemos lo siguiente: Despues de hacer el script con un editor de texto cualquiera y escribir las tres lineas anteriores, grabamos el fichero por ejemplo, con el nombre de "hello" y salimos del editor. Una vez en el prompt, debemos darle permisos de ejecucion al script, hacemos esto: chmod a+x hw Esto deja ejecutar el script a todos los usuarios. Pues ahora solo ejecutamos es fichero... ./hw y deberia salir esto: gotelin:~/2500hz$ ./hw Hello World gotelin:~/2500hz$ La primera y tercera linea son los prompts del shell, mientras que la segunda es el resultado de lo que ha hecho el script. Bueno, creo que ya sabemos que es un script y como empezar a crearlos y ejecutarlos. Ahora veremos lo que podemos hacer con ellos, pero antes esta claro que debes conocer los comandos de los que dispone tu shell para usarlos en el script. 2. Variables ------------ Al igual que en cualquier lenguaje de programacion, aqui tambien existen las variables, que no son mas que zonas de memoria a las que se le asignan un valor para su posterior uso. Lo que tiene el shell scripting es que las variables no hay que declararlas ya que siempre estan inicializadas con un valor literal nulo, osea ningun caracter. Las variables aqui no tienen tipo alguno, a diferencia de los lenguajes de programacion, estas variables seran siempre ristras de caracteres (literales). ┐Como trabajar con variables? A eso vamos ahora..... Por ejemplo, mira este script que con ejemplos es como mejor se aprende la programacion: #!/bin/sh # Ejemplo de un script que usa variables echo Dime tu nombre read nombre echo Ahora me dices tu apellido o te parto la crisma!!! read apellido echo Te veo un poco acojonado $nombre $apellido Esto es lo mas simple, escribe en pantalla "Dime tu nombre", y debajo lee de la entrada de datos estandar, o sea el teclado, y lo que lea lo mete en la variable 'nombre'. Echo y read son dos comandos del shell que deberias saber usar, si no es asi, man read y man echo =). Para asignar valores a una variable mediante read, solo es necesario escribir el comando (read) y la variable a la que asignar el valor. Como podras ver en la ultima linea, se hace referencia a las variables mediante el dolar ($). Siempre que vayamos a leer el contenido de una variable ponemos $var donde "var" es el nombre de la variable en cuestion. No hace falta ser muy avispado para averiguar que pasaria si no pusieramos los signos $ :) pero para establecer los valores a las variables no hay que poner $, esto es debido simplemente a la sintaxis que usa read. A las variables se le pueden dar un valor inicial al comenzar el script, por ejemplo: #!/bin/sh NOMBRE=kLoNiCaL echo $NOMBRE Saldria en pantalla la palabra "kLoNiCaL". Ahora que me acuerdo! todo lo que pongais en los script, como casi todo en UNIX, es case sensitive, explico: esto quiere decir que las mayusculas se diferencian de las minusculas, asi pues no es lo mismo la variable 'NOMBRE' que la variable 'nombre' o que la 'nOmBrE'. Cuidado: imaginemos que tenemos un valor A dentro de una variable 'x' y queremos asignarle el valor de 'x' a otra variable 'y' . Y hacemos: x=A y=x Esto seria incorrecto, ya que el valor final de la variable 'x' seria el conjunto de caracteres A y el valor de 'y' seria el caracter x y no A. Para corregirlo hariamos: x=A y=$x Ahora si... :) Otra cosa a tener en cuenta con los parametros que se le pasan al script en la linea de comandos. Estos se guardan en unos identificadores especiales usadas por el propio shell. Son $1 $2 $3 ... $N Ejemplo: tenemos el script de nombre "pp" #!/bin/sh echo Los 2 primeros parametros son: $1 $2 echo El nombre del comando ejecutado es: $0 echo Se han definido $# parametros echo Todos los parametros juntos: $* Facil.., $1..$N son los parametros, $0 devuelve el nombre del comando (en nuestro caso el script "pp"), S# devuelve un numero, el numero de parametros definidos en la linea de comandos. Los parametros se separan por espacios. $* devuelve el conjunto de todos los comandos, o lo que es lo mismo y mas preciso la concatenacion de todos los $N. El resultado seria: gotelin:/home/klonical/2500hz# ./pp2 a e i o u Los 2 primeros parametros son: a e El nombre del comando ejecutado es: ./pp2 Se han definido 5 parametros Todos los parametros juntos: a e i o u Bueno aquφ termina la primera parte de este interesantφsimo "mini tutorial", si es que le puede llamar asi a esto xD Como tengo poco tiempo ya os seguire escribiendo poco a poco mas cosas sobre shell scripting en otros numeros de 2500hz-Ezine. ..no seais impacientes y esperad, que encima que no me gusta escribir... xDD ta luegorr Copyright --------- Solo esta autorizada la distribucion de este texto al grupo 2500hz o a cualquier otra persona que tenga el consentimiento expreso del autor y aceptando las condiciones de no modificacion de su contenido. -- kLoNiCaL -- - -- - -- - -- - -- - -- - -- @_2500Hz - Underground Scene -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- -