P1.1.sh Realiza un script que compruebe si dos cadenas que se le
pasan como parámetros son iguales o no.
# !/bin/bash
if test $1 == $2
# compruebo si los parametros pasados por lista de comando son iguales
#necesito el doble igual porque si no lo que hago es una asignación
then
echo "las palabras son
iguales"
else
echo "las palabras son
distintas" fi
P1.2.sh Realiza un script que solicite un
número y si es mayor que 200 muestre el mensaje “mayor que 200, grande”.
#!/bin/bash
echo "introduce
un número"
read num1
if test $num1 -gt 200
then
echo "el número es mayor que
200"
else
echo "el número es más chico"
fi
P1.3.sh Realiza un script que muestre por
pantalla la pregunta “¿Quién descubrió América?” y, según la respuesta, muestre
el mensaje “Es correcto” o “No es correcto”.
#!/bin/bash
echo "quien
descubrio America?"
read nombre1
if test $nombre1 ==
"Colon" || $nombre1=="colon" || $nombre1=="COLON"
# para poner un or
en script es con doble ||
# el and se pone
con &&
then
echo "Es correcto"
else
echo "No es correcto"
fi
P1.4.sh Crea un script que solicite un
número y diga si es par o impar.
#!/bin/bash
echo "dame un número"
read
num1
resto=`expr
$num1 % 2`
if test
$resto -eq 0
then
echo
"es par"
else
echo
"es impar"
fi
P1.5.sh Pasa dos valores por línea de
comando y realiza la suma, la resta, la multiplicación, la división y el resto.
suma=`expr $1 + $2`
echo "la suma es $suma"
resta=`expr $1 - $2`
echo "la resta es $resta"
multiplicacion=`expr $1 \* $2`
echo "la multiplicación es
$multiplicacion"
division=`expr $1 / $2`
echo "la división es $division"
resto=`expr $1 % $2`
echo "el resto es $resto"
P1.6.sh
Crear un script que:
a.
Muestre la carpeta dónde estoy situado
b.
Usuarios conectados
c.
Quien soy
d.
Ver el contenido del directorio personal del usuario conectado
e.
Ver la fecha y hora actual.
#!/bin/bash
pwd
whoami
who
ls -l
~/
date
P1.7.sh
Realizar un script que nos pregunta la edad por teclado y que nos conteste:
a.
Si menor que 10 “eres muy joven”
b.
Entre 10 y 25 “que mala edad tienes”
c.
Más de 25 “que bien te veo”
#!/bin/bash
echo "que edad tienes?"
read
edad
if test
$edad -lt 10
then
echo
"Eres muy joven"
else
if test $edad -gt 25
then
echo
"que bien te veo"
else
echo
"que mala edad tienes"
fi
fi
P1.8.sh Con “case” un scripts que nos
pregunte “¿Quién descubrió América?”, comprobar respuesta correcta y falsa.
#!/bin/bash
echo "quien descubrio america?"
read nombre
case $nombre in
Colon) echo "la respuesta es
correcta";;
colon) echo "la
respuesta es correcta";;
COLON) echo "la
respuesta es correcta";;
“Cristobal Colon”) echo “la respuesta es correcta”;;
*) echo "la
respuesta no es correcta";;
esac
P2.1.sh Realizar un script que pida dos
valores por teclado y después muestre un menú:
1.-
Suma.
2.-
Resta.
3.-
Multiplicación.
4.-
División.
5.-
Es par el 1º número.
6.-
Es impar el 2º número.
#!/bin/bash
echo
"dame un número"
read
num1
echo
"dame un número menor"
read
num2
echo
"elige una opción entre el 1 y el 6"
read
opcion
case
$opcion in
1)
echo "hace la suma"
suma=`expr $num1 + $num2`
echo "la suma es $suma";;
2)
echo "hace la resta"
resta=`expr $num1 - $num2`
echo "la resta es $resta";;
3)
echo "hace la
multiplicacion"
multiplicacion=`expr $num1 \*
$num2`
echo "la multiplicacion es
$multiplicacion";;
4)
echo "hace la division"
division=`expr $num1 / $num2`
echo "la division es
$division";;
5)
echo "mira si el primer número es par"
resto=`expr $num1 % 2`
if test $resto -eq 0
then
echo "es par"
else
echo "es impar"
fi;;
6) echo "mira si el segundo número es
impar"
resto2=`expr $num2 % 2`
if test $resto2 -eq 1
then
echo "es impar"
else
echo "es par"
fi;;
esac
P2.2.sh
Realiza un script que pida tres nombres por teclado. Los almacene en un fichero
llamado nombres.txt. Ordene alfabéticamente dicho fichero llamándolo
nombres-ordenado.txt y lo muestre tanto desordenado como ordenado.
#!/bin/bash
echo "dame un nombre"
read nombre1
echo "dame otro nombre"
read nombre2
echo "dame otro nombre"
read nombre3
echo "almacena los nombres en
un fichero"
echo "$nombre1" > nombres.txt
echo "$nombre2" >>
nombres.txt
echo "$nombre3" >>
nombres.txt
echo "ordenar el fichero y
renombrarlo"
sort
nombres.txt > nombres-ordenado.txt
echo "muestralo ordenado"
sort nombres-ordenado.txt
echo "muestralo
desordenado"
cat nombres.txt
P2.3.sh
Crea un script que pida dos números por teclado. Si el primero es mayor que el
segundo los restamos. En caso contrario mostramos un mensaje indicando que no se
pueden restar.
#!/bin/bash
echo "dame un número"
read num1
echo "dame otro número"
read num2
if test
$num1 -gt $num2
then
resta=`expr $num1 - $num2`
echo "la resta es $resta"
else
echo "no se pueden restar"
fi
P2.4.sh
Crea un script que pida dos números por línea de comando. Si el primero es
mayor que el segundo los restamos. En caso contrario mostramos un mensaje
indicando que no se pueden restar.
#!/bin/bash
#introduces dos números por
parámetros
if test $1
-gt $2
then
resta=`expr $1 - $2`
echo
"la resta es $resta"
else
echo "no se pueden restar"
fi
P2.5.sh Hacer un script en el que después de introducir por
línea de comandos valores, me muestre:
Todos los valores que he introducido: $*
El nombre del fichero: $0
Nº de parámetros introducidos: $#
El primer parámetro: $1
El segundo parámetro: $2
#!/bin/bash
echo "mostrar todos los $*
introducidos"
echo "mostrar el nombre del fichero $0"
echo "mostrar el número de
parámetros introducidos $#"
echo "mostrar el primer
parámetro $1"
echo "mostrar el segundo
parámetro $2"
P3.1.sh Escribir los 10 primeros números naturales. While.
#!/bin/bash
echo " mostrar los 10 numeros
naturales con while"
num=0
while test $num -le 10
do
echo "$num"
num=`expr $num + 1`
done
P3.2.sh
Escribir los 10 primeros números naturales. Until.
#!/bin/bash
echo " mostrar los 10 numeros
naturales con until"
num=0
until test $num -gt 10
do
echo "$num"
num=`expr $num + 1`
done
P3.3.sh
Escribir los 20 primeros números pares. While.
#!/bin/bash
echo " mostrar los 20 primeros
numeros pares con while"
num=0
while test $num -le 20
do
echo "$num"
num=`expr $num + 2`
done
P3.4.sh
Escribir los 20 primeros números pares. Until.
#!/bin/bash
echo " mostrar los 20 primeros
numeros pares con until"
num=0
until test $num -gt 20
do
echo "$num"
num=`expr $num + 2`
done
P3.5.sh Pide un nombre de fruta por teclado hasta que
escriba “salir” y llévalos a un fichero llamado p58-frutas.txt. Muestra el
contenido del fichero ordenado.
#! /bin/bash
echo "pedir un nombre de fruta
y seguir hasta que se diga salir"
echo "dime una fruta"
read fruta
while test $fruta == salir
do
echo "$fruta"
fruta==* >> p58-frutas.txt
cat p58-frutas.txt
done
P3.6. sh Pide un número por teclado y muestra la tabla de
multiplicar de ese número. While
#! /bin/bash
echo " dame un número y muestra
su tabla de multiplicar"
echo "dame un número"
read numero
n=0
while test $numero -le 10
do
result ='expr $n \* $numero'
echo
"$numero * $n”
n='expr
$n + 1'
done
P3.7.sh Pide un número por teclado y muestra la tabla de
multiplicar de ese número. Until
#! /bin/bash
echo " dame un número y muestra
su tabla de multiplicar"
echo "dame un número"
read numero
n=0
until test $numero -gt 10
do
result ='expr $n \* $numero'
echo "$numero * $n “
n='expr $n + 1'
done
P4.1. sh Escribir los 10 primeros números naturales. For
#!/bin/bash
echo " mostrar los 10 numeros
naturales con for"
for ((i=0; i< 11; i ++))
do
echo
"numero:$i"
done
P4.2.sh Escribir los 20 primeros
números pares.
#! /bin/bash
echo "escribir los 20 primeros
numeros pares con for"
for ((i=0; i<21; i++))
do
multi=`expr 2 \* $i`
echo "$multi"
done
P4.3.sh
Escribir los 20 primeros números impares.
#! /bin/bash
echo "escribir los 20 primeros numeros impares con for"
for ((i=0;
i<20; i++))
do
suma=`expr
$i + $i + 1`
echo "$suma"
done
P4.4.sh Pide un número por teclado y muestra la
tabla de multiplicar de ese número.
#! /bin/bash
echo "dame un numero y imprime tabla de
multiplicar"
read num
for ((i=1; i<=10; i++))
do
multi=`expr
$i \* $num`
echo
"$num * $i=$multi"
done
por linea de comando
#! /bin/bash
echo "mostrar tabla de multiplicar de
$1"
for ((i=1;
i<=10; i++))
do
multi=`expr $i \* $1`
echo "$1
* $i=$multi"
done
P4.5.sh Hacer
un script mediante el cual todos los valores que introduzcamos por línea de
comandos nos lo muestre después de ejecutar el script.
#!/bin/bash
for
contador in $*
do
echo
“$contador”
done
echo "mostrar todos los $*
introducidos"
P4.6.sh Hacer un script mediante el cual cree
un fichero p511pares.txt con los 100 primeros números pares.
#!/bin/bash
echo "crear fichero p511pares.txt
con los 100 primeros numeros pares"
for ((i=0; totalpares<=100;
i++))
do
resto=`expr $i % 2`
if test $resto -eq 0
themn
echo “$i”
totalpares=`expr $totalpares + 1
fi
done
echo "$totalpares"
>> ~/misscripts/p511pares.txt
P5.1.sh Realizar un script que
muestre los números que hay entre dos nº pasados por línea de comando, el
cuadrado de cada uno, la suma de ellos, la multiplicación de cada uno.
Si el primer nº es mayor que el 2º
debemos tenerlo en cuenta y debe funcionar. Deben pasarse exactamente dos
parámetros.
#!/bin/bash
clear
echo "debes introducir dos
numeros por parametros, el primero mayor que el segundo”
resultado=`expr $1 - $2`
echo "los numeros que hay
entre $1 y $2 son:$resultado"
cuadrado1=`expr $1 \* $1`
echo "el cuadrado de $1 es
$cuadrado1"
cuadrado2=`expr $2 \* $2`
echo "el cuadrado de $2 es
$cuadrado2"
suma=`expr $1 + $2`
echo "la suma de $1 y $2
es:$suma"
multiplicacion=`expr $1 \* $2`
echo "la multiplicacion de $1
y $2 es:$multiplicacion"
P5.2.sh Mostrar por pantalla el día
de la semana en el que estamos con todas las letras.
#!/bin/bash
clear
date +%A
P5.3.sh Realiza un script que
escriba al revés una palabra.
#!/bin/bash
clear
echo "para salir debes pulsar
control + c"
echo "escribe la palabra que
quieras y la imprimira al reves"
rev
P5.4.sh Crear un scripts que
muestre por pantalla las tablas de multiplicar del 1 al 10.
#!/bin/bash
clear
for ((i=1;i<=10;i++))
do
for
((j=1;j<=10;j++))
do
multi=`expr
$i \* $j`
echo "$i*$j=$multi"
done
done
P6.1.sh Realizar un menú para
trabajar sobre un fichero con el siguiente formato:
equipo1:equipo2:golesequipo1:golesequipo2
1. Pedir datos de equipos y goles y
añadir los datos en el fichero futbol.txt. Preguntar previamente el nº de
partidos que queremos generar. FUNCIONES.
function op1 ()
{
echo
"he entrado en la opcion 1"
echo
"número de partidos que queremos generar"
read num
for ((i=1; i<=$num; i++))
do
echo “datos del partido $i”
echo "dime el nombre del equipo
1"
read equipo1
echo "dime el nombre del equipo 2"
read equipo2
echo “dime el nombre de goles equipo1”
read goles1
echo “dime el nombre de goles equipo2”
read goles2
echo “equipo1:equipo2:goles1:goles2”
echo “$equipo1:$equipo2:$goles1:$goles2
“>> ~/boletinXIII/futbol.txt
done
}
2.
Mostrar contenido del fichero (si existe) .FUNCIONES
function op2 ()
{
echo "he entrado en
la opcion 2"
echo "voy a mostrar
el fichero si existe"
if test -f ~/boletinXIII/futbol.txt
then
echo "el
fichero existe"
cat ~/
boletinXIII/futbol.txt
else
echo "el
fichero no existe"
fi
}
3. Pedir nombre de equipo y si está,
devolver el nº de partidos jugados
function op3 ()
{
echo "he entrado en la opcion
3"
echo "voy a pedir el nombre del
equipo"
read equipo
if test
$equipo -eq ~/misscripts/boletinXIII/futbol.txt
then
numpartidos=`wc -l
~/misscripts/boletinXIII/futbol.txt`
echo "el numero de
partidos jugados es $numpartidos"
else
echo "el equipo no ha
jugado ningun partido"
fi
}
4. Mostrar el nº de partidos empatados indicando los equipos
y el resultado del empate:
“Los equipos betis-sevilla han empatado a 2”
function op4 ()
{
echo "he entrado en la opcion
4"
if test $goles1 -eq $goles2
then
echo "los equipos $equipo1 y $equipo2 han empatado a $goles1"
else
echo "los equipos no han
empatado"
fi
}
5. Realizar la clasificación si existe el fichero futbol.txt
y borrar futbol.txt. El fichero resultante se llama clasificacion.txt
1. Partidos ganados +3
2. Partidos empatados +1
3. Partidos perdidos nada
function op5 ()
{
echo "he entrado en la opcion
5"
if test -f
~/misscripts/boletinXIII/futbol.txt
then
echo "el fichero
existe"
if test $goles1 -gt $goles2
then
echo "puntos por partido
+3"
echo "partidos
ganados +3" >> ~/misscripts/boletinXIII/$
rm
~/misscripts/boletinXIII/futbol.txt
else
if test $goles1 -eq $goles2
then
echo "partidos empatados +1" >>
~/misscripts/bo$
else
echo
"partidos perdidos nada" >> ~/misscripts/b$
rm
~/misscripts/boletinXIII/futbol.txt
fi
fi
else
mkdir
~/misscripts/boletinXIII/futbol.txt
fi
}
6. Salir
futbol.txt
sevilla:betis:3:0
madrid:barcelona:5:0
cadiz:jaen:2:1
barcelona:sevilla:0:4
jerez:cadiz:2:3
resultado.txt “ORDENADO EN CASO DE EMPATE DE PUNTOS ALFABETICAMENTE”
cadiz-6p
sevilla-6p
madrid-3p
barcelona-0p
betis-0p
jaen-0p
jerez-0p
6. Añadir equipos al fichero y generar aleatoriamente los
resultados de los goles de los dos equipos, con valores del 0 al 5.
function op5 ()
{
echo "he entrado en la opcion
5"
if test -f
~/misscripts/boletinXIII/futbol.txt
then
echo "el fichero
existe"
if test
$goles1 -gt $goles2
then
echo "puntos por partido
+3"
echo "partidos ganados +3"
>> ~/misscripts/boletinXIII/$
rm
~/misscripts/boletinXIII/futbol.txt
else
if test $goles1 -eq $goles2
then
echo "partidos empatados +1" >>
~/misscripts/bo$
else
echo
"partidos perdidos nada" >> ~/misscripts/b$
rm
~/misscripts/boletinXIII/futbol.txt
fi
fi
else
mkdir
~/misscripts/boletinXIII/futbol.txt
fi
}
opc=0
while test $opc != 7
do
echo "introduce una
opcion"
echo "1 -pedir
datos de equipo y goles"
echo "2 -mostrar el
contenido del fichero si existe"
echo "3 -Pedir
nombre de equipo y si está, devolver el nº de partidos jugados"
echo "4 -Mostrar el nº de partidos empatados
indicando los equipos y el resultado
del empate"
echo "5 -realizar
la clasificacion"
echo "6 -añadir
equipos al fichero y generar aleatoriamente los resultados de los goles de los
dos equipos, con valores del o al 5"
echo "7 -salir del
menu”
read opc
case $opc in
1) op1;;
2) op2;;
3) op3;;
4) op4;;
5) op5;;
6) op6;;
7) exit;;
esac
done
P6.2.sh Escriba un script que
admita palabras (seguidas de enter) por parte del usuario hasta que este teclee
”salir”. Después debe aparecer en pantalla el número de palabras que se han
introducido y una despedida.
#/bin/bash
clear
contador=0
echo "escriba palabras seguidas de enter hasta escribir
salir"
echo "puedes introducir datos o salir"
echo "para salir debes escribir salir"
echo "que quieres hacer"
read opcion
while test $opcion != salir
do
echo "dime
una palabra"
read palabra
echo
"quieres seguir metiendo datos, sino escribir salir"
read opcion
contador=`expr
$contador + 1`
done
echo "el número de palabras introducidas es $contador"
echo "gracias! adios!"
P6.3.sh Modifique el programa
anterior de forma que las palabras se vayan guardando en un fichero
”palabras.txt”.
#/bin/bash
clear
contador=0
echo "escriba palabras seguidas de enter hasta escribir
salir"
echo "puedes introducir datos o salir"
echo "para salir debes escribir salir"
echo "que quieres hacer"
read opcion
while test $opcion != salir
do
echo "dime una
palabra"
read palabra
echo "quieres
seguir metiendo datos, sino escribir salir"
read opcion
echo $palabra
>> ~/misscripts/boletinXIV/palabras.txt
contador=`expr $contador
+ 1`
done
echo "el numero de palabras introducidas es $contador"
echo "gracias, adios!"
P6.4.sh Modifique de nuevo el
programa. Consiga que si el usuario introduce un número en lugar de una
palabra, se le devuelva la palabra que introdujo en esa posición. Por ejemplo
si
introduce ”5 ” se le devolvera
la palabra número cinco del fichero ”palabras.txt”.
#/bin/bash
clear
contador=0
echo "escriba palabras seguidas de enter hasta escribir
salir"
echo "puedes introducir datos o salir"
echo "para salir debes escribir salir"
echo "que quieres hacer"
read opcion
while test $opcion != salir
do
echo "dime una
palabra"
read palabra
echo $palabra >>
~/misscripts/boletinXIV/palabras.txt
echo "quieres
seguir metiendo datos, sino escribir salir"
read opcion
if test $palabra =[0-9]
then
numerito=`wc -l ~/misscripts/boletinXIV/palabras.txt
| cut -c1`
for ((i=1;i<=$numerito; i++))
do
resultado=`sed -n "$i"p ~/misscripts/boletinXIV/palabra$
echo
"$resultado"
done
else
echo "no
hay palabra"
fi
echo $palabra >>
~/misscripts/boletinXIV/palabras.txt
contador=`expr $contador
+ 1`
done
echo "el numero de palabras introducidas es $contador"
echo "gracias, adios!"
P6.5.sh Escriba un programa que
calcule el resultado de sumar todos los números del 1 al 100 secuencialmente,
es decir: 1 + 2 + 3 + 4 + 5...
#/bin/bash
clear
suma=0
for
((i=1;i<=100;i++))
do
echo
"$suma"
suma=`expr $suma
+ $i`
done
echo "la
suma es $suma"
P6.6.sh Solicite dos números
por teclados. Comprueba que el primero es menor que el segundo, y si es así
calcula la suma de todos los números comprendidos entre ellos dos y la media de
ellos.
Si el primero es mayor que el
segundo debe mostrar un mensaje diciendo que debes introducir un número menor
que el segundo.
#/bin/bash
clear
echo "dame un numero"
read numero1
echo "dame otro numero"
read numero2
if test $numero1 -lt
$numero2
then
suma=0
contador=0
for ((i=$numero1;i<=$numero2;i++))
do
suma=`expr
$suma + $i`
contador=`expr
$contador + 1`
done
echo "la
suma de $numero1 hasta $numero2 es: $suma"
media=`expr $suma /
$contador`
echo "la
media de los numeros es:$media"
else
echo "la
operacion no se puede realizar"
fi
P6.7.sh Modifica el script
anterior para que si el primer valor es mayor que el segundo, siga pidiendo
valores hasta que el primero sea menor que el segundo.
#/bin/bash
clear
echo "dame un primer número"
read numero1
echo "dame un segundo número"
read numero2
if test $numero1 -lt $numero2
then
suma=0
contador=0
for ((i=$numero1;i<=$numero2;i++))
do
suma=`expr $suma + $i`
contador=`expr
$contador + 1`
done
echo "la suma de
$numero1 hasta $numero2 es: $suma"
media=`expr $suma /
$contador`
echo "la media de
los numeros es:$media"
else
echo "dame otro
primer numero"
read num1
while test $num1 -gt $numero2
do
echo
"dame otro primer numero"
read num1
done
suma=0
contador=0
for ((i=$num1;i<=$numero2;i++))
do
suma=`expr $suma
+ $i`
contador=`expr
$contador + 1`
done
echo "la suma de
$numero1 hasta $numero2 es: $suma"
media=`expr $suma /
$contador`
echo "la media de
los numeros es:$media"
fi
P6.8.Ssh Haz que el ordenador
“piensa” en un número al azar entre 1 y 50. El usuario ha de adivinarlo en 5
oportunidades. El ordenador señalará si es mayor o menor.
#/bin/bash
clear
echo "el ordenador va a pensar en un numero del 1 al 50"
numero=`echo $((1 + RANDOM %49))`
echo "tienes 5 oportunidades para adivinarlo"
opcion=0
for
((i=1;i<=5;i++))
do
echo "dime
el $i"
read num1
if test $num1 -eq $numero
then
echo "has
acertado"
exit
else
if test $num1 -gt
$numero
then
echo
"$num1 es mayor que el numero que he pensado"
else
echo
"$num1 es menor que el numero que he pensado"
fi
fi
done
P6.9.sh El ordenador genera 3
números aleatorios entre el 100 y 200. Muéstralos, súmalos, realiza su
producto, su media.
#/bin/bash
clear
valor1=201
while test $valor1
-gt 200
do
valor1=`echo
$((100 + $RANDOM %200))`
done
valor2=201
while test $valor2
-gt 200
do
valor2=`echo $((100 + $RANDOM %200))`
done
valor3=201
while test $valor3
-gt 200
do
valor3=`echo $((100 +
$RANDOM %200))`
done
echo "el primer numero es: $valor1"
echo "el primer numero es: $valor2"
echo "el primer numero es: $valor3"
suma=`expr $valor1 + $valor2 + $valor3`
media=`expr $suma / 3`
producto=`expr $valor1 \* $valor2 \* $valor3`
echo "la suma es: $suma"
echo "la media es: $media"
echo "el producto es: $producto"
9. Realizar un programa que imprima por pantalla tántos asteriscos
como diga el usuario. Al
ejecutarse debe preguntar “Cuantos asteriscos desea imprimir?” leer el
número que introduce el usuario e imprimir los asteriscos.
#/bin/bash
clear
echo "cuantos asteriscos quieres imprimir"
read num
for ((i=1;
i<=$num; i++))
do
echo
"*"
done
P6.11.sh Realizar un programa
que pida la base y el exponente y calcule la potencia.
POTENCIA:
Base=5
5^3= 5 * 5 * 5 =125
Exponente=3
#/bin/bash
clear
echo "dime que base quieres"
read base
echo "dime que exponente quieres"
read exponente
echo "vamos a calcular la potencia"
contador=$exponente
num=1
while test $contador -gt 0
do
num=`expr $base
\* $num`
contador=`expr
$contador - 1`
done
echo "la
potencia es: $num"
P7.1.sh Muestra
un menú de opciones:
1. Crea una carpeta
dentro de tu home llamada COMPRAS. Si la carpeta existe debe mostrar mensaje.
2. Comprobar que
existe COMPRAS. Pedir artículos para introducir en la lista de la compra,
mediante funciones.
El fichero tendrá el siguiente aspecto:
Articulo:categoria:cantidad: precio //No incluir
cabecera
leche:alimentacion:15:10,30
pan:3:1,15
mantequilla:lácteos:1:2,5
galletas:alimentación:2:3,45
cocacola:bebidas:12:3,80
zumos:bebidas:6:9,12
yogures:lácteos:4:5,23
champú:perfumería:1:1,80
Las categorías pueden ser: Alimentación, perfumería,
bebidas, lácteos.
El fichero se creará dentro de
~/COMPRAS/nosvamosdecompra.txt
3. Crea una carpeta
dentro de COMPRAS llamado BACKUP.
4. Crea una copia
de nosvamosdecompra.txt en una subcarpeta dentro de COMPRAR. El nombre de dicha
carpeta se solicita por teclado. El nombre del fichero será compra-c.txt.
5. Idem, crea un
enlace simbólico de nosvamosdecompra.txt dentro de BACKUP llamado compra-s.txt.
6. Idem, crea un
enlace duro de nosvamosdecompra.txt dentro de BACKUP llamado compra-d.txt.
7. Muestra el
contenido de la subcarpeta con sus inodos correspondientes
8. Crea un fichero
vacío dentro de la subcarpeta
9. Muestra aquellos
ficheros de la subcarpeta que tienen un tamaño > 0
10. Muestra
aquellos enlaces simbólicos que existen dentro de la subcarpeta
11. Muestra el
contenido de nosvamosdecompra.txt, compra-d.txt, compra-s.txt y compra-c.txt
12. Crea un fichero
todos.txt con el contenido de nosvamosdecompra.txt, compra-d.txt, compra-s.txt
y compra-c.txt
13. Crea un fichero
barato.txt con aquellos artículos con precio menor de 2 euros.
14. Crea un fichero
alimentación.txt en el que extraiga aquellos artículos de esta categoría.
15. Cuenta el nº de
productos que se van a comprar.
16. Solicitar
añadir artículos al fichero, aplica la función de la opción 2.
17. Borra aquellos
artículos que sean de perfumería y crea sinperfumeria.txt.
18. Solicita un
artículo y bórralo de la lista del fichero nosvamosdecompra.txt.
19. Suma el coste
total de la lista de la compra y muéstralo mediante un mensaje.
20. Calcula el
precio medio de los artículos y muéstralo mediante un mensaje.
21. Salir.
#bin/bash
clear
function op1crear_carpeta ()
{
if test -d
~/COMPRAS
then
echo "la carpeta
existe"
else
echo "la carpeta no
existe hay que crearlo"
mkdir ~/COMPRAS
fi
}
function
op2pedir_articulos ()
{
if test -d ~/COMPRAS
then
echo "la carpeta
existe"
if test
-f ~/COMPRAS/nosvamosdecompra.txt
then
echo "el
fichero existe"
echo
"quieres introducir datos, sino escribe salir"
read datos
while test $datos != "salir"
do
echo
"dame un articulo"
read
articulo
echo
"dime una categoria, entre alimentacion, perfumeria, lacteos o
bebidas"
read
categoria
while test $categoria
!= "alimentacion"
&& test $categoria != "perfumeria" && test $categoria
!= "lacteos" && test
$categoria != "bebidas"
do
echo
"es incorrecto, tienes que poner una de las siguientes categorias,
alimentacion,perfumeria, lacteos o bebidas"
read
categoria
done
echo
"dame una cantidad"
read
cantidad
echo
"dame un precio"
read
precio
echo
$articulo:$categoria:$cantidad:$precio >>
~/COMPRAS/nosvamosdecompra.txt
echo
"si quieres salir, escribe salir, sino cualquier palabra y sigue
introduciendo datos"
read
datos
done
else
echo "el
fichero no existe, crearlo"
echo
$articulo:$categoria:$cantidad:$precio >> ~/COMPRAS/nosvamosdecompra.txt
fi
else
echo "el archivo no
existe, pasar por la opcion 1"
fi
}
function
op3crear_otra_carpeta ()
{
if test -d ~/COMPRAS
then
if test -d ~/COMPRAS/BACKUP
then
echo "la
carpeta existe"
else
echo "la
carpeta no existe hay que crearla"
mkdir
~/COMPRAS/BACKUP
fi
else
echo "la carpeta no
existe, pasar por la opcion 1"
fi
}
function op4crear_copia ()
{
if test -f ~/COMPRAS/nosvamosdecompra.txt
then
echo
"el fichero existe"
echo "dime el
nombre de otra carpeta"
read carpeta
mkdir ~/COMPRAS/$carpeta
cp
~/COMPRAS/nosvamosdecompra.txt ~/COMPRAS/$carpeta/compra-c.txt
else
echo "el fichero no
existe, pasar por la opcion 2"
fi
}
function
op5crear_enlace_simb ()
{
if test -f ~/COMPRAS/nosvamosdecompra.txt
then
if test -d ~/COMPRAS/BACKUP
then
echo "la
carpeta existe"
ln -s
~/COMPRAS/nosvamosdecompra.txt ~/COMPRAS/BACKUP/compra-s.txt
else
echo "la
carpeta no existe, pasar por la opcion 3"
fi
else
echo "el fichero no
existe, pasar por la opcion 2"
fi
}
function
op6crear_enlace_duro ()
{
if test -f ~/COMPRAS/nosvamosdecompra.txt
then
if test -d ~/COMPRAS/BACKUP
then
echo "la carpeta existe"
ln
~/COMPRAS/nosvamosdecompra.txt ~/COMPRAS/BACKUP/compra-d.txt
else
echo "la
carpeta no existe, pasar por la opcion 3"
fi
else
echo "el fichero no
existe, pasar por la opcion 2"
fi
}
function
op7mostrar_contenido ()
{
if test -d ~/COMPRAS/BACKUP
then
echo "los ficheros
que hay son los siguientes"
ls -i ~/COMPRAS/BACKUP
else
echo "la carpeta no
existe, pasar por la opcion 3"
fi
}
function
op8crear_fichero_vacio ()
{
if test -d ~/COMPRAS/BACKUP
then
echo
"vamos a crear un fichero vacio y se guarda en BACKUP"
touch
~/COMPRAS/BACKUP/ficherovacio.txt
else
echo
"la carpeta no existe, pasar por la opcion 3"
fi
}
function op9mostrar_fichero
()
{
if test -d ~/COMPRAS/BACKUP
then
echo "los ficheros
mayores que 0 son los siguientes"
find ~/COMPRAS/BACKUP
-size +0
else
echo "la carpeta no
existe, pasar por la opcion 3"
fi
}
function op10mostrar_enlaces
()
{
if test -d ~/COMPRAS/BACKUP
then
echo "vamos a
mostrar los enlaces simbolicos dentro de la carpeta BACKUP"
ls -l
~/COMPRAS/BACKUP > ~/COMPRAS/BACKUP/sim.txt
lineas=`wc -l ~/COMPRAS/BACKUP/sim.txt | cut
-d" " -f1`
for ((i=2;i<=$lineas;i++))
do
corta=`sed -n "$i"p
~/COMPRAS/BACKUP/sim.txt |cut -c1`
if test $corta = "l"
then
sed -n "$i"p
~/COMPRAS/BACKUP/sim.txt >> ~/COMPRAS/BACKUP/simfin.txt
else
echo
"no existe ningun enlace simbolico"
fi
done
rm ~/COMPRAS/BACKUP/sim.txt
cat ~/COMPRAS/BACKUP/simfin.txt
rm ~/COMPRAS/BACKUP/simfin.txt
else
echo "la carpeta no
existe, pasar por la opcion 3"
fi
}
function
op11mostrar_contenido_archivos ()
{
#no
me muestra los ficheros que si que existen y estan con contenido,aun habiendo
comprobado que existen
if test
-f ~/COMPRAS/nosvamosdecompra.txt
then
echo "la carpeta
existe"
cat
~/COMPRAS/nosvamosdecompra.txt
else
echo "la carpeta no
existe, pasar por la opcion 3"
fi
echo ""
if test -f
~/COMPRAS/$carpeta/compras-c.txt
then
echo "la carpeta
existe"
cat
~/COMPRAS/$carpeta/compras-c.txt
else
echo "la carpeta no
existe, pasar por la opcion 4"
fi
echo ""
if test -f ~/COMPRAS/BACKUP/compras-d.txt
then
echo "la carpeta
existe"
cat
~/COMPRAS/BACKUP/compras-d.txt
else
echo
"la carpeta no exite, pasar por la opcion 5"
fi
echo ""
if test -f ~/COMPRAS/BACKUP/compras-s.txt
then
echo "la carpeta
existe"
cat
~/COMPRAS/BACKUP/compras-s.txt
else
echo
"la carpeta no existe, pasar por la opcion 6"
fi
}
function
op12crear_ficheros ()
{
#
me crea el fichero todos, aunque me dice que los otros ficheros no existen
aunque estan todos comprobados
if test
-f ~/COMPRAS/nosvamosdecompra.txt
then
echo "la carpeta
existe"
cat
~/COMPRAS/nosvamosdecompra.txt >> ~/COMPRAS/todos.txt
else
echo "la carpeta no
existe, pasar por la opcion 3"
fi
echo ""
if test -f
~/COMPRAS/$carpeta/compras-c.txt
then
echo "la carpeta
existe"
cat
~/COMPRAS/$carpeta/compras-c.txt >> ~/COMPRAS/todos.txt
else
echo "la carpeta no existe,
pasar por la opcion 4"
fi
echo ""
if test -f
~/COMPRAS/BACKUP/compras-d.txt
then
echo "la carpeta
existe"
cat
~/COMPRAS/BACKUP/compras-d.txt >> ~/COMPRAS/todos.txt
else
echo "la carpeta no exite,
pasar por la opcion 5"
fi
echo ""
if test -f
~/COMPRAS/BACKUP/compras-s.txt
then
echo "la carpeta
existe"
cat
~/COMPRAS/BACKUP/compras-s.txt >> ~/COMPRAS/todos.txt
else
echo "la carpeta no
existe, pasar por la opcion 6"
fi
}
function
op13crea_ficheros_art ()
{
#me
da un error que no consigo ver cual es, y no se si hace lo que se pide
if test
-f ~/COMPRAS/nosvamosdecompra.txt
then
num=`wc
-l ~/COMPRAS/nosvamosdecompra.txt | cut -c1`
for ((i=1;i<=$num;i++))
do
precio=`sed -n "$i"p
~/COMPRAS/nosvamosdecompra.txt | cut -d: -f4`
if test $precio -le 2
then
sed
-n "$i"p ~/COMPRAS/nosvamosdecompra.txt >> ~/COMPRAS/barato.txt
else
echo
"no hay ningun producto inferior a 2 euros"
fi
done
else
echo "el fichero no
existe, pasar por la opcion 2"
fi
}
function
op14crea_ficheros_extr
{
#me
da un error que no consigo ver cual es, y no se si hace lo que se pide
if test
-f ~/COMPRAS/nosvamosdecompra.txt
then
num=`wc -l
~/COMPRAS/nosvamosdecompra.txt | cut -c1`
for ((i=1;i<=$num;i++))
do
categoria=`sed -n
"$i"p ~/COMPRAS/nosvamosdecompra.txt | cut -d: -f2`
if test $categoria =
"alimentacion"
then
sed -n
"$i"p ~/COMPRAS/nosvamosdecompra.txt >>
~/COMPRAS/alimentacion.txt
else
echo "no
hay ningun producto que tenga la categoria de alimentacion"
fi
done
else
echo "el fichero no
existe, pasar por la opcion 2"
fi
}
function
op15cuenta_productos ()
{
if test -f ~/COMPRAS/nosvamosdecompra.txt
then
numero=`wc
-l ~/COMPRAS/nosvamosdecompra.txt | cut -c1`
echo "el numero de
productos que vamos a comprar es $numero"
else
echo "el fichero no
existe, pasar por la opcion 2"
fi
}
function
op16añadir_articulos ()
{
op2pedir_articulos
}
function
op17borrar_articulos ()
{
if test -f ~/COMPRAS/nosvamosdecompra.txt
then
sed
-e '/perfumeria/d' ~/COMPRAS/nosvamosdecompra.txt>
~/COMPRAS/sinperfumeria.txt
else
echo "el fichero no
existe, pasar por la opcion 2"
fi
}
function
op18solicitar_articulo ()
{
if test -f ~/COMPRAS/nosvamosdecompra.txt
then
echo "introduce un
articulo"
read articulo
sed -e
'/"$articulo"/d' ~/COMPRAS/nosvamosdecompra.txt > ~/COMPRAS/nuevo.txt
cat ~/COMPRAS/nuevo.txt
> ~/COMPRAS/nosvamosdecompra.txt
rm ~/COMPRAS/nuevo.txt
else
echo "el fichero no
existe, pasar por la opcion 2"
fi
}
function
op19suma_coste ()
{
#
me da error y no se si me funciona
if test
-f ~/COMPRAS/nosvamosdecompra.txt
then
num=`wc -l ~/COMPRAS/nosvamosdecompra.txt |
cut -c1`
for ((i=1;i<=$num;i++))
do
cantidad=`sed -n
"$i"p ~/COMPRAS/nosvamosdecompra.txt | cut -d: -f3`
precio=`sed -n
"$i"p ~/COMPRAS/nosvamosdecompra.txt | cut -d: -f4`
coste=`expr $cantidad \* $precio`
#me
da un argumento no entero, no se como hacer que sume las cantidades de todos
los productos, porque si es con uno solo si funciona
suma=`expr $i
+ $coste`
done
echo "el coste es
$suma"
else
echo "el fichero no
existe, pasar por la opcion 2"
fi
}
function op20precio_medio ()
{
if test -f ~/COMPRAS/nosvamosdecompra.txt
then
num=`wc -l ~/COMPRAS/nosvamosdecompra.txt | cut -c1`
for
((i=1;i<=$num;i++))
do
cantidad=`sed -n "$i"p
~/COMPRAS/nosvamosdecompra.txt | cut -d: -f3`
precio=`sed -n
"$i"p ~/COMPRAS/nosvamosdecompra.txt | cut -d: -f4`
media=`expr
$precio / $cantidad`
done
echo "el precio medio es
$media"
else
echo "el fichero no
existe, pasar por la opcion 2"
fi
}
opcion=0
while test $opcion != 21
do
echo "****************************************************************"
echo "opcion 1:crear
carpeta"
echo "opcion 2:pedir
articulos"
echo "opcion 3:crear carpeta
dentro de COMPRAS"
echo "opcion 4:crear
copia"
echo "opcion 5:crear enlace
simbolico"
echo "opcion 6:crear enlace
duro"
echo "opcion 7:muestra el
contenido de las subcarpetas con sus inodos"
echo "opcion 8:crea un fichero
vacio en la subcarpeta"
echo "opcion 9:mostrar ficheros
con tamaño mayor a 0"
echo "opcion 10:muestra enlaces
simbolicos"
echo "opcion 11:muestra el
contenido de los archivos"
echo "opcion 12:crea un
fichero"
echo "opcion 13:crea fichero
con articulos con precio menor que 2"
echo "opcion 14:crea fichero
que extraiga productos de una categoria"
echo "opcion 15:cuenta el
numero de productos que vas a comprar"
echo "opcion 16:añadir
articulos al fichero"
echo "opcion 17:borra
determinandos articulos"
echo "opcion 18:solicita un
articulo y borralo"
echo "opcion 19:suma el coste
total de la lista de compra"
echo "opcion 20:calcula el
precio medio de los articulos"
echo "opcion 21:salir"
echo
"****************************************************************"
read opcion
case $opcion in
1)
op1crear_carpeta;;
2) op2pedir_articulos;;
3) op3crear_otra_carpeta;;
4) op4crear_copia;;
5) op5crear_enlace_simb;;
6) op6crear_enlace_duro;;
7) op7mostrar_contenido;;
8) op8crear_fichero_vacio;;
9) op9mostrar_fichero;;
10) op10mostrar_enlaces;;
11) op11mostrar_contenido_archivos;;
12) op12crear_ficheros;;
13) op13crea_ficheros_art;;
14) op14crea_ficheros_extr;;
15) op15cuenta_productos;;
16) op16añadir_articulos;;
17) op17borrar_articulos;;
18) op18solicitar_articulo;;
19) op19suma_coste;;
20) op20precio_medio;;
21) exit;;
*) echo "la opcion no es correcta"
esac
done