Probleme en shell

[Résolu/Fermé]
Signaler
-
 sAF -
Bonjour,
je suis en train de faire un script pour détarer automatiquement des sauvegardes.
les fichiers sont comme ceci:

bidule.0.tar
truc.0.tar
chose.0.tar
chose.1.tar
chose.2.tar

ou chose.x.tar est en fait une compression multi volumes
avec un maximum de 5 volumes

l'idée c'est:
je fais un ls que je met en tableau (je n'ai trouvé que cela pour accéder au fichier N+4 quand je lis ma sortie ls)
je lis le tableau
si je suis sur un fichier de type xx.0.tar et s'il existe le fichier xx.4.tar -> detare 5 volumes
sinon si je suis sur un fichier de type xx.0.tar et s'il existe le fichier xx.3.tar -> detare 4 volumes
et ainsi de suite jusqu'a xx.0.tar ou je detare uniquement ce volume

je me retrouve avec des erreurs:
[0.tar=0.tar: command not found
[1.tar=0.tar: command not found
etc..

je comprends bien qu'il y a un souci dans mes lignes de tests mais je ne trouve pas ou.

si quelqu'un peut m'aider ca serait super :o)


$2 est l'entrée /chemin/ envoyée au fichier

voici le code:
for DIRS in $(ls $2)
do
Tableau_Dir[$i]=$DIRS
#echo $i,${Tableau_Dir[$i]},$DIRS
i=$(($i+1))
done
j=0
while [ $j -lt $i ] ; do
if [${Tableau_Dir[$j]#*.}=0.tar -a ${Tableau_Dir[$(($j+4))]} -a ${Tableau_Dir[$(($j+4))]#*.}=4.tar] ; then
tar xvMfffff ${Tableau_Dir[$(($j+4))]} ${Tableau_Dir[$(($j+3))]} ${Tableau_Dir[$(($j+2))]} ${Tableau_Dir[$(($j+1))]} ${Tableau_Dir[$j]} $2
elif [${Tableau_Dir[$j]#*.}=0.tar -a ${Tableau_Dir[$(($j+3))]} -a ${Tableau_Dir[$(($j+3))]#*.}=3.tar] ; then
tar xvMffff ${Tableau_Dir[$(($j+3))]} ${Tableau_Dir[$(($j+2))]} ${Tableau_Dir[$(($j+1))]} ${Tableau_Dir[$j]} $2
elif [${Tableau_Dir[$j]#*.}=0.tar -a ${Tableau_Dir[$(($j+2))]} -a ${Tableau_Dir[$(($j+2))]#*.}=2.tar] ; then
tar xvMfff ${Tableau_Dir[$(($j+2))]} ${Tableau_Dir[$(($j+1))]} ${Tableau_Dir[$j]} $2
elif [${Tableau_Dir[$j]#*.}=0.tar -a ${Tableau_Dir[$(($j+1))]} -a ${Tableau_Dir[$(($j+1))]#*.}=1.tar] ; then
tar xvMff ${Tableau_Dir[$(($j+1))]} ${Tableau_Dir[$j]} $2
elif [${Tableau_Dir[$j]#*.}=0.tar] ; then
tar xvMf ${Tableau_Dir[$j]} $2
fi
j=$(($j+1))
done

1 réponse

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 887
Salut,

J'ai regardé ton script vite fait, déjà commence par mettre un espace après chaque crochet ouvrant et un avant chaque crochet fermant ainsi qu'autour des signes "égale" ( = )...

Exemple :
elif [${Tableau_Dir[$j]#*.}=0.tar] =>> elif [ ${Tableau_Dir[$j]#*.} = 0.tar ]
merci beaucoup. j'ai pas encore les automatismes du shell.

ps: ne recopiez pas ce script tel quel s'il vous interesse il y a encore a corriger dessus....