Scripts BASH ejercicios


Ejercicios de Scripts


A tener en cuenta:


LESS (nombre fichero):
Nos muestra el contenido de un fichero en su totalidad

MORE (nombre fichero):
Nos muestra el contenido del fichero paginándolo

Para salir de estos comandos WQ

Less (fichero) | head –n 5  nos muestra las primeras 5 lineas
Less (fichero)| tail –n 5 nos muestra las ultimas 5 lineas
Less (fichero) |grep (palabra) muestra las líneas donde se encuentra esta palabra






Para utilizar número utilizamos:

-eq
=
-me
¡=
-lt
-gt
-le
<=
-ge
>=


Para utilizar ficheros:

-a
Si existe
-d
Existe es un directorio
-f
Existe es un fichero
-r
Es de lectura
-w
Es de escritura
-x
Es ejecutable

Para dar permiso de ejecución utilizamos el comando CHMOD
Ejemplo

Chmod u +x expresión-logica.sh

U= permiso a usuario
+= agregar
X= ejecutable

Así podemos ejecutar el fichero sin utilizar el bash inicial.



CASE se suele utilizar para menus cuando hay varias opciones.

Sintaxis:

Case $variable in
Valor1)
Se ejecuta si variable tiene valor 1
;;
Valor2)
Se ejecuta si variable tiene valor 2
;;
*)Se ejecuta su variable no tiene ninguno de los valores anteriores

ESAC



Expresiones lógicas

If  [Expresion]; Then
Realiza expresión si es verdadera
FI   Cierra la estructura

If [Expresion]; Then
    Realiza expresión si es verdadera
Else
    Realiza expresión si es falsa
FI
-n  utilizamos para variables si no es nula
-z  Utilizamos para variables nulo, vacia o no definida

Cuando hay más de dos opciones utilizamos  ELIF

If  [Expresion]; Then
Realiza expresión si es verdadera
elif  [Expresion]; Then
Realiza expresión si es verdadera
elif  [Expresion]; Then
    Realiza expresión si es verdadera
Else
    Realiza expresión si es falsa
FI


-------------------------------------------------------
#!/bin/bash
#primer programa
Echo Hola mundo

Guardamos con extensión .SH    - primer-programa.sh

Nos vamos al terminal y ejecutamos
bash primer-programa.sh

------------------------------------------------------------
#!/bin/bash
#Movimiento de fichero de una ruta a otra

Mv /home/asir/ASO/TEMA1/ejercicios/tema1   /home/asir/SRI/TEMA1/DHCP/ejercicios

Echo Contenido de la carpeta ASO/TEMA1/ejercicios/
Ls /home/asir/ASO/TEMA1/ejercicios/tema1

Echo Contenido de la carpeta destino  /SRI/TEMA1/DHCP/ejercicios
Ls /home/asir/SRI/TEMA1/DHCP/ejercicios

Guardamos como movimiento-fichero.sh
Ejecutamos.

------------------------------------------------------------
#!bin/bash
#Muestra nombre y apellidos por parámetros
Echo Hola $1, tienes $2 años

Guardamos como parámetros.sh
Desde terminal ejecutamos
Bash parámetros.sh Jhon 35

-------------------------------------------------------------
Fichero que solicita nombre y edad por pantalla
#!bin/bash
#Muestra nombre y apellidos por parámetros
Echo “Introduzca su nombre”
Read nombre
Echo “introduzca su edad”
Read edad

Echo “Hola eres” $nombre “ y tienes” $edad “años”

Guardamos como introduce-parametros.sh
Desde terminal ejecutamos
Bash inbtroduce-parámetros.sh Jhon 35

Aquí el introduzca su nombre hace un salto de línea para introducir el nombre, si queremos que se haga en la misma línea ponemos   -n

Echo –n: Nos deja poner el nombre y la edad en la misma linea

-------------------------------------------------------------
#!bin/bash
#Muestra nombre y apellidos por parámetros
Echo  -n “Introduzca su nombre: ”
Read nombre
Echo -n  “introduzca su edad: ”
Read edad

Echo “Hola eres” $nombre “ y tienes” $edad “años”

READ –P:  nos muestra todo con una sola línea de comando eliminamos el echo
-------------------------------------------------------------
#!bin/bash
#Muestra nombre y apellidos por variable

read –p  “Introduzca su nombre: “ nombre
read -p  “introduzca su edad: ” edad

Echo “Hola eres” $nombre “ y tienes” $edad “años”

Introducimos nombre y año de nacimiento, que muestre el nombre y la edad.

-------------------------------------------------------------
#!bin/bash
#Muestra nombre y apellidos por parámetros
Actual=2011

Echo Te llamas $1 y tienes $(expr $actual - $2) años.

Ejecutamos parametros1.sh jhon 1976

-------------------------------------------------------------
#!bin/bash
#Pasando por parámetro, especificamos fichero y donde moverlo
Echo Movemos el fichero $1 a la carpeta $2
Mv  $1 $2
Echo nos muestra el contenido del fichero
Ls $2

---------------------------------------------------------------
#!/bind/bash
#programa que compara el nombre y nos da mensaje si somo o no

Name=jhon
Echo –n “introduce tu nombre:  “
Read nombre

If [ $nombre = $name ]; then
Echo “Hola, eres” $nombre
Else
Echo “Hola, Tu no eres” $name
fi

guardamos como parámetros.sh
Ejecutamos bash parámetros.sh

----------------------------------------------------------------
Creamos script  con parámetros
#!/bind/bash
#programa que compara el nombre y nos da mensaje si somo o no

Name=jhon

If [ $1 = $name ]; then
Echo “Hola, eres” $1 buenos dias
Else
Echo “Hola, Tu no eres” $name
fi

guardamos como parámetros1.sh
Ejecutamos bash parámetros1.sh jhon

-----------------------------------------------------------------
#!/bind/bash
#programa que compara el año de nacimiento

Anho=1976
Read  –p “introduce tu naño de nacimiento:  “ anio

If [ $anio -eq $anho ]; then
Echo “Hola, naciste ” $anho
Else
Echo “Hola, Tu no naciste ” $anho
fi

Guardamos como parámetros2.sh
Ejecutamos bash parámetros2.sh

----------------------------------------------------------
#!/bind/bash
#pasados 2 valores por parametro, indique cual de lo dos es mayor o si son iguales

read -p "introduce un valor: " num1
read -p "Introduce valor a comparar: " num2

if [ $num1 -lt $num2 ]; then
echo $num2 " Es mayor que " $num1

elif [ $num1 -eq $num2 ]; then
echo $num1 " Es igual a " $num2

else
echo $num2 " Es menor que " $num1

fi
--------------------------------------------------------
#!/bind/bash
#Mirar si el directorio pasado por parametro ya existe si es si, que muestre un mensaje. Si es no lo debe crear y decir que lo ha creado

read -p "introduce un directorio: " dir1
if [ -a $dir1 ]; then
echo " El directorio existe "
ls

else
echo "El directorio no existe"
mkdir $dir1
echo "Se ha creado el directorio " $dir1
ls
fi

-----------------------------------------------------
#!/bind/bash
#Nos pide la edad y nos dice si es mayor de edad o menor

read -p "introduce tu edad: " edad
if [ $edad -lt 18 ]; then
echo " Eres menor de edad "

elif [ $edad -gt 18 ]; then
echo "Eres mayor de edad"

else
echo "Eres mayor de edad"

fi
-----------------------------------------------------------
#!/bind/bash
#Script que mire si el fichero por parametro, existe. si existe mostrar mensaje con el nombre del fichero. Si no existe crearlo y decir que lo ha creado con el nombre quese ha puesto.

if [ -a $1 ]; then
echo "El fichero existe se llama "$1

else
touch $1
echo "Se ha creado el fichero con el nombre "$1
fi
----------------------------------------------------------
#!/bind/bash
#Script que mire si el fichero pedido, existe. si existe mostrar mensaje con el nombre del fichero. Si no existe crearlo y decir que lo ha creado con el nombre quese ha puesto.

read -p "Introduzca ruta del fichero: " f1

if [ -a $f1 ]; then
echo "El fichero existe se llama "$f1

else
touch $f1
echo "Se ha creado el fichero con el nombre "$f1
fi
----------------------------------------------------------

#!/bind/bash
#Script que reciba un nombre de fichero, verifique que existe y que es un fichero comun (lectura-escritura) lo convierta en ejecutable para el usuario y el grupo y muestre el estado final de los permisos.

if [ -f $1 ]; then
echo "El parametro introducido es un fichero"
ls -l $1

    if [ -r $1 ];then
    echo " Tiene permisos de Lectura"

        if [ -w $1 ];then
        echo "Tiene permisos de escritura "
        chmod ug+x $1
        ls -l $1
      
        else
        echo "No es un fichero comun"
        fi

    else
    echo "No es un fichero comun"

    fi

else
echo "El fichero no existe "
fi

------------------------------------------------------------
#!/bind/bash
#Script que reciba un nombre de fichero, verifique que existe y que es un fichero comun (lectura-escritura) lo convierta en ejecutable para el usuario y el grupo y muestre el estado final de los permisos.

if [ -f $1 ]; then
echo "El parametro introducido es un fichero"
more $1

elif [ -d $1 ]; then
cd $1
ls

else
echo " ERROR!!! no es fichero ni directorio "

fi

------------------------------------------------------------

#/!bin/bash
#Script que nos muestra un menu para elegir una opcion, y nos da un mensaje despues de la eleccion.


echo "1. Opcion uno"
echo "2. Opcion dos"


read -p "introduzca opcion:" op


case $op in
1)
echo "Ha pulsado opcion 1"
;;
2)
echo "Ha pulsado opcion 2"
;;
*)
echo "La opcion es incorrecta"
;;
esac
---------------------------------------------------------

#/!bin/bash
#Script que nos muestra un menu para elegir la operacion a realizar 


echo ""
echo "Realiza una operacion matematica segun las opciones"
echo ""
echo "a.Suma"
echo "b.Resta"
echo "c.Multiplicación"
echo "d.Division entera"
echo "e.Resto"
echo "f.Es un numero par?"


read -p "Seleccione la operacion a realizar y pulse intro: " op
read -p "introduzca operando 1:" num1
if [ $op != f ]; then
read -p "introduzca operando 2:" num2
fi


case $op in
a)
suma=`expr $num1 + $num2`
echo "Ha pulsado opcion a, el resultado de la suma es "$suma
;;


b)
resta=`expr $num1 - $num2`
echo "Ha pulsado opcion b, el resultado de la resta es "$resta
;;


c)
multiplicacion=`expr $num1 \* $num2`
echo "Ha pulsado opcion c, el resultado de la multiplicacion es "$multiplicacion
;;


d)
division=`expr $num1 / $num2`
echo "Ha pulsado opcion d, el resultado de la division es "$division
;;


e)
resto=`expr $num1 % $num2`
echo "Ha pulsado opcion e, el resto es "$resto
;;


f)
res=`expr $num1 % 2`
if [ $res -eq 0 ]; then
echo " el numero introducido es " $num1 " es par"
else
echo " el numero introducido es " $num1 " No es par"
fi
;;
esac

---------------------------------------------------
#/!bin/bash

#Script que nos diga al pulsar una tecla, si es letra, numero o caracter especial


read -n 1 tecla
case $tecla in
[a-z,A-Z]) echo "ha introducido una letra"
;;
[0-9]) echo "Ha introducido un numero"
;;
*) echo "Ha introducido un caracter especial"
;;
esac
------------------------------------------------------

#!/bin/bash
#realizar un scrip que reciba varios parametros y nos diga cuantos de esos parametros son de directorios y cuantos son archivos. $# contador que indica cuantos parametros se pasan.

cont=0
contf=0

for var in $*; do
   if [ -d $var ]; then
   cont=`expr $cont + 1`
   elif [ -f $var ]; then
   contf=`expr $contf + 1`
   else
   echo "$var no es fichero ni directorio"
   fi
done
echo "Ha introducido $cont directorios y $contf ficheros."
echo "Se han introducido $# parametros"

----------------------
# Mostramos menu, con productos para vender, luego nos pide que introduzcamos la opcion. luego mensaje que indica que introduzca moneda. Si ponemos precio exacto nos da mensaje, "Gracias buen provecho", si ponemos menos, nos diga falta.
Si poner mas valor, nos indique el cambio con mensaje.

echo """"
echo "Bienvenido a la tienda On-line - CEPAL"
echo ""
echo "1. Refresco 1 euro"
echo "2. Sandiwch 3 euros"
echo "3. Tabaco 5 euros"
echo ""
read -p "Introduzca opcion:" op
read -p " Introduzca importe: " mon
case $op in
1)
precio=1
;;
2)
precio=3
;;
3)
precio=5
;;
*)
echo "Opcion incorrecta"
esac
while [ $mon -lt $precio ]; do
falta=`expr $precio - $mon`
read -p " Introduzca $falta euros, por favor introduzcalos" mas
mon=`expr $mon + $mas`
done
 if [ $mon -gt $precio ]; then
cambio=`expr $mon - $precio`
echo "Gracias por su compra, su cambio es de $cambio euros"

else
echo "Gracias por su compra. Buen provecho"
fi
---------------
#!/bin/bash
#Realizar un script que pida introducir la ruta de un directorio por teclado (Hay que validar que la variable introducida sea un directorio) nos diga cuantos archivos y cuantos directorios hay dentro de ese directorio.

read -p "Introduzca la ruta de un directorio :" dir
until [ -d $dir ]; do
read -p "Introduzca la ruta de un directorio :" dir
done
cont=0
contf=0
     for var in `ls $dir`; do
            if [ -d $var ]; then
             cont=`expr $cont + 1`
             elif [ -f $var ]; then
             contf=`expr $contf + 1`
            fi
     done
echo "Ha introducido $cont directorios y $contf ficheros."
echo "Se han introducido $# parametros"


-------------------------------------



#/!bin/bash
#Realiza un script que introduzca numero por parametro y muestre tabla de multiplicar

echo " la tabla de multiplicar de $1 es: "
numerador=1
while [ $numerador -lt 11 ]; do
resul=`expr $1 \* $numerador`
echo "$1 x $numerador = $resul"
numerador=`expr $numerador + 1`
done



------------------



#!/bind/bash
#apertura carpeta contenido ASIR
ls /home/asir


------------------------
#/!bin/bash
#Realiza un script que muestre por pantalla los numeros del 1 al 20

num=1
while [ $num -lt 21 ]; do
echo "$num"
num=`expr $num + 1`
done
---------------------------







14 comentarios:

  1. Muy buena recopilación. Saludos!

    ResponderEliminar
  2. Que te parece esto para resolver el de número de directorios y ficheros:

    #!/usr/bin/env bash

    read -p "Introduzca la ruta de un directorio :" dir
    until [ -d $dir ]; do
    read -p "Introduzca la ruta de un directorio :" dir
    done

    contd=`find ${dir}/* -maxdepth 0 -type d | wc -l`
    contf=`find ${dir}/* -maxdepth 0 -type f | wc -l`

    echo "Ha introducido $contd directorios y $contf ficheros."
    echo "Se han introducido $# parametros $*"

    ResponderEliminar
    Respuestas
    1. Yo hice esto:

      #!/bin/bash
      # verdirectorio.sh

      DIREC=0
      until [ -d $DIREC ]; do
      read -p "Por favor, introduzca el nombre de un directorio: " DIREC
      done

      NUMFICH=`ls -l $DIREC | grep -e ^- | wc -l`
      NUMDIR=`ls -l $DIREC | grep -e ^d | wc -l`

      echo "Dentro de $DIREC hay $NUMDIR directorios y $NUMFICH archivos"

      Eliminar
  3. Hola me podrías ayudar a hacer unas prácticas de scripts para aprobar la asignatura de Linux de ASIR2? Sería de gran ayuda.

    ResponderEliminar
  4. Hola! podrian ayudarme con este programa?
    Realice un script que defina la variable llamada KERNEL que referencia al directorio donde se encuentra el núcleo del SO. ¿Qué pasa cuando el usuario finaliza su sesión? ¿Cómo solucionaría el problema?

    ResponderEliminar
  5. dado el nombre de archivo como parametro, verifique si esta en mayuscula y renombralo a mayuscula preguntando se desea hacerlo. gracias..

    ResponderEliminar
  6. Me podrian ayudar porfavor con este script por mas facil que se pueda ver para algunos; me gustaria que me ayuden con su conocimiento
    1.- Hacer un script que admita como parametros el nombre de dos ficheros, El script debe avisar si los parametros pasados no existen como ficheros, o si no se le pasan parametros, o si solo se pasa un parametro. Una vez comprobados que se le han pasado dos ficheros, el script debe mostrar por pantalla el tamaño en KB de cada uno de ellos

    ResponderEliminar
  7. Hola me podian ayudar con este script, para tarea de ASO.
    Crea un script que reciba un fichero o un directorio como parámetro de entrada.
    Si es un fichero:
    visualiza su contenido
    Si es un directorio:
    mostrará el contenido de este
    Si no es un fichero ni un directorio:
    informará con el mensaje adecuado

    ResponderEliminar
  8. Me podian ayudar con este script, gracias.
    Script de Linux: gestión_claves.sh
    Usando una máquina de Ubuntu Desktop, crea un script que lea el fichero /etc/shadow y cree los siguientes archivos de texto:
    con_clave.txt: debe contener los usuarios que tengan clave codificada
    sin_clave.txt: debe contener los usuarios que no tengan clave
    Te puede ser de ayuda crear una copia del fichero /etc/shadow para poder trabajar con él en el script.
    Considereaciones a tener en cuenta:
    El script debe incluir tu nombre y la fecha y hora al final de los ficheros creados.
    Es decir, el fichero con_clave.txt y sin_clave.txt deben terminar con la línea:
    Fichero creado por:
    Fecha y hora: fecha y hora del sistema
    Nota: no será evaluado ningún script que no cumpla estos últimos requisitos

    ResponderEliminar
  9. hola me podrían ayudar escribir un script que determine cuanto espacio en disco ocupa el directorio /home

    ResponderEliminar
  10. buenas me gustaria que me echarais una mano con este ejercicio

    Se desea implementar un pequeño juego mediante un script para Bash. El juego consistirá en lo siguiente:
    1. El jugador deberá acertar una palabra oculta
    2. El jugador dispondrá de 5 intentos para acertar la palabra oculta
    3. La palabra se tomará aleatoriamente de entre las palabras existentes es un fichero en el cual existe una palabra por línea. NOTA: para tomar de manera aleatoria una línea de un fichero se puede utilizar el comando:
    shuf -n1 filename
    donde filename es el nombre del fichero que contiene una palabra por línea.
    El programa, al iniciarlo deberá solicitar una palabra al jugador y mostrar el número de intentos restantes (5). El jugador, introducirá la palabra que considere correcta a través del teclado. Si el usuario acierta la palabra oculta, el programa mostrará un mensaje indicando "HAS ACERTADO" y finalizará la ejecución del juego. Si no se acierta, se indicará "NO HAS ACERTADO. VUELVE A ESCRIBIR UNA PALABRA" junto al número de intentos restantes. Si el jugador no ha acertado en 5 intentos, se mostrará el mensaje "HAS PERDIDO" y finalizará el juego.

    ResponderEliminar
  11. Buenas me podríais ayudar con estos 3 scripts se lo agradecería mucho.
    1. Realizar un script que permita realizar copias de seguridad. Para ello, pedirá al usuario por pantalla el lugar donde almacenar las copias de seguridad. Si no es un directorio, avisará del fallo y volverá a pedir el directorio. El nombre del fichero comprimido será el nombre del usuario activo más “_comprimido.tar”. Cuando esté correctamente solicitará ficheros o directorios, comprobando que existen, hasta que el usuario deje en blanco la respuesta.
    2. Realizar un script que permita generar usuarios dada una lista de nombres que recibe de un fichero. El fichero debe pasarse por parámetro. El fichero de lista de nombres tendrá el formato “usuario1 usuario2 usuario3 usuario4”.
    3. Realizar un script que permita realizar tareas básicas de administración. Se debe comprobar que el script lo lanza el administrador, si no, avisará que solo lo puede usar el super usuario. Dependiendo del primer parámetro recibido, se realizarán operaciones con los parámetros adicionales. Por ejemplo “./P4_3.sh -p 755 archivo” cambiará los permisos del archivo, “.P4_3.sh -ip eth0 on” activará la interfaz de red “eth0”. Las operaciones son:
    a. “-p” para modificar los permisos de un archivo.
    b. “-ip” para modificar el estado de una interfaz de red (up o down).
    c. “-o” para modificar el propietario de un archivo.
    d. “-l” listará un directorio
    i. “-a” listará el directorio y los ocultos
    ii. “-l” listará el directorio con detalles
    e. Si se introduce un parámetro que no existe o no se puede realizar las operaciones por falta o excedente de parámetros, mostrar un mensaje de ayuda de cómo utilizar este script.

    ResponderEliminar

Gracias por participar. :-)