L'erreur de synthaxe de "if" et "do"

iman -  
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,




for i in 'find /var/www/webmail'; do if [[ -f $i ]]; then chmod 0400 $i; chown www-data:www-data $i; elif [[ -d $i ]]; then chmod 0555 $i; chown www-data:www-data $i;fi done
ou est l'erreur de synthaxe ???

1 réponse

mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 879
 
Le double crochet derrière le if, l'espace manquant entre ] et ;.

Dans le for tu as utilisé les quotes et non les backquotes (alt gr 7) que tu peux remplacer par $( ..... ).

Exemple :

nano plop.sh


Dans ce fichier on écrit :

#!/bin/sh
for i in $(find /var/www/webmail)
do
    if [ -f $i ] ; then
        chmod 0400 $i
    elif [ -d $i ] ; then
        chmod 0555 $i
    fi
    chown www-data:www-data $i
done


On sauve et on quitte (ctrl x) puis on met les droits en exécution, puis on lance :

chmod a+x plop.sh
./plop.sh


Je t'invite vivement à indenter ton code et à utiliser un éditeur muni d'une coloration syntaxique pour le bash (vim par exemple).

Note qu'en utilisant habilement find avec les options -exec et -type tu aurais pu écrire la même chose plus facilement.

Exemple : http://forum.ubuntu-fr.org/viewtopic.php?id=102733

Bonne chance
0