PDF de programación - Ejemplos Shell Script

Imágen de pdf Ejemplos Shell Script

Ejemplos Shell Scriptgráfica de visualizaciones

Publicado el 20 de Octubre del 2020
781 visualizaciones desde el 20 de Octubre del 2020
153,8 KB
9 paginas
Creado hace 16a (04/10/2007)
Laboratorio de Sistemas Operativos



Ingenierías Técnicas en Informática de Sistemas y Gestión
2006/2007
__________________________________________________________________________________________


Ejemplos de guiones shell

- Ruta absoluta vs. ruta relativa



Es muy importante saber en qué directorio estamos ubicados para poder referenciar
correctamente un archivo/directorio determinado.

El comando pwd nos muestra la ruta completa del directorio donde estamos trabajando.
La variable de entorno HOME (se accede a ella con $HOME) nos proporciona el directorio de
trabajo asociado al usuario.


Supongamos que nos encontramos en el directorio /home/usuario/Practica1. Después de
ejecutar el comando ls -l obtenemos la siguiente salida. Aquí hay dos subdirectorios
denominados Practica2 y public_html.

-rwxr-xr-x 1 jcarlos users 52 2007-03-09 20:32 ejemplo1
drwxr-xr-x 4 jcarlos users 728 2007-03-26 19:08 Practica2
-rwxr-xr-x 1 jcarlos users 56 2007-03-09 20:32 progreso
-rwxr-xr-x 1 jcarlos users 106 2007-03-01 22:52 prueba1
drwxr-xr-x 2 jcarlos users 80 2007-02-24 16:30 public_html
-rw-r--r-- 1 jcarlos users 1362 2007-03-05 20:54 rr
-rw-r--r-- 1 jcarlos users 7 2007-03-10 20:16 rr2
-rw-r--r-- 2 jcarlos users 21284 2007-03-10 20:15 rr2link
lrwxrwxrwx 1 jcarlos users 3 2007-03-10 20:14 rr2slink -> rr2
-rw-r--r-- 2 jcarlos users 21284 2007-03-10 20:15 rrlink
-rw-r--r-- 1 jcarlos users 0 2007-03-05 22:53 sal


Pues bien, cualquier referencia a este subdirectorio utilizando la ruta relativa será simplemente
a través de su nombre ya que se encuentra justo debajo de donde estamos.


ls -l Practica2
cd Practica2


Si nos encontráramos en el subdirectorio public_html, entonces


ls -l ../Practica2
cd ../Practica2


Todo éstos son ejemplos de ruta relativa.

Su ruta absoluta será /home/usuario/Practica1/Practica2. Ahora:


ls -l /home/usuario/Practica1/Practica2
cd /home/usuario/Practica1/Practica2



Ejemplos Shell Script



1

Laboratorio de Sistemas Operativos



Ingenierías Técnicas en Informática de Sistemas y Gestión
2006/2007
__________________________________________________________________________________________


Con estos comandos siempre obtendremos los mismos resultados, independientemente del
directorio desde donde los lancemos.


Si esto lo aplicamos a un shell script tendremos lo siguiente:


if [ -d Practica2 ] será cierto si Practica2 es un subdirectorio del directorio donde
ejecutemos el shell script.



[

-d



if
si
/home/usuario/Practica1/Practica2 es un directorio. Aquí no importa desde dónde
lanzamos el script ya que estamos utilizando la runta absoluta.

/home/usuario/Practica1/Practica2

cierto

será

]

echo $1 es un directorio

echo $1 no es un directorio

#!/bin/bash

if [ -d $1 ]
then

else

fi



Si estamos en el directorio /home/usuario/Practica1 y lanzamos el script ejemplo1 cuyo
código es el siguiente:



Aquí $1 representa el valor del primer argumento introducido al ejecutar lo siguiente:



Dentro del script anterior $1 será sustituido por el valor Practica2. Como Practica2 sí que es un
subdirectorio del directorio donde hemos lanzado el script, la salida será cierta.

Pero una ejecución como . ejemplo1 /home/usuario/Practica1/Practica2 también será cierta,
ya que ahora $1 será sustituido por el valor /home/usuario/Practica1/Practica2 que,
evidentemente, es un directorio.

. ejemplo1 Practica2

Supongamos ahora que el directorio de trabajo por defecto del usuario (directorio al que se
conecta el usuario) es /home/usuario. $HOME tendrá pues, el valor /home/usuario. Entonces:

if [ -d $HOME/Practica1 ] será cierta.



[

-d $HOME/Practica2

if
/home/usuario/Practica2

]



será

falsa pues no existe el directorio


Ejemplos Shell Script



2

Laboratorio de Sistemas Operativos



Ingenierías Técnicas en Informática de Sistemas y Gestión
2006/2007
__________________________________________________________________________________________


if [ -d $HOME/Practica1/Practica2 ] será cierta.

- Bucle for



En shell script esta instrucción de control es bastante elaborada. Su sintaxis general es:



for variable in lista
do


done

órdenes
...

Aquí lista puede ser algo tan variado como un conjunto de cadenas de caracteres, el conjunto
de archivos de directorio o la salida de un comando.

Ejemplos:

for i in 1 Ana Juan 58

El bucle se repetirá 4 veces. La variable i (acceso con $i) tomará en cada iteración,
respectivamente, los valores 1, Ana, Juan y 58.

for i in *



Aquí * representa todos los archivos del directorio donde ejecutemos el script. Probar si
no, a ejecutar desde el prompt el comando ls *.

Por tanto la variable i (acceso con $i) irá tomando sucesivamente como valor el nombre
de cada archivo del directorio.



for i in Practica2/*

Hará lo mismo que el ejemplo anterior, pero ahora con los archivos del subdirectorio
Practica2 (recuérdese la ruta relativa). Este ejemplo solamente funcionará si lanzamos
el script desde /home/usuario/Practica1.

for i in $HOME



Lo mismo pero con el directorio /home/usuario

Compliquemos un poco el asunto. En el bucle for, lista también puede ser un comando.
Pero este comando debe estar encerrado entre acentos graves.


Ejemplos Shell Script



3







Laboratorio de Sistemas Operativos



Ingenierías Técnicas en Informática de Sistemas y Gestión
2006/2007
__________________________________________________________________________________________


for i in `ls -R`

Ahora se recorrerán recursivamente todos los archivos que cuelgan del directorio desde
donde ejecutamos el script.

Alternativamente podemos obtener el mismo resultado con las siguientes líneas:

A=`ls -R`
for i in $A

Sin embargo, debe tenerse en cuenta qué valores toma la variable i en todos estos
casos. La orden `ls` obtiene los nombres de un cierto grupo de archivos. Si lo que
pretendemos en procesar dichos nombres, esta orden nos servirá. En cambio, una
orden como `ls –l` no nos será de utilidad, ya que se procesarán también los grupos
de archivos, usuarios, fecha, hora, etc. Es decir, la variable i del bucle for, irá tomando
sucesivamente valores como los grupos de archivos, usuarios, etc.

rwxr-xr-x, 1, jcarlos, users, 52, 2007-03-09, 20:32, ejemplo1, drwxr-
xr-x, 4, etc

- Asignación de valores a variables

Hemos visto que en shell script no hay tipos de variables. Éstas son asignadas en el momento
que se definen:

A=1
B=Ana

Pero también podemos asignarlas con el valor de la salida de un comando:

A=`comando`
A=$(comando)

A=`ls | wc -w` En este caso A tomará como valor el número de archivos del directorio
actual

A=$(ls | wc -w) Lo mismo que en el caso anterior



Como la asignación de variables es alfanumérica, podemos componer cualquier variable a
nuestra conveniencia sin más que concatenar variables:

A=Ana
B=Practica1
C=$A/$B toma el valor Ana/Practica1


Ejemplos Shell Script



4

Laboratorio de Sistemas Operativos



Ingenierías Técnicas en Informática de Sistemas y Gestión
2006/2007
__________________________________________________________________________________________


Esto puede ser muy útil para crear archivos o directorios que puedan ser identificados
fácilmente por algún criterio determinado. Por ejemplo, nos podría interesar ir guardando
sucesivas versiones de un cierto archivo del tal manera que se identifique el número de la
versión.

Supongamos que nuestro archivo es un programa denominado movcontables.c y que como
máximo hay 9 versiones. La n-enésima versión se denominará movcontables.c.n

Procederemos como sigue:


Introduciremos como argumento el valor movcontables.c.


 Lo primero que hará el script es comprobar si existe el archivo movcontables.c. Si no

existe, el script presentará un mensaje acorde con el hecho y terminará.

 En el caso de que exista, contamos el número de versiones existentes del archivo. Esto
lo hacemos con el comando ls $1* | wc -w. El valor resultante se lo asignamos a la
variable A.

 A continuación incrementamos el valor de A. Como hemos dicho previamente, las
variables son alfanuméricas. Para poder operar con ellas de forma numérica hacemos
uso del operador expr y encerrado entre acentos graves. El resultado es asignado a la
variable Num mediante la orden Num=`expr $A + 1`

 Posteriormente componemos la variable Version añadiendo al nombre del archivo

original una nueva extensión con el valor de la nueva versión: Version=$1.$Num

 Copiamos el archivo movcontables.c
 Finalmente creamos el archivo movcontables.c vacío y listo para ser codificado de

nuevo.

#!/bin/bash



echo $1 no existe

A=$(ls $1* | wc -w)

echo Se ha superado el número máximo de versiones

if [ ! -f “$1” ]
then

else



fi

if [ $A -ge 9 ]
then

else



fi

Num=`expr $A + 1`
Version=$1.$Num
cp $1 $Version



Ejemplos Shell Script



5

Laboratorio de Sistemas Operativos



Ingenierías Técnicas en Informática de Sistemas y Gestión
2006/2007
__________________________________________________________________________________________

1. Guión shell que copia todos los archivos de trabajo con extensión .dat y .c del directorio actual al

directorio pasado como argumento. Si est
  • Links de descarga
http://lwp-l.com/pdf18380

Comentarios de: Ejemplos Shell Script (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad