Scripts sencillos

Estos scripts son muy sencillos de programar y se resuelven de forma rápida, pongo la solución bajo cada enunciado.

 

1.- Crear un script que imprima el directorio (path) desde el cual el usuario lo ha ejecutado.

#!/bin/bash

#-------------------------------------------------------#
#              Present Working Directory                #
#-------------------------------------------------------#

echo "El directorio en el que usted está trabajando es: "
echo $PWD
exit 0
	

Para obtener un fichero con el código haga clic aquí.

 

2.- Escribir un script que reciba uno o más nombres de directorios como argumentos.

Para cada directorio, lo creará (no pasa nada si ya existe) y creará dentro de cada directorio un fichero llamado El Quijote.txt que contiene el texto justificado a 80 caracteres correspondiente al primer párrafo de “El Quijote”. No se puede usar el comando cp, ni que el script dependa de ningún fichero externo (debe ser autocontenido).

#!/bin/bash

#---------------------------------------------------#
#                     EL QUIJOTE                    #
#---------------------------------------------------#

quijote="En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivía
 un hidalgo de los de lanza en astillero, adarga antigua, rocín flaco y galgo corredor. Una olla 
 de algo más vaca que carnero, salpicón las más noches, duelos y quebrantos los sábados, lentejas 
 los viernes, algún palomino de añadidura los domingos, consumían las tres partes de su hacienda. 
 El resto della concluían sayo de velarte, calzas de velludo para las fiestas con sus pantuflos 
 de lo mismo, los días de entre semana se honraba con su vellori de lo más fino. Tenía en su casa 
 una ama que pasaba de los cuarenta, y una sobrina que no llegaba a los veinte, y un mozo de campo 
 y plaza, que así ensillaba el rocín como tomaba la podadera. Frisaba la edad de nuestro hidalgo con 
 los cincuenta años, era de complexión recia, seco de carnes, enjuto de rostro; gran madrugador y 
 amigo de la caza. Quieren decir que tenía el sobrenombre de Quijada o Quesada (que en esto hay alguna 
 diferencia en los autores que deste caso escriben), aunque por conjeturas verosímiles se deja entender
 que se llama Quijana; pero esto importa poco a nuestro cuento; basta que en la narración dél no se 
 salga un punto de la verdad."

for i in $@; do
	mkdir "$i"
	echo "$quijote" | fmt --width=80 > "$i"El_Quijote.txt
done

exit 0
	

Para obtener un fichero con el código haga clic aquí.

 

3.- Programar un script que imprima dos líneas, una indicando el número de directorios y otra indicando el número de ficheros que se observan en el primer nivel del directorio actual (sin recursividad), con el siguiente formato:

$ ./3.sh
Directorios: 0
Ficheros: 5

#!/bin/bash

#----------------------------------------------------------#
#           CONTADOR DE DIRECTORIOS Y FICHEROS             #
#----------------------------------------------------------#

numero=`ls -l | wc -l`
direc=`ls -lF | grep / | wc -l`
temp=`expr $numero "-" $direc`
fich=`expr $temp "-" 1`

echo "Directorios: $direc"
echo "Ficheros: $fich"

exit 0
	

Para obtener un fichero con el código haga clic aquí.

 

4.- Mejorar el script anterior para que reciba como argumento el directorio donde se deben contar los directorios o ficheros, y en caso de no recibir argumento, hacerlo del directorio actual. En caso de que se especifique un argumento, debe comprobarse que este es un directorio; en caso contrario, el programa debe abortar y proporcionar un mensaje de error.

Para el mensaje de error, se recomienda crear una función llamada “die” que reciba un argumento (el mensaje de error a imprimir, que debe salir por la salida estándar de error) y devuelva un código de error (como valor de retorno).

#!/bin/bash

#---------------------------------------------------------------------#
#           CONTADOR DE DIRECTORIOS Y FICHEROS (MEJORADO)             #
#---------------------------------------------------------------------#

#Defino antes la función "die" para gestionar errores
function die()
	{
	#Saco por pantalla el mensaje de error
	echo "$1"
	exit 1
	}

if [ $# -eq 0 ]; then

	#Ejecuto las mismas sentencias que en el tercer script
	numero=`ls -l | wc -l`
	direc=`ls -lF | grep / | wc -l`
	temp=`expr $numero "-" $direc`
	fich=`expr $temp "-" 1`
	
	#Saco por pantalla resultados
	echo "Directorios: $direc"
	echo "Ficheros: $fich"
	exit 0

else
	
	#Analizo el argumento para saber si es un directorio
	ls $1 > /dev/null 2> /dev/null
	
	if [ $? -eq 0 ]; then
		
		numero=`ls -l $1 | wc -l`
		direc=`ls -lF $1 | grep / | wc -l`
		temp=`expr $numero "-" $direc`
		fich=`expr $temp "-" 1`
		
		#Saco por pantalla resultados
		echo "Directorios: $direc"
		echo "Ficheros: $fich"
		exit 0

	else
		
		#Llamo a la función die con el mesaje de error.
		die "ERROR: El argumento introducido no es un directorio."
	
	fi
	
fi

exit 0

Para obtener un fichero con el código haga clic aquí.

Los enunciados (sin las soluciones) en formato pdf están aquí.

vidalmb_admin – Jue, 30/03/2006 – 18:32