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 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) echo "A continuacion mostrarase diversa informacions sobre os do programa" paramentros 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
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 ] `rm $1` elif [ -d $1 ] `rm -r $1` 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. if [ $# -eq 1 ] if [ -f $1 ] echo "Os permisos de usuario do cheiro son :" if [ -w $@ ] echo "Permisos de escritura" if [ -x $@ ] echo "Permisos de execucion"
if [ -r $@ ] echo "permisos de lectura" echo "Non existe i e un cheiro" echo " Mais de un parametro" 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. 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 ] 1) ls ;; case $opcion in
2) who ;; 3) exit 0 ;; esac 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 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 cheros 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.) if [ $# -eq 1 ] if [ -f $1 ] echo "Os permisos de usuario do cheiro son :" if [ -w $@ ] echo "Permisos de escritura" if [ -x $@ ] echo "Permisos de execucion"
if [ -r $@ ] echo "permisos de lectura" echo "Non existe i e un cheiro" echo " Mais de un parametro" 7) Escribir un programa que muestre el contenido del chero de usuarios (situado en /etc/passwd) o el contenido del chero 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 chero - tipo contraseñas - tipo usuarios if [ $# -ge 2 ] if [ "$1" = "-tipo" ] while [ $# -ne 0 ]
do shift if [ "$1" = "usuarios" ] cat /etc/passwd if [ "$1" = "contraseña" ] if [ `whoami` = "root" ] cat /etc/shadow root" echo "Error. No eres done 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 chero 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 especicar con el caracter \n) 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 chero 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 chero 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 especicará 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 dicultad: ALTA, os va a llevar varias horas de trabajo, seguramente).