Probleme en shell

Résolu
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

  1. Modérateur
    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 ]
    1. 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....