Está en la página 1de 7

C.F.

ADMINISTRACIÓN DE SISTEMAS INFORMÁTICOS EN RED


IMPLANTACIÓN DE SISTEMAS OPERATIVOS

PROGRAMACIÓN SHELL (I): VARIABLES Y GUIONES SHELL.

INTRODUCCIÓN

Un shell es un programa interactivo que se interpone entre el usuario y el núcleo del sistema y permite interpretar
las órdenes de aquél para ser comprendidas y ejecutadas por éste.

Pero es algo más que un interfaz intérprete-traductor. Vamos a ver las características de programación del shell, que
incluyen tratamiento de variables, lectura y escritura interactiva, sentencias de control de flujo, definición de
funciones, etc.

Estas características permiten elaborar programas similares a los ficheros batch de MS-DOS pero con mayores
posibilidades de programación (entrada interactiva de datos, bucles, bifurcaciones, etc.)

VARIABLES Y ENTORNO

El shell incorpora dos zonas de memoria (específicas para cada shell iniciado) para almacenar variables: el área
de datos locales y el entorno.

Al definir una nueva variable se le asigna memoria de la zona de datos locales, pero no es accesible por ningún
otro shell que se inicie con posterioridad. Ningún subproceso prodrá utilizarla.

El entorno, en cambio, contiene variables globales que permanecen activas durante toda la sesión y son
accesibles por cualquier proceso. Suelen crearse al acceder al sistema y se utilizan para determinar las características
de la sesión (tipo de terminal, rutas de búsqueda de órdenes, directorio de presentación, indicativo del sistema,
etc.). No obstante, pueden incorporarse al entorno variables locales definidas durante la sesión (orden export).

GUIONES SHELL

Son programas o colecciones de órdenes reconocibles por el shell que se almacenan en un archivo y se
ejecutan secuencialmente cada vez que se invoca el nombre del archivo.

Estos programas reciben el nombre de guiones shell, shell-scripts, programas, o simplemente órdenes
porque en definitiva son nuevas utilidades que se incorporan y enriquecen el sistema y pueden ser utilizadas
como el resto de órdenes o comandos de UNIX.

U.T. 11-12: PROGRAMACIÓN SHELL: VARIABLES Y GUIONES SHELL. Página 1


C.F. ADMINISTRACIÓN DE SISTEMAS INFORMÁTICOS EN RED
IMPLANTACIÓN DE SISTEMAS OPERATIVOS

ENTRADA Y SALIDA DE GUIONES SHELL

Vamos a abordar la utilización de variables y las sentencias de lectura (read) y escritura (echo) que permiten
una comunicación interactiva en los programas o guiones shell. Con ellas se puede suministrar datos a los
programas y obtener resultados de éste.

También es posible suministrar valores a un programa al invocarlo mediante variables posicionales.

INFORMACIÓN

➢ set Muestra la lista de variables locales definidas.


➢ env Muestra la lista de variables iniciales del entorno. Suelen definirse en el archivo de arranque
.profile. Las más comunes son PATH, MAIL, PS1, PS2, TERM, TZ, HOME, LOGNAME, etc. Se puede obtener
una descripción de ellas con la orden man environ.
➢ export a) Convierte las variables consignadas en globales para que sus valores sean accesibles por todo
subshell que se genere. Ejemplo: export A1 A2 nombre

b) (Sin argumentos) Muestra la lista de variables exportadas.

➢ = Crea/asigna un valor a una variable. Ejemplos: A=3 ; nombre=marta

No debe haber espacios junto al signo =. El nombre de una variable es sólo su identificador; para
acceder a su valor hay que anteponer el signo $. Ejemplo: $A

➢ echo Muestra en pantalla las cadenas de caracteres introducidas como argumento. Los caracteres
especiales (*, $, \, ?, etc.) son interpretados por el shell antes de pasarlos a la orden echo. Para evitarlo se
utilizan los caracteres:

' ' Impiden la interpretación de todo lo incluido entre las comillas simples. (No confundir con el acento
grave `, que ejecuta previamente el contenido.)

“ “ Se permite la interpretación de $ (sustitución de variables por su valor), “ (comillas dobles), ' (comillas
simples) y \ (barra invertida).

\ Elimina el significado del siguiente carácter (uno sólo).

➢ Secuencias de escape

Permiten insertar códigos especiales en una línea de echo. Son los siguientes:

U.T. 11-12: PROGRAMACIÓN SHELL: VARIABLES Y GUIONES SHELL. Página 2


C.F. ADMINISTRACIÓN DE SISTEMAS INFORMÁTICOS EN RED
IMPLANTACIÓN DE SISTEMAS OPERATIVOS

\c Evita el salto de línea.

\n Inserta un salto de línea.

\f Inserta un salto de página.

\t Inserta un salto de tabulador.

\v Inserta un salto de tabulador vertical.

\b Código de retroceso.

\r Código de retorno de carro [Intro].

\nnnn Genera el código ASCII correspondiente al número octal nnnn. Puede tener 2, 3 ó 4 cifras pero la primera
siempre debe ser cero.

➢ Guión shell Conjunto de órdenes almacenadas en un archivo y ejecutadas por el shell secuencialmente
al ser invocado el nombre del archivo. Si éste no posee el atributo de ejecutable es preciso anteponerle sh.
➢ Variables posicionales Variables que adoptan como valores los argumentos introducidos a continuación
del nombre del guión shell en la línea de órdenes. Se nombran $1, $2,... $9. Se toma como delimitador
cualquier separador admitido por el shell (normalmente espacios).

Ejemplo: prog uno dos tres

$1 sería uno.

$2 sería dos.

$3 sería tres.

Además de $1, $2,... $9, el shell genera automáticamente las siguientes variables:

$0 Nombre del guión shell ejecutado.

$* Conjunto de todos los argumentos (una sola variable).

$# Número de argumentos introducidos.

$? Código de retorno o error generado por la última orden ejecutada.

$$ Número de identificación de proceso (PID).

U.T. 11-12: PROGRAMACIÓN SHELL: VARIABLES Y GUIONES SHELL. Página 3


C.F. ADMINISTRACIÓN DE SISTEMAS INFORMÁTICOS EN RED
IMPLANTACIÓN DE SISTEMAS OPERATIVOS

$! Número PID del último proceso background invocado por el shell.

➢ shift Desplaza un lugar los valores de los parámetros posicionales. El valor de $9 pasa a $8, el de $8 a
$7,... el de $2 a $1 y el de $1 se pierde.
➢ read Permite la introducción de valores en un guión shell. Debe indicarse la variable en la que será
almacenado el valor introducido. Ejemplo: read varx

Pueden introducirse varios valores en una sola línea read separando las variables con espacios (u otro
delimitador). Ejemplo: read varx vary varz

La introducción de valores se hará también en una solo línea y su número debe coincidir con el de variables
consignadas.

➢ expr Utilidad de cálculo aritmético entero. Admite las siguientes operaciones básicas:

+ Suma Ejemplo: expr 3 + 2

- Resta Ejemplo: expr 5 - 2

* Producto Ejemplo: expr 6 \* 4

/ División entera Ejemplo: expr 12 / 3

% Residuo Ejemplo: expr 17 % 5

El carácter * es especial, por lo que debe ir precedido por \ para evitar su interpretación por el shell.

El residuo a % b es el resto de dividir a entre b.

Sólo se admiten valores enteros naturales. Los decimales se eliminan (sin redondeo).

Los operadores deben ir separados de los argumentos por espacios. Pueden incluirse varios argumentos y
operadores en una línea.

El orden de prioridad de las operaciones es %, * /, + -.

El resultado de una operación con expr puede asignarse a una variable, pero deben utilizarse los acentos
graves para ejecutar la expresión antes de la asignación. Ejemplo: x=`expr 3 + 5`

También pueden utilizarse variables en los cálculos. Ejemplo: expr $x + 1

Una expresión expr puede contener otras expresiones expr pero deben ir delimitadas por acentos graves
para poder utilizar su resultado parcial en la expresión general.

U.T. 11-12: PROGRAMACIÓN SHELL: VARIABLES Y GUIONES SHELL. Página 4


C.F. ADMINISTRACIÓN DE SISTEMAS INFORMÁTICOS EN RED
IMPLANTACIÓN DE SISTEMAS OPERATIVOS

Ejemplo: expr `expr $x + $y` / `expr $a + $b`

OBSERVACIONES

a) En la asignación de valores a variables (A=7) no debe haber espacios junto al signo igual. Para incluir
espacios hay que encerrar el valor entre comillas.

Las variables exportadas se transmiten a los subshell que se creen a partir del actual pero no a los
anteriores.

Toda variable creada en un guión shell es local y restringida exclusivamente a la ejecución de dicho guión, a
no ser que se exporte explícitamente.

Una variable reasignada en un subshell (y por tanto en un guión shell) recupera su valor inicial al regresar al
shell original.

Al ejecutar un guión shell, se crea un nuevo subshell que “muere” al acabar la ejecución. Por tanto, no
tienen validez las variables del shell inicial no exportadas.

Para salir de un subshell y regresar al que lo engendró se ejecuta la orden exit o se pulsa [Ctrl + d].

Se pueden ejecutar guiones o programas en el shell actual precediendo el nombre de invocación por un
punto (.) y separándolo por un espacio (órdenes punto u órdenes dot). En estos casos las modificaciones del
entorno (reasignaciones de variables, etc.) permanecen activas tras la ejecución. Por ejemplo: . prog.

b) Unix interpreta toda “palabra” que empieza por $ como una variable y la sustituye por su “valor”. Si una
variable no va seguida de un separador (normalmente un espacio) es preciso encerrarla entre llaves {}. La
expresión $Bola representa el valor de la variable Bola; en cambio, la expresión ${B}ola representa el valor
de la variable B seguido (sin espacios) de la cadena “ola”.

Para que un carácter especial no sea interpretado por el shell, debe ir entre comillas simples ('), comillas
dobles (“) o precedido por la barra invertida (\). Las comillas simples impiden al shell interpretar ningún
carácter. Las comillas dobles permiten al shell interpretar el signo $, por lo que provocan la sustitución de
variables por su valor. La barra invertida inhibe de interpretación sólo al carácter siguiente.

Las expresiones incluidas entre acentos graves (`) son “ejecutadas” previamente. Por tanto, deben ser
órdenes o expresiones ejecutables y no literales. El shell sustituye su resultado en la línea de órdenes antes de
interpretar el resto de la línea. No deben confundirse con las comillas simples.

c) Una operación que deseemos que se efectúe previamente no debemos encerrarla entre paréntesis sino
entre acentos graves y evaluarla con expr.

U.T. 11-12: PROGRAMACIÓN SHELL: VARIABLES Y GUIONES SHELL. Página 5


C.F. ADMINISTRACIÓN DE SISTEMAS INFORMÁTICOS EN RED
IMPLANTACIÓN DE SISTEMAS OPERATIVOS

Ejemplos: 3*(5+2) --> expr 3 \* `expr 5 + 2`

(3+2)*(5+1) --> expr `expr 3 + 2` \* `expr 5 + 1`

32/(5+3) --> expr 32 / `expr 5 + 3`

x=x+1 --> x=`expr $x + 1`

La orden expr sólo admite aritmética entera. Unix proporciona otras utilidades para el cálculo numérico,
como dc, bc y awk.

La utilidad dc emplea notación polaca inversa, en la que primero se indican los argumentos y luego la
operación.

La utilidad bc emplea la notación habitual e incorpora funciones como raíz cuadrada (sqrt), exponenciación
(^), valor de escala (v) para fijar el número de decimales, cambios de base, utilización de librerías, etc.

La utilidad awk es muy amplia y flexible. Su estudio merece una dedicación específica.

Se puede obtener más información con las órdenes man dc, man bc y man awk.

d) La sintaxis general de un programa o guión shell es la siguiente: sh nombreprog argumentos

Si el guión shell (nombreprog) posee el atributo de ejecutable se puede omitir sh.

Los argumentos deben delimitarse por separadores admitidos por el shell (espacios o tabuladores). Si uno
de los argumentos debe incluir algún separador, ha de ir entre comillas.

Para poder ejecutar un guión shell “prog” hay tres métodos:

 sh progr

 sh < progr

 añadir el atributo de ejecutable con chmod u+x progr o chmod 711 progr)

Un programa o guión shell ejecutable pasa a ser una orden más del sistema y puede ser utilizada desde
la línea de órdenes o desde otros guiones shell, formar parte de expresiones, etc.

➢ La orden shift provoca un desplazamiento de los valores de las variables posicionales; $8 pasa a ser $9, $7
pasa a ser $8 y así sucesivamente. La última variable $9 toma el valor siguiente (si existe) al adoptado
anteriormente de los consignados como argumentos. La variable $1 pierde su valor anterior (que
desaparece) y adopta el de $2. Sin embargo, $0 permanece invariable; su contenido es la propia orden o

U.T. 11-12: PROGRAMACIÓN SHELL: VARIABLES Y GUIONES SHELL. Página 6


C.F. ADMINISTRACIÓN DE SISTEMAS INFORMÁTICOS EN RED
IMPLANTACIÓN DE SISTEMAS OPERATIVOS

nombre del guión. La variable $# contiene el número de argumentos introducidos. También puede ser
utilizada.

➢ Se pueden incluir comentarios en un guión shell iniciando la línea con el símbolo #. Esto provoca que se
ignore todo el contenido de la línea, por lo que se puede incluir en ella todo tipo de caracteres, incluso los
especiales.

Es conveniente y recomendable incluir comentarios en los guiones shell para facilitar su futura
comprensión, mantenimiento, modificación, etc. La documentación interna de los programas son un
práctica esencial de cualquier programador.

U.T. 11-12: PROGRAMACIÓN SHELL: VARIABLES Y GUIONES SHELL. Página 7

También podría gustarte