[SHELL] Erreur de syntaxe

santiago69 Messages postés 485 Statut Membre -  
santiago69 Messages postés 485 Statut Membre -
Salut a tous,
Je ne vois pas ou est l'erreur de syntaxe.
Si le script n'est pas lance en tant que root, le message d'erreur s'affiche mais la commande exit n'est pas realisee.
#!/bin/bash
syntax=$(basename "$0")' must be run as root\n'
[ $UID -ne 0 ] && (echo -e "$syntax"; exit 1)

Merci d'avance
Santiago

12 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Ben chez moi ça marche bien :
[tmpfs]$ cat santiago.sh
#!/bin/bash
syntax=$(basename "$0")' must be run as root\n'
[ $UID -ne 0 ] && (echo -e "$syntax"; exit 2)

[tmpfs]$ ./santiago.sh
santiago.sh must be run as root

[tmpfs]$ echo $?
2
[tmpfs]$
Bizarre ;-\
0
santiago69 Messages postés 485 Statut Membre 209
 
Incroyable !!!
Regarde ce que ca donne chez moi :
$ cat /usr/local/bin/groupadduser
#!/bin/bash
syntax=$(basename "$0")' must be run as root\n'
[ $UID -ne 0 ] && (echo -e "$syntax"; exit 1)
echo "Je veux pas voir cette ligne"
$ /usr/local/bin/groupadduser
groupadduser must be run as root

Je veux pas voir cette ligne
$ echo $?
0


0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Euh...non ! Là c'est normal le "0" dans la mesure où c'est le code retour de la dernière commande qui est retournée dans la variable "$?".
[tmpfs]$ cat santiago.sh
#!/bin/bash
syntax=$(basename "$0")' must be run as root\n'
[ $UID -ne 0 ] && (echo -e "$syntax"; exit 2)
echo $?
echo "c'est cool"
echo $?

[tmpfs]$ ./santiago.sh
santiago.sh must be run as root

2
c'est cool
0
[tmpfs]$
;-))
0
santiago69 Messages postés 485 Statut Membre 209
 
Encore plus incroyable !
Il execute bien la commande exit (puisque $? contient 2)
mais continu malgre tout.
C'est a devenir fou !
$ cat /usr/local/bin/groupadduser
#!/bin/bash
syntax=$(basename "$0")' must be run as root\n'
[ $UID -ne 0 ] && (echo -e "$syntax"; exit 2)
echo $?
echo "Je veux pas voir cette ligne"
echo $?
$ /usr/local/bin/groupadduser
groupadduser must be run as root

2
Je veux pas voir cette ligne
0


0
santiago69 Messages postés 485 Statut Membre 209
 
Pour info, j'ai affiche le resultat du script execute en temps que root.
$ cat /usr/local/bin/groupadduser
#!/bin/bash
syntax=$(basename "$0")' must be run as root\n'
[ $UID -ne 0 ] && (echo -e "$syntax"; exit 2)
echo $?
echo "Je veux pas voir cette ligne"
echo $?
$ /usr/local/bin/groupadduser
groupadduser must be run as root

2
Je veux pas voir cette ligne
0
$ sudo /usr/local/bin/groupadduser
1
Je veux pas voir cette ligne
0


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Je n'avais pas compris que tu voulais quitter le script immédiatement, je croyais juste que tu voulais gérer le code retour ;-[

Bon alors pour faire ce que tu veux, il suffit juste d'enlever les parenthèses, en fait les parenthèses créent un shell fils et de ce fait la commande "exit" affecte le "fils" et non le shell père.

Donc modifie le script tel quel :
#!/bin/bash
syntax=$(basename "$0")' must be run as root\n'
[ $UID -ne 0 ] && echo -e "$syntax"; exit 2
echo $?
echo "c'est cool"
echo $?
et ça devrait le faire...
0
santiago69 Messages postés 485 Statut Membre 209
 
Ben non, justement j'ai ajoute les parentheses a cause de ca :

santiago@ks354286:~$ cat /usr/local/bin/groupadduser
#!/bin/bash
syntax=$(basename "$0")' must be run as root\n'
[ $UID -ne 0 ] && echo -e "$syntax"; exit 2
echo $?
echo "Je veux pas voir cette ligne"
echo $?
santiago@ks354286:~$ /usr/local/bin/groupadduser
groupadduser must be run as root

santiago@ks354286:~$ echo $?
2
santiago@ks354286:~$ sudo /usr/local/bin/groupadduser
santiago@ks354286:~$ echo $?
2


Autrement dit, il exit dans tous les cas.
C'est pas possible, on doit pas avoir le meme shell 8-|
0
santiago69 Messages postés 485 Statut Membre 209
 
Ce que je veux c'est :
Si on est root, on continu le script
Si on est pas root, on affiche l'erreur (must be root) et on sort sans continuer.
0
santiago69 Messages postés 485 Statut Membre 209
 
En syntaxe non reduite, je cherche a ecrire ca.
#!/bin/bash
syntax=$(basename "$0")' must be run as root\n'
if [\[ $UID -ne 0 ]\]; then
  echo -e "$syntax"
  exit 1
fi
echo "Vous etes root"

Je pourrais garder cette syntaxe bien sur, mais j'aimerais bien comprendre ce qu'il se passe avec l'autre syntaxe.

0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Essaye comme ça alors :
#!/bin/bash

syntax=$(basename "$0")' must be run as root\n'
if [ $UID -ne 0 ]
then echo -e "$syntax"
exit 2
fi
echo $?
echo "c'est cool"
echo $?
;-))
0
santiago69 Messages postés 485 Statut Membre 209
 
Ouais c'est ce que j'ai fini par faire mais bon c'est etrange quand meme.
Merci
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Et comme ça :
#!/bin/bash

syntax=$(basename "$0")' must be run as root\n'
[ $UID -ne 0 ] && echo -e "$syntax" && exit 2
echo $?
echo "c'est cool"
echo $?
ça le fait pas ?
0
santiago69 Messages postés 485 Statut Membre 209
 
Ah ouais pas con, ca marche effectivement.
Merci
0