Problème Script Shell

Résolu
Bonjour,

Je dois faire un script qui indique si des noms d'utilisateurs passé en argument sont connectés ou non. J'ai fais ceci, mais il me retourne toujours non connecté :

#! /bin/bash
oui=true
co=false

 #pour tester tous les arguments donnés
 for user 
 do
  # on test pour chaque connecte
  for online in $(who|cut -f1 -d' ')
  do
   # si on une correspondance alors on leve un drapeau
   if (($online=$user))
   then
    co=true
   fi
  done

  # on affiche en fonction du drapeau le cas pour l'utilisateur $user
  if (($co = $oui))
  then
   echo "$user : connecté"
  else
   echo "$user : non connecté"
  fi
 done

exit 0


Avez vous des solutions ?

3 réponses

  1. Contributeur
    Salut,

    Une autre façon de voir les choses...

    #! /bin/bash
    
    for  i in $@
    do
    	w "${i}" | egrep -m 1 "^${i}" >/dev/null && echo "${i} Connecté" || echo "${i} Non connecté"
    done
    


     $ ./foo.sh jp toto
    jp Connecté
    toto Non connecté

    1
    1. salut,

      les double-parenthèses introduisent un contexte arithmétique.

      ça, c'est plus simple :
      #!/bin/bash

      args=(user1 qqchquicommenceparq user3)
      logged=( $(who | awk '{u[$1]++}END{for (i in u)print i}') )
      comm -12 <(printf '%s\n' "${logged[@]}" |sort) <(printf '%s\n' "${args[@]}" | sort)
      0
      1. Merci de vos réponses
        0