[SHELL] Erreur de syntaxe

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

--

Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

12 réponses

  1. Modérateur
    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
    1. 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
      1. Modérateur
        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
    2. 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
      1. 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
        1. Modérateur
          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
          1. 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
            1. 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
              1. 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
                1. Modérateur
                  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
                  1. Ouais c'est ce que j'ai fini par faire mais bon c'est etrange quand meme.
                    Merci
                    0
                    1. Modérateur
                      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
                      1. Ah ouais pas con, ca marche effectivement.
                        Merci
                        0