Script (message d'erreur)

Résolu
KEGA Messages postés 133 Statut Membre -  
Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'ai un script sur lequel je travailles depuis mais sans jusqu'a présent avoir trouvé une solution.
il a pour principal but d'analyser les logs des users qui se sont connectés à un serveur linux et de ressortir les robots qui se sont logés comme étant des users ( Partant du principe que Si en 1 S on a : user loged in+user modified password + user logged off = alors il s'agit d'un robot (bot) et je dois dans mon script listés tous ceux-ci.Cnf : https://pastebin.com/Fy9pgHa8

Mon probleme c'est que toujours dans mes recherches je me suis appercu que une personne avait déjà crée un script à ce sujet dont je veux m'en inspirer ; Mais quand j'executes le script https://pastebin.com/7V6Msxbp que voici en question j'ai des messages d'erreur suivant "

AvenirTec@Gilles-Etame /cygdrive/c/Users/AvenirTec/Desktop
$ ./bot.sh
./bot.sh: ligne 15: erreur de syntaxe près du symbole inattendu « $'\r' »
'/bot.sh: ligne 15: ` ((rnum++)) "

Rassurez vous qu"en passant par le terminal de Centos ou meme celui de l'emulateur Cygwig j'ai le meme message d'erreur.
Je ne suis qu'un débutant sur Unix donc aidez moi svp!!!!

Cdlt;

2 réponses

  1. Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention   150
     
    Saloute,

    Aller, c'est nowel :


    #!/bin/bash

    if [ $# -eq 0 ]
    then
    echo "Vous devez indiquer un fichier à parser : PARSER.bash file.log"
    exit
    fi

    if ! [ -f $1 ]
    then
    echo "le fichier $(pwd)/$1 n'existe pas."
    exit
    else
    FPATH="$(pwd)/$1"
    FNAME=$1
    fi

    touch tmpuserlist
    RNUM=1
    while read LINE
    do
    if [[ $LINE =~ "user logged in" ]]
    then
    USER=$(head -n $RNUM $FNAME| tail -n1 | awk -F '|' '{print $3}')
    TSTAMP=$(head -n $RNUM $FNAME | tail -n1 | awk -F '|' '{print $1}')
    NEXTLINE=$(head -n $((RNUM + 1)) $FNAME | tail -n1)
    NEXTLINE2=$(head -n $((RNUM + 2)) $FNAME | tail -n1)

    if [[ "$NEXTLINE" == *"$USER"* && "$NEXTLINE" == *"user changed password"* && "$NEXTLINE" == *"$TSTAMP"* && "$NEXTLINE2" == *"$USER"* && "$NEXTLINE2" == *"user logged off"* && "$NEXTLINE2" == *"$TSTAMP"* ]]
    then
    echo $USER >> tmpuserlist
    fi
    fi
    ((RNUM++))
    done < $FNAME
    cat tmpuserlist | sort | uniq
    rm -f tmpuserlist


    En revanche, la connexion, changement de mdp etc a l'air bien cyclique. Pas sure que ce script fonctionne si plusieurs utilisateurs ce connecte en méme temps, ce deconnecte a des heures differentes etc... (nextline & nextline2) ça peut vite faire peu :)

    Joyeux Noël à tous, des bisous.
    0
    1. Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention   150
       
      Edit : il faudrait mettre tous les FNAME entre guillemet au cas ou celui ci contienne des espaces
      0
    2. Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention   150
       
      Tu as des erreurs car tu cherches a executer un script shell en bash.
      SHELL != BASH
      0
    3. KEGA Messages postés 133 Statut Membre 5
       
      @Exileur, je t'assures que c'est l'un des meilleurs cadeaux que j'ai recu en ce jour.
      Je te dis infiniment merci pour ta prompte réaction.Ton programme fonctionne parfaitement je
      l'ai juste amélioré dans la forme.
      Merci encore et surtout Merci!!!!!!!
      Ca me plairait vraimment d'echanger avec toi (Biensur si c'est possible en ib pour certains projets);

      Cdlt.
      0
    4. Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention   150
       
      Hesite pas a re-poster sur CCM si tu as d'autre questions.
      Je garde un oeil sur le forum linux ;)

      Eventuellement tu peux nous montrer le code que tu as en finalité ? (avec tes modifs)
      A plus
      0
    5. Utilisateur anonyme > Exileur Messages postés 1621 Date d'inscription   Statut Membre Dernière intervention  
       
      SHELL != BASH ah bon !? bash n'est pas un shell ?
      par contre, parfois
      /bin/sh != /bin/bash
      .
      0
  2. Utilisateur anonyme
     
    salut,

    tu as écrit ton script sur W$ ?
    -1
    1. KEGA Messages postés 133 Statut Membre 5
       
      il est vrai qu'a la base il etait en fichier .txt mais rassurez vous que je l'ai converti déjà pour en script linux par la commande Dos2Unix
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > KEGA Messages postés 133 Statut Membre
       
      Salut,
      mais rassurez vous que je l'ai converti déjà pour en script linux par la commande Dos2Unix
      Pourtant l'erreur (
      ligne 15: erreur de syntaxe près du symbole inattendu « $'\r' » 
      ) indique le contraire ;-(

      Affiche-nous ici, entre les balises <code> </code> la sortie de
      cat -A bot.sh
      s'il te plaît, merci.
      0
    3. KEGA Messages postés 133 Statut Membre 5
       
      Merci pour ta prompte réaction; ci-joints la sortie de la sortie de "cat -A bot.sh"

      AvenirTec@Gilles-Etame /cygdrive/c/Users/AvenirTec/Desktop
      $ cat -t bot.sh
      $ cat file.log ^M
      Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user logged in| - ^M
      Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user changed pass word| -^M
      Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user logged off| -^M
      Mon, 22 Aug 2016 13:15:42 +0200|178.57.66.225|faaaaaa11111| - |user logged in| - ^M
      Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user logged in| - ^M
      Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user changed pass word| -^M
      Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user logged off| -^M
      Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged in| -^ M
      Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged in| -^ M
      Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user changed passw ord| -^M
      Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged off| - ^M
      Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user logged in| -^M
      Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user changed passwor d| -^M
      Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user changed profile | -^M
      Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user logged off| -^M
      Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciulmla| - |user logged in| -^M
      Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciulmla| - |user changed passwo rd| -^M
      Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciulmla| - |user logged off| -^ M
      Mon, 22 Aug 2016 13:20:42 +0200|178.57.67.225|faaaa0a1111| - |user logged in| -^ M
      $ cat parser ^M
      #!/bin/bash^M
      fname=$1^M
      rnum=1^M
      while read line^M
      do^M
      if [[ $line =~ "user logged in" ]]; then^M
      user=`head -n $rnum $fname | tail -n1 | awk -F'|' '{print $3}'`^M
      tstamp=`head -n $rnum $fname | tail -n1 | awk -F'|' '{print $1}'`^M
      nextline=`head -n $[$rnum+1] $fname | tail -n1`^M
      nextline2=`head -n $[$rnum+2] $fname | tail -n1`^M
      if [[ $nextline =~ $user && $nextline =~ "user changed password" && $nex tline =~ "$tstamp" && $nextline2 =~ $user && $nextline2 =~ "user logged off" && $nextline2 =~ "$tstamp" ]]; then^M
      echo $user >> tmpuserlist ^M
      fi^M
      fi^M
      ((rnum++))^M
      done <$fname^M
      cat tmpuserlist | sort | uniq^M
      rm -f tmpuserlist^M
      ./parser file.log ^M
      erdsfsdfsdf^M
      fxsciaqulmlk^M
      fxsciulmla^M
      terdsfsdfsdf^M
      $
      0
    4. KEGA Messages postés 133 Statut Membre 5
       
      SVP Que quelqu'un essaye aussi de me compiler voir executer le programme en question que voici :

      $ cat file.log
      Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user logged in| -
      Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user changed password| -
      Mon, 22 Aug 2016 13:15:39 +0200|178.57.66.225|fxsciaqulmlk| - |user logged off| -
      Mon, 22 Aug 2016 13:15:42 +0200|178.57.66.225|faaaaaa11111| - |user logged in| -
      Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user logged in| -
      Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user changed password| -
      Mon, 22 Aug 2016 13:15:49 +0200|178.57.66.215|terdsfsdfsdf| - |user logged off| -
      Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged in| -
      Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged in| -
      Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user changed password| -
      Mon, 22 Aug 2016 13:15:59 +0200|178.57.66.205|erdsfsdfsdf| - |user logged off| -
      Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user logged in| -
      Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user changed password| -
      Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user changed profile| -
      Mon, 22 Aug 2016 13:17:50 +0200|178.57.66.205|abcbbabab| - |user logged off| -
      Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciulmla| - |user logged in| -
      Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciulmla| - |user changed password| -
      Mon, 22 Aug 2016 13:19:19 +0200|178.56.66.225|fxsciulmla| - |user logged off| -
      Mon, 22 Aug 2016 13:20:42 +0200|178.57.67.225|faaaa0a1111| - |user logged in| -
      $ cat parser
      #!/bin/bash
      fname=$1
      rnum=1
      while read line
      do
      if [[ $line =~ "user logged in" ]]; then
      user=`head -n $rnum $fname | tail -n1 | awk -F'|' '{print $3}'`
      tstamp=`head -n $rnum $fname | tail -n1 | awk -F'|' '{print $1}'`
      nextline=`head -n $[$rnum+1] $fname | tail -n1`
      nextline2=`head -n $[$rnum+2] $fname | tail -n1`
      if [[ $nextline =~ $user && $nextline =~ "user changed password" && $nextline =~ "$tstamp" && $nextline2 =~ $user && $nextline2 =~ "user logged off" && $nextline2 =~ "$tstamp" ]]; then
      echo $user >> tmpuserlist
      fi
      fi
      ((rnum++))
      done <$fname
      cat tmpuserlist | sort | uniq
      rm -f tmpuserlist
      ./parser file.log
      erdsfsdfsdf
      fxsciaqulmlk
      fxsciulmla
      terdsfsdfsdf
      $




      Moi je n'y arrive pas!!
      0
    5. Utilisateur anonyme
       
      tant que tu n'utiliseras pas les balises CODES (le bouton
      <>
      ) en séparant les différents éléments (affichage des données, contenu du script, exécution...) je n'y toucherai pas.

      « Moi je n'y arrive pas!! »
      que se passe-t-il ? un message d'erreur ?

      PS : t'as appris à coder quand, il y a plus de vingt ans ?
      il y a longtemps qu'on n'utilise plus
      ` `
      , et
      $[ ]
      .
      0