Crea un script calculadora.sh que implementi una calculadora bàsica amb funcions.
Crear les següents funcions:
sumar() - rep 2 números i retorna la sumarestar() - rep 2 números i retorna la restamultiplicar() - rep 2 números i retorna el productedividir() - rep 2 números i retorna la divisió (gestionar divisió per zero)El programa principal ha de:
=== CALCULADORA ===
1. Sumar
2. Restar
3. Multiplicar
4. Dividir
5. Sortir
Tria una opció: 1
Introdueix el primer número: 5
Introdueix el segon número: 3
Resultat: 8
Tria una opció: 4
Introdueix el primer número: 10
Introdueix el segon número: 0
Error: No es pot dividir per zero
Tria una opció: 5
Adéu!
# Estructura bàsica del menú
while true; do
echo "=== CALCULADORA ==="
echo "1. Sumar"
# ...
read -p "Tria una opció: " opcio
case $opcio in
1)
# llegir números i cridar sumar
;;
5)
echo "Adéu!"
exit 0
;;
esac
done
Crea un script validador.sh amb una funció que comprova l'estat d'un fitxer.
Crear una funció validar_fitxer() que:
El programa principal ha de:
./validador.sh /etc/passwd /tmp/fitxer_inexistent /bin/bash
=== Validant /etc/passwd ===
✓ El fitxer existeix
✓ És un fitxer regular
✓ És llegible
✗ No és escrivible
✗ No és executable
Mida: 2847 bytes
Estat: VÀLID (codi 0)
=== Validant /tmp/fitxer_inexistent ===
✗ El fitxer no existeix
Estat: ERROR (codi 2)
=== Validant /bin/bash ===
✓ El fitxer existeix
✓ És un fitxer regular
✓ És llegible
✗ No és escrivible
✓ És executable
Mida: 1234567 bytes
Estat: VÀLID (codi 0)
=== RESUM ===
Total fitxers: 3
Vàlids: 2
Errors: 1
validar_fitxer() {
local fitxer=$1
echo "=== Validant $fitxer ==="
# Comprovar si s'ha passat paràmetre
if [ -z "$fitxer" ]; then
echo "✗ No s'ha especificat fitxer"
return 1
fi
# Comprovar existència
if [ ! -e "$fitxer" ]; then
echo "✗ El fitxer no existeix"
return 2
fi
# Més comprovacions...
return 0
}
Crea un script backup.sh que generi còpies de seguretat d'un directori.
Crear una funció fer_backup() que:
backup_NOMDIR_YYYYMMDD_HHMMSS.tar.gzCrear una funció llistar_backups() que:
El programa principal ha de:
-b (fer backup), -l (llistar)./backup.sh -b /home/usuari/documents
Creant backup de /home/usuari/documents...
Directori de destinació: /tmp/backups
Arxiu creat: /tmp/backups/backup_documents_20240108_143055.tar.gz
Mida: 15.3 MB
Temps: 2.5 segons
Backup completat amb èxit!
./backup.sh -l
=== Backups disponibles a /tmp/backups ===
backup_documents_20240108_143055.tar.gz 15.3 MB 2024-01-08 14:30
backup_documents_20240107_091245.tar.gz 14.8 MB 2024-01-07 09:12
backup_projecte_20240106_183020.tar.gz 3.2 MB 2024-01-06 18:30
Total: 3 backups (33.3 MB)
fer_backup() {
local origen=$1
local desti=${2:-/tmp/backups}
# Validar origen
if [ ! -d "$origen" ]; then
echo "Error: El directori $origen no existeix"
return 1
fi
# Crear directori destinació
mkdir -p "$desti"
# Generar nom del fitxer
local nom_dir=$(basename "$origen")
local timestamp=$(date +%Y%m%d_%H%M%S)
local arxiu="backup_${nom_dir}_${timestamp}.tar.gz"
local ruta_completa="$desti/$arxiu"
# Crear backup
echo "Creant backup de $origen..."
local temps_inici=$(date +%s)
tar -czf "$ruta_completa" -C "$(dirname "$origen")" "$(basename "$origen")" 2>/dev/null
if [ $? -eq 0 ]; then
local temps_fi=$(date +%s)
local temps_total=$((temps_fi - temps_inici))
local mida=$(du -h "$ruta_completa" | cut -f1)
echo "Arxiu creat: $ruta_completa"
echo "Mida: $mida"
echo "Temps: $temps_total segons"
return 0
else
echo "Error creant el backup"
return 2
fi
}
# Gestió d'opcions
case $1 in
-b)
fer_backup "$2" "$3"
;;
-l)
llistar_backups "${2:-/tmp/backups}"
;;
*)
mostrar_ajuda
;;
esac
Crea un script amb funcions per gestionar logs:
log_info() - escriu un missatge informatiulog_error() - escriu un missatge d'errorlog_warning() - escriu un missatge d'avísllegir_logs() - llegeix i filtra logs per tipusCada missatge ha de tenir:
log_info "Iniciant procés"
log_error "No s'ha pogut obrir el fitxer" 2
log_warning "Memòria al 85%"
Exemple de sortida al fitxer de log:
[2024-01-08 14:30:55] [INFO] Iniciant procés
[2024-01-08 14:30:56] [ERROR:2] No s'ha pogut obrir el fitxer
[2024-01-08 14:31:02] [WARNING] Memòria al 85%