Programación en Bash Linux VI: Utilerias [test, select]

Ya sabemos un poco mas de programación sobre shell en linux, y como la profesora nos quiere poner en aprietos nos ha pedido realizar un script el cual muestre un menú con 6 opciones.

  1. Ver archivo
  2. Borrar Archivo
  3. Renombrar Archivo
  4. Ver directorio
  5. Borrar directorio
  6. Salir

Así que ponemos manos a la obra y lo empezamos a programar. Primero que nada, queremos tras realizada una operación nos siga mostrando el menú a menos que selecciones la opción 6 que es salir, para ello haremos uso de la instrucción select. select nos permite hacer menús de forma sencilla, y como ya sabemos como utilizar el case ya tenemos la mitad del script hecho.

#!/bin/bash
OPCIONES="VerArchivo BorrarArchivo RenombrarArchivo VerDirectorio BorrarDirectorio Salir"
select opt in $OPCIONES; do
	case $opt in
		"VerArchivo")
			echo "1"
		"BorrarArchivo")
			echo "2"
			;;
		"RenombrarArchivo")
			echo "3"
			;;
		"VerDirectorio")
			echo "4"
			;;
		"BorrarDirectorio")
			echo "5"
			;;
		"Salir")
			echo "Byb Bye"
			exit 0
			;;
	esac
done

El menu ya lo tenemos hecho, asi que al ejecutarlo nos muestra lo siguiente:

1) VerArchivo	     3) RenombrarArchivo  5) BorrarDirectorio
2) BorrarArchivo     4) VerDirectorio	  6) Salir
#? 1
1

Ahora lo que tenemos que hacer es programar las acciones que tenemos para cada opción y para hacerlo haremos uso de la instrucción test que nos permite evaluar expresiones retornando falso o verdadero según sea el caso.

Así que si por ejemplo quisiéramos saber si un archivo existe haríamos lo siguiente:

if test -e $FILE; then
	echo "El archivo $FILE si existe."
else
	echo "El archivo $FILE no existe."
fi

La sintaxis de la instrucción test es “test EXPRESION” y podemos hacer uso de los operadores que ya antes mencionamos, así como un par mas de estos que aplican a archivos.

  • -e FILE: True existe archivo
  • -b FILE: True si existe archivo y es un dispositivo de Bloque
  • -c FILE: True si existe archivo y es un dispositivo de Caracteres
  • -d FILE: True si existe el archivo y es un directorio
  • -r FILE: True si existe el archivo y tengo permisos de lectura
  • -w FILE: True si existe el archivo y tengo permisos de escritura
  • -x FILE: True si existe el archivo y tengo permisos de ejecución
  • -s FILE: True si existe el archivo y no esta vacío.

Asi que para la primera opción (Ver archivo) la parte del script sería:

read -p "Archivo: " FILE
if test -e $FILE; then
	if test -f $FILE; then
		cat $FILE
	else
		echo "No es un archivo."
	fi
else
	echo "El archivo no existe."
fi

La parte referente a Borrar Archivo quedaría así:

read -p "Archivo: " FILE
if test -e $FILE; then
	if test -f $FILE; then
		if test -r $FILE -a -w $FILE; then
			rm $FILE
			echo "Archivo borrado satisfactoriamente."
		else
			echo "Permisos insuficientes para borrarlo."
		fi
	else
		echo "No es un archivo."
	fi
else
	echo "El archivo no existe."
fi

Renombrar Archivo:

read -p "Archivo: " FILE
if test -e $FILE; then
	if test -f $FILE; then
		if test -r $FILE -a -w $FILE; then
			read -p "Nuevo Nombre: " NFILE
			mv $FILE $NFILE
		else
			echo "Permisos insuficientes para renombrarlo."
		fi
	else
		echo "No es un archivo."
	fi
else
	echo "El archivo no existe."
fi

Para ver directorio (usando ls):

read -p "Archivo: " DIR
if test -e $DIR; then
	if test -d $DIR; then
		if test -r $DIR; then
			ls -l $DIR
		else
			echo "No tiene permisos para ver el directorio."
		fi
	else
		echo "No es un directorio."
	fi
else
	echo "El archivo no existe."
fi

Y por último, para borra un directorio completo (rm -R de forma recursiva).

read -p "Archivo: " DIR
if test -e $DIR; then
	if test -d $DIR; then
		if test -r $DIR -a -w $DIR; then
			rm -R $DIR
			echo "Directorio borrado satisfactoriamente."
		else
			echo "No tiene permisos para ver el directorio."
		fi
	else
		echo "No es un directorio."
	fi
else
	echo "El archivo no existe."
fi

Así que como pueden ver, podemos darles el uso que queramos, y veremos un poco después que el uso de expresiones regulares nos brinda nuevas posibilidades en nuestros scripts.

El script completo aquí: script06

Post a Comment

Your email is never shared. Required fields are marked *

*
*