IES Miguel Romero Esteo - Departamento de Informática - Linux/Unix

Bash y programación en Bash / Práctica 7

Enunciado:

Ejercicio de parámetros posicionales

Comando filtro utilizado: wc

Escriba un shell script wcount.sh que produzca el resultado siguiente:

$ bash wcount.sh oso pájaro 
El nombre del script es: wcount.sh 
El argumento 1 es: oso 
El argumento 2 es: pájaro 
Todos los argumentos: oso pájaro 
Número total de argumentos: 2 
El primer argumento contiene: 3 caracteres 
El segundo argumento contiene: 6 caracteres

Ejercicio de lectura de teclado

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

Tests y aritmética

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).

Ejercicio 1: tests a los archivos

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.

Ejercicio 2: tests de cadenas de caracteres

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.

Ejercicio 3: tests numéricos

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 (( )).

Ejercicio 4: aritmética

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.

Ejercicio 5: operadores lógicos de los comandos [ ], [[ ]] y operadores lógicos del shell

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”.

Estructuras de control if, case, bucle for

Ejercicio 1: los comandos [ ] y [[ ]], la estructura de control if

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 ...

Ejercicio 2: estructura de control case, bucle for

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

Bucles

Ejercicio 1: bucle for, comando tr

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.

Ejercicio 2: bucle for, aritmética

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

Ejercicio 3: bucles for, while

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.