0% encontró este documento útil (0 votos)
61 vistas76 páginas

Programacion Bash Script

Este documento contiene el trabajo realizado en el ciclo de Técnico Superior de Administración de Sistemas en Red. Incluye scripts de Linux con ejercicios de programación como comprobar si cadenas son iguales, solicitar números e imprimir tablas de multiplicar usando bucles como while, until y for. El objetivo es facilitar la práctica y resolver dudas sobre informática y Linux.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
61 vistas76 páginas

Programacion Bash Script

Este documento contiene el trabajo realizado en el ciclo de Técnico Superior de Administración de Sistemas en Red. Incluye scripts de Linux con ejercicios de programación como comprobar si cadenas son iguales, solicitar números e imprimir tablas de multiplicar usando bucles como while, until y for. El objetivo es facilitar la práctica y resolver dudas sobre informática y Linux.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 76

En este blog podrás encontrar todo el trabajo realizado

a lo largo del ciclo de Técnico Superior de


Administración de Sistemas en Red. El objetivo es
poder facilitar determinadas practicas, y alcanzar la
informática un poco más al usuario, e intentar resolver
todas las dudas que tengáis.
lunes, 23 de junio de 2014

Script de Linux
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

También podría gustarte