Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/07/2020, à 19: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, à 07:06)

Hors ligne

#2 Le 23/07/2020, à 19:39

nany

Re : [résolu]utilisation de dd dans une boucle et menu

Bonjour,



pc-bluecode a écrit :

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, à 19:43)

Hors ligne

#3 Le 23/07/2020, à 19: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, à 19: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. wink

seq n'est pas indispensable :

fin=10
for ((i=1; i<=$fin; i++)); do : ...; done

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 23/07/2020, à 19: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, à 19:53)

Hors ligne

#6 Le 23/07/2020, à 21:31

pc-bluecode

Re : [résolu]utilisation de dd dans une boucle et menu

nany a écrit :

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 ?

Watael a écrit :

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. wink

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

MicP a écrit :

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, à 07:19)

Hors ligne