pn sh
This commit is contained in:
parent
4f61b3147a
commit
1317f6f617
@ -1,12 +1,26 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$#" -ne 1 ] ; then
|
||||
echo 'Generate file tree at <path>. Not using random seed.'
|
||||
echo 'Usage: $0 <path>'
|
||||
if [ "$#" -eq 0 ] ; then
|
||||
|
||||
mkdir -p /home/$USER
|
||||
cd /home/$USER
|
||||
|
||||
elif [ "$#" -eq 2 ] ; then
|
||||
|
||||
mkdir -p $1
|
||||
cd $1
|
||||
|
||||
else
|
||||
|
||||
echo 'Generate file tree at /home/$USER. No random seed is used.'
|
||||
echo 'This is the first script you should run, in this life or the next.'
|
||||
echo "Usage: $0 --> Generate file tree at /home/\$USER with \$USER as owner of the files"
|
||||
echo "Usage: $0 <path> <username> --> Generate file tree at <path> with <username> as owner of the files"
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
cd $1
|
||||
#If you wish to change, add or remove items in this list, please be cautious never to use whitespace caracters in file- or foler names, nor special caracters (é, à,...), nor any escapable caracter which might pose an issue when handling within bash or sh (/, \, ", ', (), #, , ;, :, $, ...)
|
||||
|
||||
mkdir -p viens/voir/par/ici/si/jy/suis
|
||||
echo "faites demi-tour avec prudence" > viens/voir/par/ici/si/jy/suis/ah_bah_non
|
||||
@ -36,5 +50,15 @@ touch Musique/Merryl_coucou
|
||||
touch Musique/kriill_macarena
|
||||
touch Musique/Mona_Haydar_-_Hijabi
|
||||
touch Musique/Aya_Nakamura
|
||||
touch Musique/Mili_World.execute(me)
|
||||
touch Musique/Mili_World.execute.me
|
||||
|
||||
|
||||
if [ "$#" -eq 0 ] ; then
|
||||
|
||||
chown -R $USER /home/$USER
|
||||
|
||||
elif [ "$#" -eq 2 ] ; then
|
||||
|
||||
chown -R $2 $1
|
||||
|
||||
fi
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$#" -lt 3 ] ; then
|
||||
echo 'Usage: $0 <seed> <eleve> [root] <dir> [pw]'
|
||||
echo "Usage: $0 <seed> <eleve> [root] <dir> [pw]"
|
||||
echo '<seed>: seed directory'
|
||||
echo '<eleve>: student name'
|
||||
echo "<dir>: student's home directory"
|
||||
@ -12,6 +12,7 @@ fi
|
||||
|
||||
seed=$1
|
||||
eleve=$2
|
||||
dump=$3 #Hint : you should always pass /dev/null as $3, as it is considered safe for now.
|
||||
root=$4
|
||||
pw="/root/config/passwords.txt"
|
||||
|
||||
@ -19,16 +20,29 @@ if [[ "$#" == 5 ]] ; then
|
||||
pw=$5
|
||||
fi
|
||||
|
||||
mkdir -p enonces/$eleve prof/$eleve
|
||||
enonces=enonces/$eleve
|
||||
corriges=corriges/$eleve
|
||||
resultat=resultats/$eleve
|
||||
html=./html
|
||||
|
||||
mkdir -p $enonces $corriges $html $resultat
|
||||
rmdir $resultat ; touch $resultat
|
||||
|
||||
function ex1() {
|
||||
#cd quelque part et touch un fichier
|
||||
|
||||
folder=$(head -n 1 $seed/$eleve/folders.seed)
|
||||
|
||||
echo -e "\tEXERCICE 1\n\nRends-toi dans le dossier $folder et crée un fichier dont le nom est ton prénom (avec une majuscule au début, et des tirets à la place des espaces).\n\tEx: $folder/Jean-claude" > enonces/$eleve/ex1.txt
|
||||
echo -e "# EXERCICE 1 \n \nRends-toi dans le dossier \`$folder\` et crée un fichier dont le nom est ton prénom (avec une majuscule au début, et des tirets à la place des espaces). \n\t_Ex:_ \`$folder/Jean-claude\`" > $enonces/ex1.txt
|
||||
|
||||
echo -e "#!/bin/bash \nls $folder | grep -i $eleve ; exit \$?" > prof/$eleve/ex1.sh
|
||||
echo -e "\
|
||||
#!/bin/bash \n\
|
||||
ls $folder | grep -i $eleve >> $dump ; \n\
|
||||
result=\$? \n\
|
||||
if [[ \$result -eq 0 && ! \$(grep ex1 $resultat) ]] ; then \n\
|
||||
\techo ex1 >> $resultat ; \n\
|
||||
fi \n\
|
||||
exit \$result" > $corriges/ex1.sh
|
||||
}
|
||||
|
||||
function ex2() {
|
||||
@ -37,7 +51,10 @@ function ex2() {
|
||||
folder=$(head -n 2 $seed/$eleve/folders.seed | tail -n 1)
|
||||
int=$(head -n 1 $seed/$eleve/ints.seed)
|
||||
|
||||
echo -e "\tEXERCICE 2\n\nRends-toi dans le dossier $folder.\nListe les fichiers présents.\nCrée le fichier qui continue la suite logique.\n\tEx: 1.txt 2.txt 3.txt" > enonces/$eleve/ex2.txt
|
||||
#Si l'élève lit la doc de ls et essaie de faire un ls -a, il pourra lire les scripts de correction
|
||||
ln -s $corriges $folder/.correction >> $dump
|
||||
|
||||
echo -e "# EXERCICE 2 \n\nRends-toi dans le dossier \`$folder\`. \nListe les fichiers présents. \nCrée le fichier qui continue la suite logique. \n\t_Ex:_ \`a.txt b.txt c.txt\` **--> \`d.txt\`**" > $enonces/ex2.txt
|
||||
|
||||
for i in $(seq 1 $int) ; do
|
||||
touch $folder/$i.txt
|
||||
@ -45,7 +62,14 @@ function ex2() {
|
||||
|
||||
((i=int+1))
|
||||
|
||||
echo -e "#!/bin/bash \nls $folder | grep -i $i.txt ; exit \$?" > prof/$eleve/ex2.sh
|
||||
echo -e "\
|
||||
#!/bin/bash \n\
|
||||
ls $folder | grep -i $i.txt >> $dump \n\
|
||||
result=\$? \n\
|
||||
if [[ \$result -eq 0 && ! \$(grep ex2 $resultat) ]] ; then \n\
|
||||
\techo ex2 >> $resultat ; \n\
|
||||
fi \n\
|
||||
exit \$result" > $corriges/ex2.sh
|
||||
}
|
||||
|
||||
function ex3() {
|
||||
@ -58,9 +82,16 @@ function ex3() {
|
||||
|
||||
echo -e "Va créer un fichier $filename.txt dans le dossier $folder." > $folder2/$filename2
|
||||
|
||||
echo -e "Suis les instructions du fichier $folder2/$filename2" > enonces/$eleve/ex3.txt
|
||||
echo -e "# EXERCICE 3 \n \nSuis les instructions du fichier \`$folder2/$filename2\`" > $enonces/ex3.txt
|
||||
|
||||
echo -e "#!/bin/bash \nls $folder | grep -i $filename ; exit \$?" > prof/$eleve/ex3.sh
|
||||
echo -e "\
|
||||
#!/bin/bash \n\
|
||||
ls $folder | grep -i $filename >> $dump \n\
|
||||
result=\$? \n\
|
||||
if [[ \$result -eq 0 && ! \$(grep ex3 $resultat) ]] ; then \n\
|
||||
\techo ex3 >> $resultat ; \n\
|
||||
fi \n\
|
||||
exit \$result" > $corriges/ex3.sh
|
||||
}
|
||||
|
||||
function ex4() {
|
||||
@ -68,13 +99,18 @@ function ex4() {
|
||||
|
||||
folder=$(head -n 1 $seed/$eleve/folders.seed)
|
||||
|
||||
echo -e "Inscris le mot de passe avec lequel tu t'es connecté.e au début de la séance dans le fichier de l'exercice 1.\n\nRappel : ton fichier est censé se trouver dans le dossier $folder" > enonces/$eleve/ex4.txt
|
||||
echo -e "# EXERCICE 4 \n \nInscris le mot de passe avec lequel tu t'es connecté.e au début de la séance dans le fichier de l'**exercice 1**. \n \n_Rappel :_ ton fichier est censé se trouver dans le dossier \`$folder\`" > $enonces/ex4.txt
|
||||
|
||||
echo "#!/bin/bash" > prof/$eleve/ex4.sh
|
||||
echo "file=\$(ls $folder | grep -m 1 -o -i $eleve)" >> prof/$eleve/ex4.sh
|
||||
echo "pass=\$(cat $pw | grep -i $eleve | cut -d = -f 2)" >> prof/$eleve/ex4.sh
|
||||
echo "cat $folder/\$file | grep -w \$pass" >> prof/$eleve/ex4.sh
|
||||
echo "exit \$?" >> prof/$eleve/ex4.sh
|
||||
echo -e "\
|
||||
#!/bin/bash \n\
|
||||
file=\$(ls $folder | grep -m 1 -o -i $eleve) \n\
|
||||
pass=\$(cat $pw | grep -i $eleve | cut -d = -f 2) \n\
|
||||
cat $folder/\$file | grep -w \$pass >> $dump \n\
|
||||
result=\$? \n\
|
||||
if [[ \$result -eq 0 && ! \$(grep ex4 $resultat) ]] ; then \n\
|
||||
\techo ex4 >> $resultat ; \n\
|
||||
fi \n\
|
||||
exit \$result" > $corriges/ex4.sh
|
||||
|
||||
}
|
||||
|
||||
@ -84,18 +120,32 @@ function ex5() {
|
||||
folder=$(head -n 1 $seed/$eleve/folders.seed)
|
||||
filename=$(head -n 3 $seed/$eleve/filenames.seed | tail -n 1)
|
||||
|
||||
echo -e "Nous allons maintenant manipuler le fichier de l'exercice 4 et le déplacer dans l'arborescence de dossiers. \nMais avant toute chose, il s'agit d'une information sensible (ton mot de passe inscrit en clair, tout de même !), nous allons donc en faire une copie de sauvegarde.\nCrée dans le même dossier une copie du fichier $eleve qui s'appellera $eleve.$filename." > enonces/$eleve/ex5.txt
|
||||
echo -e "# EXERCICE 5 \n \nNous allons maintenant manipuler le fichier de l'**exercice 4** et le déplacer dans l'arborescence de dossiers. \nMais avant toute chose, il s'agit d'une information sensible (ton mot de passe inscrit en clair, tout de même !), nous allons donc en faire une copie de sauvegarde. \nPour commencer, rends-toi dans le dossier de l'**exercice 4** et crée dans ce même dossier une copie du fichier \`$eleve\` qui s'appellera \`$eleve.$filename\`." > $enonces/ex5.txt
|
||||
|
||||
echo -e "#!/bin/bash\ntest -s $folder/$eleve -a \$(cat $folder/$eleve) = \$(cat $folder/$eleve.$filename)\nexit \$?" > prof/$eleve/ex5.sh
|
||||
echo -e "\
|
||||
#!/bin/bash \n\
|
||||
test -s $folder/$eleve -a \$(cat $folder/$eleve) = \$(cat $folder/$eleve.$filename) \n\
|
||||
result=\$? \n\
|
||||
if [[ \$result -eq 0 && ! \$(grep ex5 $resultat) ]] ; then \n\
|
||||
\techo ex5 >> $resultat ; \n\
|
||||
fi \n\
|
||||
exit \$result" > $corriges/ex5.sh
|
||||
}
|
||||
|
||||
function ex6() {
|
||||
#use mkdir
|
||||
|
||||
filename=$(head -n 4 $seed/$eleve/filenames.seed | tail -n 1)
|
||||
echo -e "Il est temps de protéger un peu ces données personnelles e tde s'inquiéter de la sécurité de tes données informatiques.\nCrée un dossier $filename dans $root/unix/home/sudo, puis le sous-dossier password-storage dans $root/unix/home/sudo/$filename.\nCe sera l'emplacement futur des données sensibles." > enonces/$eleve/ex6.txt
|
||||
echo -e "# EXERCICE 6 \n \nIl est temps de protéger un peu ces données personnelles et de s'inquiéter de la sécurité de tes données informatiques. \nCrée un dossier \`$filename\` dans \`$root/unix/home/sudo\`, puis le sous-dossier \`password-storage\` dans \`$root/unix/home/sudo/$filename\`. \nCe sera l'emplacement futur des données sensibles." > $enonces/ex6.txt
|
||||
|
||||
echo -e "#!/bin/bash\ntest -d \"$root/unix/home/sudo/$filename/password-storage\"\nexit \$?" > prof/$eleve/ex6.sh
|
||||
echo -e "\
|
||||
#!/bin/bash \n\
|
||||
test -d \"$root/unix/home/sudo/$filename/password-storage\" \n\
|
||||
result=\$? \n\
|
||||
if [[ \$result -eq 0 && ! \$(grep ex6 $resultat) ]] ; then \n\
|
||||
\techo ex6 >> $resultat ; \n\
|
||||
fi \n\
|
||||
exit \$result" > $corriges/ex6.sh
|
||||
}
|
||||
|
||||
function ex7() {
|
||||
@ -104,18 +154,23 @@ function ex7() {
|
||||
folder=$(head -n 1 $seed/$eleve/folders.seed)
|
||||
folder2=$root/Video/My_Little_Pony-Friendship_is_Magic
|
||||
filename=$(head -n 5 $seed/$eleve/filenames.seed | tail -n 1)
|
||||
echo -e "Maintenant que cette piste alléchante a été déposée pour lurer d'éventuels intrus.es, on va ranger ton mot de passe là où personne n'ira jamais le chercher :\nDéplace le fichier $folder/$eleve contenant ton mot de passe dans le dossier $folder2 en le renomant $filename" > enonces/$eleve/ex7.txt
|
||||
echo -e "# EXERCICE 7 \n \nMaintenant que cette piste alléchante a été déposée pour lurer d'éventuels intrus.es, on va ranger ton mot de passe là où personne n'ira jamais le chercher : \nDéplace le fichier \`$folder/$eleve\` contenant ton mot de passe dans le dossier \`$folder2\` en le renomant \`$filename\`" > $enonces/ex7.txt
|
||||
|
||||
echo -e "#!/bin/bash\n\nexit \$?" > prof/$eleve/ex7.sh
|
||||
echo -e "\
|
||||
#!/bin/bash \n\
|
||||
pass=\$(cat $pw | grep -i $eleve | cut -d = -f 2) \n\
|
||||
if [[ -e $folder/$eleve ]] ; then \n\
|
||||
exit 1 \n\
|
||||
else \n\
|
||||
cat $folder2/$filename | grep -w \$pass \n\
|
||||
fi \n\
|
||||
|
||||
result=\$? \n\
|
||||
if [[ \$result -eq 0 && ! \$(grep ex7 $resultat >> $dump) ]] ; then \n\
|
||||
\techo ex7 >> $resultat ; \n\
|
||||
fi \n\
|
||||
exit \$result" > $corriges/ex7.sh
|
||||
|
||||
echo "#!/bin/bash" > prof/$eleve/ex7.sh
|
||||
echo "pass=\$(cat $pw | grep -i $eleve | cut -d = -f 2)" >> prof/$eleve/ex7.sh
|
||||
echo "if [[ -e $folder/$eleve ]] ; then " >> prof/$eleve/ex7.sh
|
||||
echo " exit 1" >> prof/$eleve/ex7.sh
|
||||
echo "else" >> prof/$eleve/ex7.sh
|
||||
echo " cat $folder2/$filename | grep -w \$pass" >> prof/$eleve/ex7.sh
|
||||
echo "fi" >> prof/$eleve/ex7.sh
|
||||
echo "exit \$?" >> prof/$eleve/ex7.sh
|
||||
}
|
||||
|
||||
function ex8() {
|
||||
@ -124,9 +179,16 @@ function ex8() {
|
||||
folder=$(head -n 1 $seed/$eleve/folders.seed)
|
||||
filename=$(head -n 3 $seed/$eleve/filenames.seed | tail -n 1)
|
||||
|
||||
echo -e "Maintenant que tes données sont bien sécurisées et à l'abri de tout.e hackeur.euse mal intentionné.e (ahem...), on peut se débarasser de la copie de sauvegarde que l'on avait faite à l'exercice 5.\nRetourne supprimer le fichier $folder/$eleve.$filename pour effacer tes traces." > enonces/$eleve/ex8.txt
|
||||
echo -e "# EXERCICE 8 \n \nMaintenant que tes données sont bien sécurisées et à l'abri de tout.e hackeur.euse mal intentionné.e (_ahem..._), on peut se débarasser de la copie de sauvegarde que l'on avait faite à l'**exercice 5**. \nRetourne supprimer le fichier \`$folder/$eleve.$filename\` pour effacer tes traces." > $enonces/ex8.txt
|
||||
|
||||
echo -e "#!/bin/bash\ntest ! -e $folder/$eleve.$filename\nexit \$?" > prof/$eleve/ex8.sh
|
||||
echo -e "\
|
||||
#!/bin/bash \n\
|
||||
test ! -e $folder/$eleve.$filename \n\
|
||||
result=\$? \n\
|
||||
if [[ \$result -eq 0 && ! \$(grep ex8 $resultat) ]] ; then \n\
|
||||
\techo ex8 >> $resultat ; \n\
|
||||
fi \n\
|
||||
exit \$result" > $corriges/ex8.sh
|
||||
|
||||
}
|
||||
|
||||
@ -139,4 +201,12 @@ ex6
|
||||
ex7
|
||||
ex8
|
||||
|
||||
#chown root:root $corriges/ex*.sh
|
||||
chmod +x $corriges/ex*.sh
|
||||
|
||||
for i in {1..8} ; do
|
||||
echo -e " \n \n_Vérifie ton résultat :_ [Exercice $i](../$corriges/ex$i.sh)" >> $enonces/ex$i.txt
|
||||
done
|
||||
|
||||
|
||||
pandoc --from=markdown --to=html --output=$html/$eleve.html --table-of-contents --columns=80 $enonces/ex*.txt
|
||||
|
@ -1,6 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
USAGE="gen_seed.sh ROOT FOLDERS FILES FILENAMES INTEGERS USER DIR : generate a file USER.seed in the DIR folder, which can be then used to generate exercises."
|
||||
USAGE="$0 ROOT FOLDERS FILES FILENAMES INTEGERS USER DIR :\
|
||||
\n\tgenerate a semi-random seed in the DIR folder, which can be then used to \n\
|
||||
\trandomize exercises.\n\
|
||||
Parameters:\n\
|
||||
\tROOT : the folder in which to find folders, files, ... Usually, the student's\n\
|
||||
\thome directory.\n\
|
||||
\tFOLDERS : how many random folders to pick \n\
|
||||
\tFILES : how many random files to pick\n\
|
||||
\tFILENAMES : how many random filenames to pick from the dictionnary haddock.list\n\
|
||||
\tINTEGERS : how many random integers to pick\n\
|
||||
\tUSER : username of the student\n\
|
||||
\tDIR : folder in which to store the generated seeds"
|
||||
|
||||
if [[ $# != 7 ]] ; then echo -e $USAGE ; exit 0 ; fi
|
||||
|
||||
@ -19,9 +30,9 @@ USER=$6
|
||||
# Seeds storage
|
||||
DIR=$7
|
||||
|
||||
if echo $DIR | grep -v /$ ; then DIR=$DIR/ ; fi
|
||||
if echo $DIR | grep -v /$ > /dev/null ; then DIR=$DIR/ ; fi
|
||||
|
||||
mkdir $DIR$USER ;
|
||||
mkdir -p $DIR$USER ;
|
||||
|
||||
find $root -type d | shuf | head -n $folders > $DIR$USER/folders.seed
|
||||
|
||||
|
17
exercices/init.sh
Normal file
17
exercices/init.sh
Normal file
@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
if [ "$#" -ne 1 ] ; then
|
||||
echo -e "usage : $0 <FILE>\n\tGenerate the exercice for a class.\nFILE must be a list containing identifiers (names) and passwords for each student, separated by a '='.\n\tEx:\n\t\tJean-claude-dus=mot_de_passe\n\t\tJean-dus-claude=passe_de_mot\n\t\tClaude-jean-dus=azerty\n\nThis file must be executed from the same folder as the files gen_arbo.sh, gen_seed.sh and gen_enonces.sh.\nFolders will be created in this directory, containing the exercices, their correction and the grades of the students."
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
cat $1
|
||||
|
||||
home=/home
|
||||
names=$(cut -d '=' -f 1 $1)
|
||||
|
||||
|
||||
for name in $names ; do
|
||||
./gen_arbo.sh $home/$name $name
|
||||
./gen_seed.sh $home/$name 4 0 5 1 $name seeds
|
||||
./gen_enonces.sh seeds $name /dev/null $home/$name $1
|
||||
done
|
Loading…
Reference in New Issue
Block a user