Вы находитесь на странице: 1из 10

EJERCICIOS

1) Escribir un script (while.sh) que muestre una lista de números del 1 al 10 usando un
blucle while. Hacer lo mismo, con un bucle for. (for.sh)

while.sh

for.sh

#!/bin/bash

i=0

for i in 1 2 3 4 5 6 7 8 9 10

do

echo $i

done

2) Hacer un script que muestre información sobre los parámetros del programa.
(params.sh)

#!/bin/bash

echo "A continuacion mostrarase diversa informacions sobre os paramentros


do programa"

echo "O numero de paramentros e : $#"

echo "Todolos paramentros son : $@"

3) Crear una librería (lib.sh) que contenga tres funciones para mostrar un mensaje
recibido como parámetro. A continuación se muestran los detalles de estas funciones:

a. error: muestra el mensaje en rojo negrita

b. infor: muestra el mensaje en azul negrita

c. success: muestra el mensaje en verde negrita

tupt setaf 1 = ROJO


tput setaf 2 = VERDE
tput setaf 4 = AZUL
tput bold = NEGRITA
tput sgr 0 = RESTABLECER VALOR POR DEFECTO
#!/bin/bash

echo "Como quiere mostrar el mensaje"

echo "R para rojo"

echo "A para azul"

echo "V para verde"

read op

txtrst=$(tput sgr0) # Text reset

txtylw=$(tput setaf 1) # Yellow

txtblu=$(tput setaf 4) # Blue

txtgrn=$(tput setaf 2) # Green

case "$op" in

R|r)echo echo " ${txtylw} $@ ${txtrst}."

;;

A|a) echo " ${txtblu} $@ ${txtrst}.";;

V|v) echo " ${txtgrn} $@ ${txtrst}."

;;

esac

1) Hacer un script que borre un archivo o directorio pasado como parámetro. Si el


parámetro es un directorio, se borrarán todos los archivos y directorios que contenga.
(borrar.sh)
#/!bin/bash

if [ -f $1 ]

then

`rm $1`

elif [ -d $1 ]

then

`rm -r $1`

fi

2) Hacer un script que reciba como parámetro el nombre de un archivo y muestre si existe
o no, y los permisos que el usuario que ejecuta el script tiene sobre él (permisos.sh). NOTA: se
puede saber usando la orden TEST.

#!/bin/bash

if [ $# -eq 1 ]

then

if [ -f $1 ]

then

echo "Os permisos de usuario do ficheiro son :"

if [ -w $@ ]

then

echo "Permisos de escritura"

fi

if [ -x $@ ]

then

echo "Permisos de execucion"

fi
if [ -r $@ ]

then

echo "permisos de lectura"

fi

else

echo "Non existe i e un ficheiro"

fi

else

echo " Mais de un parametro"

fi

3) Reescribir el comando “cp” (cp.sh), mostrando un error si el comando falla, o


mostrando un mensaje de éxito en otro caso (hacer uso de la librería creada en el anterior
ejercicio, lib.sh).

#Non fago uso da librería , pero se se quixese incluir pos .nome_librería na parte darriba do
script

4) Escribir un script que permita elegir entre 3 opciones: ver un listado del directorio
actual, mostrar los usuarios conectados o salir del programa.

#!/bin/bash

echo "Agora vaise mostrar un menu"

echo "1) Facer un listado do directorio particular "

echo "2) Mostrar os usuarios conectados ao sistema "

echo "3) Sair"

echo "Introduza unha opcion"

read opcion

if echo $opcion | grep -Eq '^ $' || [ "$opcion" -eq 1 ] || [ "$opcion" -eq 2 ] || [ "$opcion" -eq
3]

then

case $opcion in

1) ls ;;
2) who ;;

3) exit 0 ;;

esac

fi

5) Hacer un script que haga una copia de seguridad (tar -czf) de la carpeta personal del
usuario que ejecuta el script, y guarda el resultado en la carpeta /tmp , con el nombre de
archivo (fecha)_backup.tar.gz

#!/bin/bash

tar -czvf /tmp `date +%D`.tar.gz $HOME


Ampliación del ejercicio 8 (Para aquellos que quieran saber más sobre el tema, es totalmente
opcional):

Instalar el servidor de correo “mutt”, en caso de que no esté ya instalado. Ver el manual para el
envío de correos con ficheros adjuntos, y enviar un script que hayáis hecho a vuestro correo.

6) Escribir un script que muestre los permisos de los archivos y directorios pasados como
parámetro. Posteriormente, mostrar otro listado con el tamaño que ocupan en caso de ser
archivos (que sea legible, en KB, MB, etc.)

#!/bin/bash

if [ $# -eq 1 ]

then

if [ -f $1 ]

then

echo "Os permisos de usuario do ficheiro son :"

if [ -w $@ ]

then

echo "Permisos de escritura"

fi

if [ -x $@ ]

then

echo "Permisos de execucion"

fi
if [ -r $@ ]

then

echo "permisos de lectura"

fi

else

echo "Non existe i e un ficheiro"

fi

else

echo " Mais de un parametro"

fi

7) Escribir un programa que muestre el contenido del fichero de usuarios (situado en


/etc/passwd) o el contenido del fichero de contraseña (situado en /etc/shadow, sin permiso de
lectura, por lo que será requisito imprescindible que el script sea ejecutado por root)

Ejemplo de llamadas válidas al programa:

Mostrar fichero - tipo contraseñas

- tipo usuarios

#!/bin/bash

if [ $# -ge 2 ]

then

if [ "$1" = "-tipo" ]

then

while [ $# -ne 0 ]
do

shift

if [ "$1" = "usuarios" ]

then

cat /etc/passwd

else

if [ "$1" = "contraseña" ]

then

if [ `whoami` = "root" ]

then

cat /etc/shadow

else

echo "Error. No eres


root"

fi

fi

fi

done

fi

fi

8) Mostrar todos los archivos de tu directorio particular (y subdirectorios) que tengan


premisos de ejecución para el usuario, grupo y otros usuarios (usar grep para ello, no TEST esta
vez).

ls -l | cut -c 1-10 | grep "...x..x..x"


9) Mostrar el nombre de los archivos y directorios presentes en tu directorio particular (el
listado se debe obtener con ls –l, y formatear con algún comando de los vistos en clase) (Con
formatear eu supoño que será buscar algo aínda que tamén pode ser cambiar o formato de
saída cuxo caso se fasia con sed)

# Solución cutre xD , supoño que ten que haber outra maneira mellor de facelo xD, peo
funciona xD

ls -l | cut -c 49- | grep "a"

10) Usando como fuente el archivo /etc/passwd, mostrar:

a. Los nombres de todos los usuarios en el sistema, y guardarlos en el fichero usuarios.txt

b. Los nombres seguidos del ID (separados por una coma) de todos los usuarios.

c. Lo mismo que en el punto “a.”, pero sólo para aquellos usuarios que tengan en home su
directorio personal

d. Mostrar los nombres de todos los usuarios separados con un espacio (el salto de línea
se puede especificar con el caracter \n)

#!/bin/bash

echo "Agora vai aparecer un menu.Se ves que tal introduce unha opcion ou pulsa 3
para sair"
echo "A )Mostrar nomes de todolos usuarios do sistema e gardalos en usuarios.txt"
echo "B) Os nomes seguidos do ID (separados por unha coma ) de tódolos usuarios
"
echo "C) idem que no primeiro caso pero so para aqueles usuarios que teñan home
no seu directorio particular"
echo "D) Mostrar o nome de tódolos usuarios separados por un espacio en blanco "
read op
case $op in
A|a) cat /etc/passwd | cut -d ":" -f 1 | tee usuarios.txt ;;
B|b) cat /etc/passwd | cut -d ":" -f 1,3 --output-delimiter=",";;
C|c) cat /etc/passwd | cut -d ":" -f 6 | grep "/home/" |cat ;;
D|d) cat /etc/passwd | cut -d ":" -f 1 | paste -s | tr '/n' ' ' ;;
3) exit 0;;
*)echo "Opcion incorrecta";;
esac
11) Usando el fichero datos.txt, obtener:

a. Todas las líneas que contengan la cadena “gato”

b. Todas las líneas que contengan la palabra “atun”, con dos o más n.

c. Obtener todas las palabras que contengan la cadena “atun” (completa)

d. Obtener todas las palabras “gatas” o “atas”

12) Mostrar todos los procesos que no estén asociados a ningún terminal (procesos TTY es
“?”). Mostrar únicamente el ID del proceso, y guardarlo en un fichero de nombre procesos.txt

ps -a | cut -c 1-41 | grep “?” | cut -d “ “ -f 7

13) Mostrar un listado de todos los usuarios regulares del sistema (aquellos cuyo ID
empieza a partir de 1000), e indicar si están o no conectados.

[ cat /etc/passwd | cut -d “:” -f 3 | who ] -gt 1000

14) Escribir un scritp (chat.sh) que permita establecer una charla interna (en el mismo
servidor) de dos usuarios conectados a través de terminales. Se especificará un nombre de
usuario, el programa detectará si está o no conectado, y en caso de estarlo comenzará la
charla, enviando los mensajes a los dispositivos especiales /dev/ptsX. Usar los comandos: who,
echo, cut, grep, tr.Grado de dificultad: ALTA, os va a llevar varias horas de trabajo,
seguramente).