Problème script

Bonjour,

Alors je suis en train de faire un script pour ma pti netfilter/proxy Squid
Et j'obtiens cette erreur lorsque je lance le script:

: command not found:
'ptables.sh: line 19: syntax error near unexpected token `in
'ptables.sh: line 19: `case $reponse in

Voici mon script:

#!/bin/sh/

case=10

exit=8
while ["$exit"=8];
do

echo "0) Activer le routage"
echo "1) Effacer les tables"
echo "2) Interdir le passage des règles"
echo "3) Autoriser le passage des règles"
echo "4) Autoriser les DNS"
echo "5) Interdir les DNS"
echo "6) Autoriser le trafic HTTP"
echo "7) Interdir le trafic HTTP"
echo "8) QUITTER"

read reponse

case $reponse in

0)
echo 1 > /proc/sys/net/ipv4/ip_forward
;;

case $reponse in

1)
iptables -F
iptables -t nat -F
;;

case $reponse in

2)
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
;;

case $reponse in

3)
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;

case $reponse in

4)
iptables -A FORWARD -p udp -d 212.180.1.79 -i eth0 -o eth1 --dport 53 -j ACCEPT
iptables -A FORWARD -p udp -s 212.180.1.79 -i eth1 -o eth0 --sport 53 -j ACCEPT
iptables -A FORWARD -p udp -d 212.180.0.137 -i eth0 -o eth1 --dport 53 -j ACCEPT
iptables -A FORWARD -p udp -s 212.180.1.79 -i eth1 -o eth0 --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -d 212.180.1.79 -j ACCEPT
iptables -A OUTPUT -p udp --sport 53 -s 212.180.1.79 -j ACCEPT
;;

case $reponse in

5)
iptables -A FORWARD -p udp -d 212.180.1.79 -i eth0 -o eth1 --dport 53 -j DROP
iptables -A FORWARD -p udp -s 212.180.1.79 -i eth1 -o eth0 --sport 53 -j DROP
iptables -A FORWARD -p udp -d 212.180.0.137 -i eth0 -o eth1 --dport 53 -j DROP
iptables -A FORWARD -p udp -s 212.180.1.79 -i eth1 -o eth0 --sport 53 -j DROP
iptables -A OUTPUT -p udp --dport 53 -d 212.180.1.79 -j DROP
iptables -A OUTPUT -p udp --sport 53 -s 212.180.1.79 -j DROP
iptables -A OUTPUT -p udp --dport 53 -d 212.180.0.137 -j DROP
iptables -A OUTPUT -p udp --sport 53 -s 212.180.0.137 -j DROP
;;

case $reponse in

6)
iptables -A FORWARD -p tcp -o eth1 -i eth0 --dport 80 ACCEPT
iptables -A FORWARD -p tcp -i eth1 -o eth0 --sport 80 -mstate --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
;;

case $reponse in

7)
iptables -A FORWARD -p tcp -o eth1 -i eth0 --dport 80 DROP
iptables -A FORWARD -p tcp -i eth1 -o eth0 --sport 80 -mstate --state ESTABLISHED -j DROP
iptables -A OUTPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --sport 80 -j DROP
;;

case $reponse in

8)
$choix="0"
;;

esac

done

Pourriez vous m'aider s'il vous plait

Merci
Configuration: Linux Fedora
Firefox 1.5.0.1

9 réponses

  1. Modérateur
    Salut,

    Supprimes dans un 1er temps toutes les occurrences de "case $reponse in" (à part la 1ère) :
    #!/bin/sh/
    
    case=10
    
    exit=8
    while [ "$exit" = 8 ];
    do
    
    echo "0) Activer le routage"
    echo "1) Effacer les tables"
    echo "2) Interdir le passage des règles"
    echo "3) Autoriser le passage des règles"
    echo "4) Autoriser les DNS"
    echo "5) Interdir les DNS"
    echo "6) Autoriser le trafic HTTP"
    echo "7) Interdir le trafic HTTP"
    echo "8) QUITTER"
    
    read reponse
    
    case $reponse in 
    
    0)
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ;;
    
    
    1)
    iptables -F
    iptables -t nat -F
    ;;
    
    
    2)
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP
    ;;
    
    
    3)
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    ;;
    
    
    4)
    iptables -A FORWARD -p udp -d 212.180.1.79 -i eth0 -o eth1 --dport 53 -j ACCEPT
    iptables -A FORWARD -p udp -s 212.180.1.79 -i eth1 -o eth0 --sport 53 -j ACCEPT
    iptables -A FORWARD -p udp -d 212.180.0.137 -i eth0 -o eth1 --dport 53 -j ACCEPT
    iptables -A FORWARD -p udp -s 212.180.1.79 -i eth1 -o eth0 --sport 53 -j ACCEPT
    iptables -A OUTPUT -p udp --dport 53 -d 212.180.1.79 -j ACCEPT
    iptables -A OUTPUT -p udp --sport 53 -s 212.180.1.79 -j ACCEPT
    ;;
    
    
    5)
    iptables -A FORWARD -p udp -d 212.180.1.79 -i eth0 -o eth1 --dport 53 -j DROP
    iptables -A FORWARD -p udp -s 212.180.1.79 -i eth1 -o eth0 --sport 53 -j DROP
    iptables -A FORWARD -p udp -d 212.180.0.137 -i eth0 -o eth1 --dport 53 -j DROP
    iptables -A FORWARD -p udp -s 212.180.1.79 -i eth1 -o eth0 --sport 53 -j DROP
    iptables -A OUTPUT -p udp --dport 53 -d 212.180.1.79 -j DROP
    iptables -A OUTPUT -p udp --sport 53 -s 212.180.1.79 -j DROP
    iptables -A OUTPUT -p udp --dport 53 -d 212.180.0.137 -j DROP
    iptables -A OUTPUT -p udp --sport 53 -s 212.180.0.137 -j DROP
    ;;
    
    
    6)
    iptables -A FORWARD -p tcp -o eth1 -i eth0 --dport 80 ACCEPT
    iptables -A FORWARD -p tcp -i eth1 -o eth0 --sport 80 -mstate --state ESTABLISHED -j ACCEPT
    iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp --sport 80 -j ACCEPT
    ;;
    
    
    7)
    iptables -A FORWARD -p tcp -o eth1 -i eth0 --dport 80 DROP
    iptables -A FORWARD -p tcp -i eth1 -o eth0 --sport 80 -mstate --state ESTABLISHED -j DROP
    iptables -A OUTPUT -p tcp --dport 80 -j DROP
    iptables -A INPUT -p tcp --sport 80 -j DROP
    ;;
    
    
    8)
    $choix="0"
    ;;
    
    esac
    
    done
    Mais je doute que cela suffise à la bonne marche de ton script ;-\
    1. Alors j'ai supprimer les case en trop.....
      Ca ne fonctionne toujours pas..
      lol tu avais raison
      1. Modérateur
        Ben déjà le début de ton script me laisse assez perplexe :-\

        case=10
        Tu définis quoi avec cette variable ?

        exit=8
        while [ "$exit" = 8 ];

        Et là si par la suite du script tu ne fais pas varier cette valeur, la condition sera forcément vraie en permanence, et puis tu cherches à faire quoi exactement avec cette condition ???

        ;-)
        1. case=10 c'est le nombre max de case du script (enfin je crois on m'a pas bien expliquer)
          et
          while [ "$exit" = 8 ]; je crois que je me suis trompé ca doit etre while [ "$exit" != 8 ]; non ???

          Je sais c'est assez obscure comme réponse mais moi et la programmation ca fait 15....Lol
      2. Modérateur
        Bon je crois qu'une petite entrée en matière des scripts bash ne te fera pas de mal ;-))
        1. Contributeur
          Salut

          Voici une version corrigée qui te permet de quitter le programme.
          Par contre je ne vois pas d'erreur sur le reste. Etrange.

          Bonne chance

          #!/bin/sh
          
          case=10
          
          reponse=-1
          while [ $reponse -ne 8 ];
          do
          
          echo "0) Activer le routage"
          echo "1) Effacer les tables"
          echo "2) Interdir le passage des règles"
          echo "3) Autoriser le passage des règles"
          echo "4) Autoriser les DNS"
          echo "5) Interdir les DNS"
          echo "6) Autoriser le trafic HTTP"
          echo "7) Interdir le trafic HTTP"
          echo "8) QUITTER"
          
          read reponse
          
          case $reponse in 
          
          0)
          echo 1 > /proc/sys/net/ipv4/ip_forward
          ;;
          
          
          1)
          iptables -F
          iptables -t nat -F
          ;;
          
          
          2)
          iptables -P INPUT DROP
          iptables -P OUTPUT DROP
          iptables -P FORWARD DROP
          ;;
          
          
          3)
          iptables -P INPUT ACCEPT
          iptables -P OUTPUT ACCEPT
          iptables -P FORWARD ACCEPT
          ;;
          
          
          4)
          iptables -A FORWARD -p udp -d 212.180.1.79 -i eth0 -o eth1 --dport 53 -j ACCEPT
          iptables -A FORWARD -p udp -s 212.180.1.79 -i eth1 -o eth0 --sport 53 -j ACCEPT
          iptables -A FORWARD -p udp -d 212.180.0.137 -i eth0 -o eth1 --dport 53 -j ACCEPT
          iptables -A FORWARD -p udp -s 212.180.1.79 -i eth1 -o eth0 --sport 53 -j ACCEPT
          iptables -A OUTPUT -p udp --dport 53 -d 212.180.1.79 -j ACCEPT
          iptables -A OUTPUT -p udp --sport 53 -s 212.180.1.79 -j ACCEPT
          ;;
          
          
          5)
          iptables -A FORWARD -p udp -d 212.180.1.79 -i eth0 -o eth1 --dport 53 -j DROP
          iptables -A FORWARD -p udp -s 212.180.1.79 -i eth1 -o eth0 --sport 53 -j DROP
          iptables -A FORWARD -p udp -d 212.180.0.137 -i eth0 -o eth1 --dport 53 -j DROP
          iptables -A FORWARD -p udp -s 212.180.1.79 -i eth1 -o eth0 --sport 53 -j DROP
          iptables -A OUTPUT -p udp --dport 53 -d 212.180.1.79 -j DROP
          iptables -A OUTPUT -p udp --sport 53 -s 212.180.1.79 -j DROP
          iptables -A OUTPUT -p udp --dport 53 -d 212.180.0.137 -j DROP
          iptables -A OUTPUT -p udp --sport 53 -s 212.180.0.137 -j DROP
          ;;
          
          
          6)
          iptables -A FORWARD -p tcp -o eth1 -i eth0 --dport 80 ACCEPT
          iptables -A FORWARD -p tcp -i eth1 -o eth0 --sport 80 -mstate --state ESTABLISHED -j ACCEPT
          iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
          iptables -A INPUT -p tcp --sport 80 -j ACCEPT
          ;;
          
          
          7)
          iptables -A FORWARD -p tcp -o eth1 -i eth0 --dport 80 DROP
          iptables -A FORWARD -p tcp -i eth1 -o eth0 --sport 80 -mstate --state ESTABLISHED -j DROP
          iptables -A OUTPUT -p tcp --dport 80 -j DROP
          iptables -A INPUT -p tcp --sport 80 -j DROP
          ;;
          
          
          8)
          echo "bye"
          ;;
          
          
          *) echo "reponse incorrecte"
          ;;
          
          esac
          
          done
          
          1. bon alors j'ai modifier le début

            case=0
            while ["$reponse" != 8];

            mais.....il me fait toujours la meme erreur...

            c'est le case $reponse qui pas passe....peut etre devrais-je mettre avant le while ceci

            reponse=0 a la place de case=0

            Tu en pense quoi ??
            1. et meme quand je fais ca

              case=8
              while ["$reponse" -le $case];

              j'ai l'impression qu'il voit meme po le while car il ne m'affiche rien....
              et j'obtiens tout l'erreur avec le case $reponse in....

              Bizare

              Pitié help me
              1. Bon j'ai fais des modifs maintenant j'obtiens d'autre erreur

                : N'est pas un répertoire/sh/
                : command not found:
                iptables.sh: line 81: unexpected EOF while looking for matching `"'
                iptables.sh: line 88: syntax error: unexpected end of file

                alors la .....
                je ne sais pas

                j'ai inversé le done et le esac...rien a faire....et pour ma ligne 81 c mon case 8)...je vois pas non plus
                1. Contributeur
                  fais un copier coller de ce que je t'ai donné. J'ai pas dit -le mais -ne. Il y a pas non plus d'apostrophes autour de $reponse.
                  Donc fais un copier coller et dis moi les erreurs qui en résultent.

                  Bonne chance
                  1. : command not found:
                    iptables.sh: line 8: syntax error near unexpected token `)'
                    'ptables.sh: line 8: `echo 0) " Activer le routage "

                    Ca change c deja ca ^^
                    Merci de m'aider au faut !!! :)
                  2. Contributeur
                    @CeaneJe re-répète. lol. Tu effaces tout ton fichier. Et tu colles exactement ce que j'ai mis.
                    Car là visiblement, tu as écrit : echo 0) "..." au lieu de echo "0)...".
                    Normalement ça devrait marcher, mais supprimer tout, et recopie-colle. lol

                    Tiens moi au courant
                  3. @fiddyJ'ai copier ton fichier en entier et ca me fait

                    : command not found:
                    : command not found:
                    iptables.sh: line 21: syntax error near unexpected token `newline'
                    'ptables.sh: line 21: `case $reponse in

                    c zarb quand meme
                  4. Contributeur
                    @fiddyOui en effet
                    Bon on va tenter autre chose dans le même genre lol.
                    Supprime ton fichier. Et tu en recrées un autre et tu colles le code.
                    Et tu relances le programme.
                    Sur mon ordi, ça marche c'est pour ça que je m'obstine comme ça lol.

                    Bonne chance quand même.