IES Miguel Romero Esteo - Departamento de Informática - Linux/Unix
Bash y
programación en Bash
/ Práctica 7
Enunciado:
Escriba un shell script de
nombre wcount.sh que admita
cualquier número de parámetros posicionales y que, con
ellos, genere por la salida estándar el informe de abajo
(El texto en mayúsculas y encerrado entre <>
representa valores variables. NO SON LITERALES FIJOS).
El nombre del script es: <NOMBRE DEL SCRIPT>
============ encolumnado ===================
El parámetro 1 es: <VALOR DEL PARAMETRO 1> El parámetro 2 es: <VALOR DEL PARAMETRO 2>
.
.
.
El parámetro n es: <VALOR DEL PARAMETRO n>
============ caracteres ====================
El parámetro 1 contiene: <NUMERO ENTERO> caracteres El parámetro 2 contiene: <NUMERO ENTERO> caracteres
.
.
.
El parámetro n contiene: <NUMERO ENTERO> caracteres
============ resumen ===================
Todos los parámetros: <VALOR DEL PARAMETRO 1> <VALOR DEL PARAMETRO 1> .... <VALOR DEL PARAMETRO n>
Número total de parámetros: <NUMERO ENTERO>
Número total de caracteres: <NUMERO ENTERO>
Escriba un script hello.sh que:
1. |
Solicite al usuario la introducción de su nombre y lo almacene en una variable. |
2. |
Solicite al usuario la introducción de su apellido y lo almacene en otra variable. |
3. |
Muestre un mensaje de bienvenida al usuario. |
4. |
Muestre el PID del shell que ejecuta el script. |
Ejemplo
$ hello.sh Introduzca su nombre: Cristina Introduzca sus apellidos: Perez Lopez Buenos días Cristina Perez Lopez El PID del shell es 2569
Estos ejercicios no necesitan el empleo de la estructura de control if. Solo deben emplearse los comandos [ ], [[ ]], expr, (( )) y $(( )). Muestre el estado de retorno de los comandos para saber si el comando ha retornado verdadero (0) o falso (>0).
1. |
Verifique si el archivo (o directorio) /etc existe. |
2. |
Verifique si es posible acceder al archivo /etc/hosts en lectura. |
3. |
Verifique si el archivo /etc/hosts es ejecutable. |
4. |
Verifique si el archivo /usr es un directorio y si se puede atravesar. |
5. |
Verifique si el archivo /dev/null es un archivo especial de dispositivo. |
Definir las siguientes variables:
$ s1=si $ s2=no $ vacia="" $ arch1=informe.pdf
1. |
Pruebe si $s1 es igual a $s2. |
2. |
Pruebe si $s1 es diferente de $s2. |
3. |
Pruebe si $vacia está vacía. |
4. |
Pruebe si $vacia no está vacía. |
5. |
Pruebe si $arch1 termina en .doc
|
6. |
Pruebe si $arch1 termina en .doc o en .pdf. |
Definir las variables num1 y num2 con los valores siguientes:
$ num1=2 $ num2=100
Verifique si $num1 es mayor que $num2 empleando los comandos [ ], [[ ]] y (( )).
En la línea de comandos, inicialice dos variables numéricas num1 y num2:
$ num1=3 $ num2=5
1. |
Inicialice una variable res
con la suma de num1 y num2.
Muestre res. |
2. |
Sin inicializar la variable res, muestre por pantalla la suma de dos números. Proporcione a su vez las dos soluciones. |
3. |
Inicialice une variable res con el resultado de la multiplicación de num1 y num2. Muestre res. |
Ejecute los comandos siguientes:
$ > arch $ chmod 444 arch $ ls -l arch -r--r--r-- 1 cristina perez 0 2 feb 17:23 arch
1. |
Si el archivo $arch no es ejecutable, muestre ”Permiso x no indicado”. |
2. |
Si el archivo $arch no es ni ejecutable ni accesible para escritura, muestre ”Permisos wx no indicados”. |
Comandos filtro útiles: awk.
Escriba un script compare.sh:
Número de argumentos recibidos: dos nombres de archivo ordinarios.
Verificar que el número de argumentos es igual a 2 y que los archivos son de tipo ordinario.
Si los argumentos son correctos, el script deberá decir si los dos archivos son del mismo tamaño; en caso contrario, deberá decir cuál es el mayor de los dos.
Ejemplo
$ compare.sh /etc/hosts Uso: ./compare.sh archivo1 archivo2 $ compare.sh /etc/hosts /etc/passwd El archivo /etc/passwd es el mayor de los dos. Tamaño: 1910 bytes ...
Escriba un script tipoarch.sh que tome por argumentos posicionales cadenas de caracteres que representen nombres de archivos (independientemente de que existan o no en el sistema). Si el nombre del archivo termina en .doc o .pdf (sólo minúsculas), muestre un mensaje específico. En caso contrario, muestre "Ni DOC, ni PDF". Téngase en cuenta que el nombre del archivo puede contener más de un caracter punto (.).
Ejemplo
$ tipoarch.sh f1.doc f2.pdf f3.txt f1.doc: Archivo DOC f2.pdf: Archivo PDF f3.txt: Ni DOC, ni PDF
Comandos filtro útiles: tr. Otros comandos útiles: mv.
Escriba un script may_min.sh:
Argumento opcional: un nombre de directorio. El valor por defecto será el directorio actual.
Verificar que el posible argumento es un directorio.
El script renombrará los archivos del directorio: los nombres de archivo en mayúsculas serán convertidos a minúsculas.
Comandos filtro útiles: grep, wc. Otros comandos útiles: ps.
Escribir un script proc_users.sh:
Argumentos: uno o más nombres de usuario.
Verificar el número de argumentos recibido: debe haber al menos un argumento.
Para cada usuario recibido como argumento, muestre en la pantalla el número de procesos que le pertenezcan. Si el usuario no está definido en el sistema, este será ignorado.
Ejemplos
$ proc_users.sh Uso: ./proc_users.sh user1 user2 ... usern $ proc_users.sh cristina olivier daniel El usuario cristina tiene 8 procesos en ejecución El usuario olivier no tiene procesos activos daniel no es un usuario válido
Comandos filtro útiles: grep. Otros comandos útiles: file, find.
Escriba un script consulta.sh:
Argumento opcional: un nombre de directorio. Verifique que el argumento recibido es un directorio.
Si el script no recibe un nombre de directorio, trate el directorio actual.
Busque todos los archivos ordinarios que se encuentren bajo este directorio (incluyendo subniveles).
Para cada archivo de contenido texto accesible en lectura, pregunte al usuario si desea consultar el archivo. Los archivos que no sean de texto se ignorarán.
El usuario podrá introducir ’s’, ’S’, ’si’, ’SI’ para consultar el archivo, ’n’, ’N’, ’no’,’NO’ para no consultarlo, o ’q’ para salir del script. Cualquier otra respuesta generará una nueva pregunta al usuario.
Si el usuario desea consultar el archivo, muestre el contenido paginado de este en la pantalla.
Si el usuario no desea consultar el archivo, pase al archivo siguiente.