Copy Link
Add to Bookmark
Report

2500Hz Issue 02 - 07 Shell Scripting en Sistemas UNIX (I)

eZine's profile picture
Published in 
2500Hz
 · 3 years ago

  

.--[ @_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 -- -
-- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- - -- -

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT