diff --git a/README.md b/README.md index cd1df12..cccc539 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # Domande_LINUXDAY -Easy domande linux day \ No newline at end of file +Domande quiz \ No newline at end of file diff --git a/domande.json b/domande.json new file mode 100644 index 0000000..afcb109 --- /dev/null +++ b/domande.json @@ -0,0 +1,210 @@ +{ + "domande": { + "facile": [ + { + "domanda": "Qual è il comando per visualizzare la directory corrente in Linux?", + "risposte": [ + "pwd", + "ls", + "cd", + "dir" + ], + "corretta": "pwd" + }, + { + "domanda": "In che anno è nato Linux?", + "risposte": [ + "1995", + "1987", + "1991", + "1979" + ], + "corretta": "1991" + }, + { + "domanda": "Qual è il comando per elencare i file in una directory?", + "risposte": [ + "pwd", + "ls", + "cd", + "mkdir" + ], + "corretta": "ls" + }, + { + "domanda": "Quale comando viene utilizzato per creare una nuova directory?", + "risposte": [ + "mkdir", + "cd", + "touch", + "rmdir" + ], + "corretta": "mkdir" + }, + { + "domanda": "Che comando viene utilizzato per cambiare directory?", + "risposte": [ + "cd", + "pwd", + "ls", + "mv" + ], + "corretta": "cd" + }, + { + "domanda": "Come si chiama il file di configurazione della shell Bash?", + "risposte": [ + ".bashrc", + ".bash_profile", + ".profile", + ".config" + ], + "corretta": ".bashrc" + } + ], + "medio": [ + { + "domanda": "Qual è il comando per modificare i permessi di un file?", + "risposte": [ + "chmod", + "chown", + "ls", + "ps" + ], + "corretta": "chmod" + }, + { + "domanda": "Qual è il comando per visualizzare le informazioni di rete del sistema?", + "risposte": [ + "ip", + "ping", + "netstat", + "lsmod" + ], + "corretta": "ip" + }, + { + "domanda": "Quale è la mascotte di Linux?", + "risposte": [ + "Foxit", + "Gnu", + "Tux", + "Rex" + ], + "corretta": "Tux" + }, + { + "domanda": "Quale tra queste non è una distro GNU/Linux?", + "risposte": [ + "VOID", + "Alma", + "KDE neon", + "Knoppix" + ], + "corretta": "VOID" + }, + { + "domanda": "Come si crea un link simbolico in Linux?", + "risposte": [ + "ln -s", + "symlink", + "link -s", + "ln" + ], + "corretta": "ln -s" + }, + { + "domanda": "Qual è il comando per visualizzare lo spazio disponibile su disco?", + "risposte": [ + "df", + "du", + "free", + "ls" + ], + "corretta": "df" + }, + { + "domanda": "Quale comando serve per terminare un processo in esecuzione utilizzando il suo PID?", + "risposte": [ + "kill", + "exit", + "stop", + "terminate" + ], + "corretta": "kill" + } + ], + "difficile": [ + { + "domanda": "Qual è il comando per cambiare il proprietario di un file?", + "risposte": [ + "chown", + "chmod", + "touch", + "ps" + ], + "corretta": "chown" + }, + { + "domanda": "Quale è il codename di Debian 8?", + "risposte": [ + "DuffyDcuk", + "Bookworm", + "Jessie", + "Buster" + ], + "corretta": "Jessie" + }, + { + "domanda": "Quale tra questi non è un DE?", + "risposte": [ + "Gnome", + "Plasma", + "Cosmic", + "XNU" + ], + "corretta": "XNU" + }, + { + "domanda": "Quale comando viene utilizzato per visualizzare le variabili di ambiente?", + "risposte": [ + "env", + "set", + "printenv", + "export" + ], + "corretta": "printenv" + }, + { + "domanda": "Come si monta un filesystem in Linux?", + "risposte": [ + "trmount", + "umount", + "mkdir", + "mount" + ], + "corretta": "mount" + }, + { + "domanda": "Che tipo di file è indicato da una 'd' nella prima colonna dell'output del comando 'ls -l'?", + "risposte": [ + "directory", + "file normale", + "link simbolico", + "pipe" + ], + "corretta": "directory" + }, + { + "domanda": "Quale comando permette di visualizzare i processi attualmente in esecuzione?", + "risposte": [ + "ps", + "top", + "jobs", + "pstree" + ], + "corretta": "ps" + } + ] + } +} \ No newline at end of file diff --git a/quiz_grafico.sh b/quiz_grafico.sh new file mode 100755 index 0000000..74a7727 --- /dev/null +++ b/quiz_grafico.sh @@ -0,0 +1,112 @@ +#!/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!" diff --git a/risultati_quiz.txt b/risultati_quiz.txt new file mode 100644 index 0000000..4ba7c60 --- /dev/null +++ b/risultati_quiz.txt @@ -0,0 +1 @@ +Michele_sandrino_pinelli:2/6:2:6