![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
kilkikou
j'essaye de faire ca comme ca :
1 2 3 4 5 6 7 8 9 10 11 12 13
| r='ls -l $1 |cut -c 2'
w='ls -l $1 |cut -c 3'
x='ls -l $1 |cut -c 4'
if [ $r = r ] ; then
echo "Lecture"
fi
if [ $w = w ] ; then
echo "Ecriture"
fi
if [ $x = x ] ; then
echo "Exécution"
fi |
mais ca me met un message d'erreur :
./tp: line 33: [: trop d'arguments
./tp: line 36: [: trop d'arguments
./tp: line 39: [: trop d'arguments
Quelqu'un possède la solution ?
C'est assez courant en shell lorsque tu remplis une variable puis que tu la compares style
1 2
| read var
test $var = ... |
Si la variable est mal remplie, le shell voit
Et là, il aime pas car il lui faut impérativement un élément à mettre avant le "="
=> Solution => mettre des guillemets
1 2
| read var
test "$var" = "..." |
=> Là, même si la variable est vide, il y aura quand-même quelque chose à comparer
1 2 3
| [ "$r" = "r" ] && echo "Lecture"
[ "$w" = "w" ] && echo "Ecriture"
[ "$x" = "x" ] && echo "Exécution" |
Autre danger (spécifique à ton exercice) => si les bits spéciaux sont positionnés (sst), ils viendront masquer le "x" donc il te faut le vérifier
[ "$x" = "x" -o "$x" = "s" -o "$x" = "t" ] && echo "Exécution"
Partager