#!/bin/bash # Path al file JSON FILE_JSON="domande.json" # Path al file dei risultati FILE_RISULTATI="risultati_quiz.txt" # Verifica se jq è installato if ! command -v jq &> /dev/null then echo "Il comando jq non è installato. Installa jq per proseguire." exit 1 fi # Verifica se Zenity è installato if ! command -v zenity &> /dev/null then echo "Il comando zenity non è installato. Installa zenity per proseguire." exit 1 fi # Imposta quanti quesiti selezionare per ciascun livello NUM_FACILI=3 NUM_MEDIE=2 NUM_DIFFICILI=1 # Inizializza il punteggio e il numero di domande totali punteggio=0 totale_domande=0 # Funzione per selezionare domande casuali da una categoria seleziona_domande() { local livello=$1 local numero=$2 jq -c ".domande.$livello | .[]" "$FILE_JSON" | shuf -n "$numero" } # Funzione per presentare una domanda e raccogliere la risposta con Zenity presenta_domanda() { local domanda=$1 local risposte=("${!2}") local corretta=$3 # Mostra la domanda con Zenity risposta=$(zenity --list --radiolist \ --title="Quiz Linux by PCOfficina" \ --text="$domanda" \ --column="Scelta" --column="Risposta" \ FALSE "${risposte[0]}" FALSE "${risposte[1]}" FALSE "${risposte[2]}" FALSE "${risposte[3]}" \ 2> /dev/null) # Controlla se la risposta è corretta if [ "$risposta" == "$corretta" ]; then ((punteggio++)) fi # Incrementa il numero totale di domande ((totale_domande++)) } # Gestire le domande senza usare il subshell per mantenere i punteggi # Seleziona domande facili domande_facili=$(seleziona_domande "facile" "$NUM_FACILI") while read -r riga; do domanda=$(echo "$riga" | jq -r '.domanda') risposte=($(echo "$riga" | jq -r '.risposte[]')) corretta=$(echo "$riga" | jq -r '.corretta') presenta_domanda "$domanda" risposte[@] "$corretta" done <<< "$domande_facili" # Seleziona domande medie domande_medie=$(seleziona_domande "medio" "$NUM_MEDIE") while read -r riga; do domanda=$(echo "$riga" | jq -r '.domanda') risposte=($(echo "$riga" | jq -r '.risposte[]')) corretta=$(echo "$riga" | jq -r '.corretta') presenta_domanda "$domanda" risposte[@] "$corretta" done <<< "$domande_medie" # Seleziona domande difficili domande_difficili=$(seleziona_domande "difficile" "$NUM_DIFFICILI") while read -r riga; do domanda=$(echo "$riga" | jq -r '.domanda') risposte=($(echo "$riga" | jq -r '.risposte[]')) corretta=$(echo "$riga" | jq -r '.corretta') presenta_domanda "$domanda" risposte[@] "$corretta" done <<< "$domande_difficili" # Calcola il punteggio massimo possibile (totale_domande * 1 punto per ogni risposta corretta) punteggio_massimo=$totale_domande # Richiedi il nome dell'utente nome_utente=$(zenity --entry --title="Inserisci il tuo nome" --text="Inserisci il tuo nome utente:" 2> /dev/null) # Verifica che il nome sia stato inserito if [ -z "$nome_utente" ]; then zenity --error --text="Nome utente non inserito. Il quiz non può essere completato senza nome." exit 1 fi # Mostra il riepilogo finale con il punteggio e le domande corrette zenity --info --title="Risultato del Quiz" --text="Domande corrette: $punteggio/$totale_domande\nPunteggio ottenuto: $punteggio\nPunteggio massimo possibile: $punteggio_massimo" # Salva il risultato nel file dei risultati echo "$nome_utente:$punteggio/$totale_domande:$punteggio:$punteggio_massimo" >> "$FILE_RISULTATI" # Conferma il salvataggio zenity --info --title="Risultato Salvato" --text="Il risultato è stato salvato con successo nel file $FILE_RISULTATI!"