#1 Le 23/07/2020, à 18:13
- pc-bluecode
[résolu]utilisation de dd dans une boucle et menu
Bonjour à tous !
Je me suis écrit un petit script qui me permets d'effacer des disques durs de manière sécurisée, voulant l'étoffer d'un menu, il me renvoie une erreur à l'exécution : ligne 72: erreur de syntaxe : fin de fichier prématurée
sauf que je ne trouve pas l'erreur de syntaxe, pourriez-vous m'aider ?
voici le script en question, et oui je sais ce que je fais avec cette commande (cf. Commandes dangereuses, le disclaimer du script)
#!/bin/bash
#Variables
pc=$HOSTNAME
prog=dd-clear-menu
date=$(date +"%d-%m-%Y")
log="/log/$pc/$prog_$date.log"
log_err="/log/$pc/errors/$prog_$date.log"
#Script
echo "$date Debut de $prog" >$log >$log_err
echo -e "Disclaimer : Vous vous apprêtez à effacer totalement votre disque sans aucune récupération possible, \n faites attention au disque que vous avez choisis,\n je ne peut être tenu responsable d'éventuelles pertes de données"
fct_menu ()
{
reset
echo
echo "Choisissez une option [1-4]"
echo
echo "1 : effacement simple (1 passage, rapide)"
echo "2 : effacement sécurisé (7 passages, long)"
echo "3 : effacement très sécurisé (35 passages, très long)"
echo "4 : effacement personnalisé"
echo "x : quitter"
echo -n "veuillez choisir :"
read optionmenu
case $optionmenu in
1)
echo
echo "lancement de l'option 1"
echo
read -p 'choix du disque (par exemple sda/hda/...) : ' SDX
for n in `seq 1`; do dd if=/dev/zero of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err ;
for n in `seq 1`; do dd if=/dev/urandom of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err ; fct_menu;;
2)
echo
echo "lancement de l'option 2"
echo
read -p 'choix du disque (par exemple sda/hda/...) : ' SDX
for n in `seq 7`; do dd if=/dev/zero of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err ;
for n in `seq 7`; do dd if=/dev/urandom of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err; fct_menu;;
3)
echo
echo "lancement de l'option 3"
echo
read -p 'choix du disque (par exemple sda/hda/...) : ' SDX
for n in `seq 35`; do dd if=/dev/zero of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err ;
for n in `seq 35`; do dd if=/dev/urandom of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err; fct_menu;;
4)
echo
echo "lancement de l'option 4"
echo
read -p 'choix du disque (par exemple sda/hda/...) : ' SDX
echo "choississez le nombre de passage"
read -p "nombre de passage : " B1
for n in `seq $B1`; do dd if=/dev/zero of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err ;
for n in `seq $B1`; do dd if=/dev/urandom of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err; fct_menu;;
x)
echo "fin de $prog" >>$log >>$log_err
exit;;
*)
echo
echo "erreur de frappe"
echo
fct_menu;;
esac
je n'ai que le disclaimer qui est exécuté. Une idée ?
Dernière modification par pc-bluecode (Le 25/07/2020, à 06:06)
Hors ligne
#2 Le 23/07/2020, à 18:39
- nany
Re : [résolu]utilisation de dd dans une boucle et menu
Bonjour,
ligne 72: erreur de syntaxe : fin de fichier prématurée
fct_menu () {
Il manque } quelque part.
Avec une indentation plus rigoureuse, tu t’en serais rendu compte.
Dernière modification par nany (Le 23/07/2020, à 18:43)
Hors ligne
#3 Le 23/07/2020, à 18:41
- Nuliel
Re : [résolu]utilisation de dd dans une boucle et menu
Il manque aussi des lignes, le script que tu indiques fait 69 lignes et il y a une erreur à la ligne 72
Hors ligne
#4 Le 23/07/2020, à 18:42
- Watael
Re : [résolu]utilisation de dd dans une boucle et menu
salut,
la fonction n'est pas close, ou le script n'est collé en entier.
la fonction n'est pas appelée, ou le script n'est collé en entier.
seq n'est pas indispensable :
fin=10
for ((i=1; i<=$fin; i++)); do : ...; done
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#5 Le 23/07/2020, à 18:51
- MicP
Re : [résolu]utilisation de dd dans une boucle et menu
Bonjour
À moins que le script donné dans le message #1 ne soit une copie tronquée,
ajouter les deux lignes suivantes
à la fin du script :
}
fct_menu
Dernière modification par MicP (Le 23/07/2020, à 18:53)
Hors ligne
#6 Le 23/07/2020, à 20:31
- pc-bluecode
Re : [résolu]utilisation de dd dans une boucle et menu
Bonjour,
Il manque } quelque part.
Avec une indentation plus rigoureuse, tu t’en serais rendu compte.
Merci, oui je sais j'ai toujours de la peine avec l'indentation, des lien à me conseiller pour m'améliorer là-dessus ?
salut,
la fonction n'est pas close, ou le script n'est collé en entier.
la fonction n'est pas appelée, ou le script n'est collé en entier.seq n'est pas indispensable :
fin=10 for ((i=1; i<=$fin; i++)); do : ...; done
le seq est là car j'ai simplement repris le code que j'avais d'un autre script, la partie 4 en réalité.
et flemme de tout retaper
Bonjour
À moins que le script donné dans le message #1 ne soit une copie tronquée,
ajouter les deux lignes suivantes
à la fin du script :} fct_menu
merci, c'est ce qu'il manquait en effet.
Par contre le disclaimer n'étant plus visible, je dois l'ajouter à chaque option du menu si je suis bien la logique de la syntaxe et non au début du script comme je l'ai fait, ou y-a-t-il une solution pour moins charger le script ?
EDIT : j'ai trouvé, suffit de retirer le reset en début de fonction et le tour est joué
Voici le code avec une bien meilleure indentation @nany
#!/bin/bash
#Variables
pc=$HOSTNAME
prog=clear-dd
date=$(date +"%d-%m-%Y")
log="/log/$pc/clear-dd_$date.log"
log_err="/log/$pc/errors/clear-dd_$date.log"
#Script
echo "$date Debut de $prog" >$log >$log_err
echo -e "Disclaimer : Vous vous apprétez à effacer totalement votre disque sans aucune récupération possible, faites attention au disque que vous avez choisis,\n je ne peut être tenu responsable d'éventuelles pertes de données"
fct_menu ()
{
echo
echo "Choisissez une option [1-4]"
echo
echo "1 : effacement simple (1 passage, rapide)"
echo "2 : effacement sécurisé (7 passages, long)"
echo "3 : effacement très sécurisé (35 passages, très long)"
echo "4 : effacement personnalisé"
echo "x : quitter"
echo -n "veuillez choisir :"
read optionmenu
case $optionmenu in
1)
echo
echo "lancement de l'option 1"
echo
read -p 'choix du disque (par exemple sda/hda/...) : ' SDX
for n in `seq 1`; do dd if=/dev/zero of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err ;
for n in `seq 1`; do dd if=/dev/urandom of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err ; fct_menu;;
2)
echo
echo "lancement de l'option 2"
echo
read -p 'choix du disque (par exemple sda/hda/...) : ' SDX
for n in `seq 7`; do dd if=/dev/zero of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err ;
for n in `seq 7`; do dd if=/dev/urandom of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err; fct_menu;;
3)
echo
echo "lancement de l'option 3"
echo
read -p 'choix du disque (par exemple sda/hda/...) : ' SDX
for n in `seq 35`; do dd if=/dev/zero of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err ;
for n in `seq 35`; do dd if=/dev/urandom of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err; fct_menu;;
4)
echo
echo "lancement de l'option 4"
echo
read -p 'choix du disque (par exemple sda/hda/...) : ' SDX
echo "choississez le nombre de passage"
read -p "nombre de passage : " B1
for n in `seq $B1`; do dd if=/dev/zero of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err ;
for n in `seq $B1`; do dd if=/dev/urandom of=/dev/$SDX bs=8b conv=notrunc; done >>$log 2>>$log_err; fct_menu;;
x)
echo "fin de $prog" >>$log >>$log_err
exit;;
*)
echo
echo "erreur de frappe"
echo
fct_menu;;
esac
}
fct_menu
Dernière modification par pc-bluecode (Le 25/07/2020, à 06:19)
Hors ligne