Escolar Documentos
Profissional Documentos
Cultura Documentos
PRCTICA 4
Contenido
1.1 INTRODUCCION
1. 2. SHELL SCRIPTS
1.2.1 Argumentos en shell scripts
1.3 LAS COMILLAS
1.4 VARIABLES
1.4.1 Variables y comillas
1.4.2 Ambito de las variables
1.4.3 El entorno del shell
1.5 CONTROL DEL FLUJO (I)
1.5.1 Bucles con la sentencia for
1.5.2 Ejecucin condicional con la sentencia if
1.5.3 Las rdenes test y expr
1.6 EL FICHERO PROFILE
Introduccion
1.1 INTRODUCCION
El shell o intrprete de rdenes de UNIX es un programa ejecutable (como
cualquier otro programa de usuario) que se encuentra disponible en cualquier entorno
UNIX y cuyo cometido es leer rdenes para el sistema operativo, analizarlas y realizar
las llamadas al sistema que sean necesarias para ejecutarlas.
Este intrprete define, al igual que ocurre con cualquier otro intrprete o traductor,
un lenguaje de programacin que posee caractersticas como:
Variables.
Manejo de seales.
Las lineas que comienzan por el carcter # son comentarios. La ejecucin de dicho
fichero puede realizarse de tres formas distintas:
En este ltimo caso, el shell detecta que se trata de un shell script y, al igual que
en los casos anteriores crea otro shell para que lo ejecute.
Las comillas dobles son muy semejantes a las comillas simples y tambin evitan la
interpretacin excepto s se da el caso del metacarcter $, que sirve para
referenciar variables. Su uso se ilustrar cuando se introduzcan las variables.
Las comillas inversas ` ` son muy diferentes a las comillas simples y dobles y permiten
que la salida de la orden que delimitan pueda utilizarse como argumento de otra
orden:
$
$
$
$
$
echo date
echo date
echo date
argumentos date
argumentos date
1.4 VARIABLES
El shell, como cualquier otro intrprete, permite la utilizacin de variables que en este
caso son siempre alfanumricas.
Creacin y modificacin de variables: Una variable se crea asignndole una cadena
de caracteres mediante el operador =. Este operador tambin permite modificar su
valor:
$ RUTA1=/bin
$ RUTA2=/usr/bin
$ yo=pepe
echo $RUTA1
echo $RUTA1 $yo
RUTAS=$RUTA1:$RUTA2/$yo
echo $RUTAS
Las comillas dobles permiten que el operador $ sea interpretado al asignar una variable:
$
$
$
$
echo
echo
echo
diff
rutas: - $RUTAS
rutas: - $RUTAS
"echo $RUTAS" > rutas2
rutas rutas2
Las comillas inversas permiten asignar una variable con la salida de una orden:
$ hoy=date
$ echo $hoy
echo $RUTAS
sh
ps
echo $RUTAS
exit
ps
echo $RUTAS
Para ejecutar un shell script debe crearse un shell hijo desde el que tampoco son
accesibles estas variables. Para comprobar este detalle ejecute el fichero rutas creado
anteriormente:
$ chmod +x rutas
$ rutas
No obstante, existe una forma de hacer accesible una variable a los procesos hijos de un
proceso shell consistente en la utilizacin de la orden interna (palabra reservada)
export:
$
$
$
$
$
$
echo $RUTAS
export RUTAS
sh
ps
echo $RUTAS
exit
$ ps
$ rutas
El shell tiene algunas variables que son de particular inters para el usuario. Cabe
destacar, entre otras, las siguientes:
# El
echo
# La
echo
# El
echo
# El
echo
Esto permite, por ejemplo, que el usuario pueda cambiar el prompt o modificar la ruta
por defecto:
$ PS1="[hostname] "
$ PATH=$PATH:$HOME/bin
$
>
>
>
>
>
for i in a b c
do
echo PROGRAMAS QUE EMPIEZAN POR /usr/bin/$i
echo --------------------------------------ls /usr/bin/$i*
done
Observe la aparicin del segundo prompt al utilizar una sentencia de control que abarca
varias lneas.
Los bucles for pueden anidarse. Por ejemplo, tal caracterstica puede ser til para escribir
un programa que cree un fichero, cuyo nombre sea numerado, que contenga 30 lneas
numeradas:
00:
01:
...
10:
11:
12:
...
28:
29:
La lista de valores de un bucle for tambin puede ser los ficheros del directorio actual.
Por ejemplo, el siguiente programa crea una copia de seguridad de cada uno de los
ficheros del directorio actual:
$ for k in *
>
>
>
>
do
cp $k $k.bak
echo Creada copia de $k
done
mkdir bak
for i in *.bak
do
mv $j bak/$j
echo Movido $i a bak/$j
done
$ cp for2 fich
$ echo $?
La sentencia exit
La sentencia exit fuerza la terminacin inmediata de un fichero de rdenes (no se
ejecutan las sentencias que siguen a exit). El estado de terminacin del fichero de
rdenes puede ser proporcionado como parmetro de exit. Utilizando exit, se
puede completar el programa copia para que proporcione un estado de terminacin
distinto de cero en el caso en que la orden no funcione correctamente:
$ vi copia
# Programa copia
if cp $1 $2 2>/dev/null
then
echo "$1 ha sido copiado a $2"
exit 0
else
echo $1 no ha sido copiado a $2
exit 1
fi
$ copia noexiste fich
...
$ echo $?
$ copia for2 fich
$ echo $?
$ vi copia
# Programa copia
if test $# -ne 2
then
echo Uso de copia: copia fl f2
echo Observe que copia necesita dos argumentos
exit 1
fi
...
$ copia f1
...
$ echo $?
La notacin [ ] es una forma abreviada de ejecutar la orden test. De acuerdo con esto, la
anterior condicin puede escribirse tambin como:
$ vi copia
# Programa copia
if [$# -ne 2]
then
echo Uso de copia: copia fl f2
echo Observe que copia necesita dos argumentos
exit 1
fi
...
Los tipos de expresiones que puede evaluar la orden test son los siguientes:
Expresiones numricas. La forma general de las expresiones es:
N <operador> M
donde N y M son interpretados como valores numricos. Los operadores que se
pueden
utilizar son:
-eq
-ne
-gt
-lt
-ge
-le
N y M son iguales.
N y M son distintos.
N es mayor que M.
N es menor que M.
N es mayor o igual que M.
N es menor o igual que M.
(eliminando
$ num1=0001
$ num2=1
$ num3= 1
$ iguales $num1 $num2
...
$ iguales $num2 $num3
Operadores 'and' y 'or'. Se pueden combinar varios operadores en una sola orden test
mediante los operadores -o y -a que representan el "o lgico" e "y lgico"
respectivamente. A continuacin se ofrece un ejemplo de utilizacin:
$ vi append
if test -w $2 -a -r $1
then cat $1 >> $2
else echo "No se puede aadir $1 a $2"
fi
...
$ append numerado a1
La orden expr permite evaluar expresiones aritmticas. Los operadores que admite
son: +, -, *, / , %. El operador * hay que "escaparlo" para que el shell no lo interprete
como el comodn.
$ expr $num2 + 3 + 4
$ expr 2 * 6